/** * @brief Main program. * @param None * @retval None */ void main(void) { uint32_t i = 0; /* Configure the multiplexer on the evalboard to select the smartCard*/ Multiplexer_EvalBoard_Config(); /* Configure the GPIO ports */ GPIO_Config(); /*High speed internal clock prescaler: 1*/ CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); /* Enable general interrupts */ enableInterrupts(); UART1_DeInit(); /* UART1 configuration -------------------------------------------------------*/ /* UART1 configured as follow: - Word Length = 9 Bits - 1.5 Stop Bit - Even parity - BaudRate = 10752 baud - Receive and transmit enabled - UART1 Clock enabled */ UART1_Init((uint32_t)10752, UART1_WORDLENGTH_9D, UART1_STOPBITS_1_5, UART1_PARITY_EVEN, UART1_SYNCMODE_CLOCK_ENABLE, UART1_MODE_TXRX_ENABLE); /* UART1 Clock set to 4MHz (frequence master 16 MHZ / 4) */ UART1_SetPrescaler(0x02); /* UART1 Guard Time set to Bit */ UART1_SetGuardTime(0x2); /* Enable the UART1 Parity Error Interrupt */ UART1_ITConfig(UART1_IT_PE, ENABLE); /* Enable the NACK Transmission */ UART1_SmartCardNACKCmd(ENABLE); /* Enable the Smart Card Interface */ UART1_SmartCardCmd(ENABLE); /* Loop while no smart card is detected */ while ((GPIO_ReadInputData(GPIOE)& 0x01) == 0x00) { } /* PG7 - SmartCard_/CMDVCC: low */ GPIO_WriteLow(GPIOG, GPIO_PIN_7); /* release SmartCard_RESET signal */ GPIO_WriteLow(GPIOG, GPIO_PIN_5); for (i = 0; i < 6000; i++) { } /* set SmartCard_RESET signal */ GPIO_WriteHigh(GPIOG, GPIO_PIN_5); /* Read Smart Card ATR response */ for (index = 0; index < 40; index++) { Counter = 0; while ((UART1_GetFlagStatus(UART1_FLAG_RXNE) == RESET) && (Counter != SC_Receive_Timeout)) { Counter++; } if (Counter != SC_Receive_Timeout) { DST_Buffer[index] = UART1_ReceiveData8(); } } /* Decode ATR */ CardProtocol = SC_decode_Answer2reset(DST_Buffer); /* Test if the inserted card is ISO7816-3 T=0 compatible */ if (CardProtocol == 0) { /* Inserted card is ISO7816-3 T=0 compatible */ ATRDecodeStatus = PASSED; } else { /* Inserted smart card is not ISO7816-3 T=0 compatible */ ATRDecodeStatus = FAILED; } while (1) {} }
/** * @brief Example firmware main entry point. * @par Parameters: * None * @retval * None */ void main(void) { /* Configures the Multiplexer on the evalboard to select the IrDA*/ Multiplexer_EvalBoard_Config(); /* Initialize I/Os in Output Mode */ GPIO_Init(LEDS_PORT, LED1_PIN | LED2_PIN | LED3_PIN | LED4_PIN, GPIO_MODE_OUT_PP_HIGH_FAST); UART1_DeInit(); /* UART1 configuration ----------------------------------------------------*/ /* UART1 configured as follow: - Word Length = 8 Bits - One Stop Bit - No parity - BaudRate = 9600 baud - Tx and Rx enabled - UART1 Clock disabled */ UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE); /* Set Prescaler*/ UART1_SetPrescaler(0x1); UART1_IrDAConfig(UART1_IRDAMODE_NORMAL); UART1_IrDACmd(ENABLE); while (1) { /* Wait until a byte is received */ while (UART1_GetFlagStatus(UART1_FLAG_RXNE) == RESET) { } /* Read the received byte */ ReceivedData = UART1_ReceiveData8(); switch (ReceivedData) { /* Led connected to PH.0 (LED4) toggle */ case UP: GPIO_WriteReverse(GPIOH, GPIO_PIN_0); break; /* Led connected to PH.1 (LED3) toggle */ case DOWN: GPIO_WriteReverse(GPIOH, GPIO_PIN_1); break; /* Led connected to PH.2 (LED2) toggle */ case LEFT: GPIO_WriteReverse(GPIOH, GPIO_PIN_2); break; /* Led connected to PH.3 (LED1) toggle */ case RIGHT: GPIO_WriteReverse(GPIOH, GPIO_PIN_3); break; case SEL: GPIO_WriteReverse(GPIOH, GPIO_PIN_0|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1); break; default: break; } } }