/** * @brief Start Bit Method to USART AutoBaudRate. * @param None * @retval None */ static void AutoBauRate_StartBitMethod(void) { /* USART enable */ USART_Cmd(USART1, ENABLE); /* Configure the AutoBaudRate method */ USART_AutoBaudRateConfig(USART1, USART_AutoBaudRate_StartBit); /* Enable AutoBaudRate feature */ USART_AutoBaudRateCmd(USART1, ENABLE); /* Wait until Receive enable acknowledge flag is set */ while(USART_GetFlagStatus(USART1, USART_FLAG_REACK) == RESET) {} /* Wait until Transmit enable acknowledge flag is set */ while(USART_GetFlagStatus(USART1, USART_FLAG_TEACK) == RESET) {} /* Loop until the end of Autobaudrate phase */ while(USART_GetFlagStatus(USART1, USART_FLAG_ABRF) == RESET) {} /* If AutoBaudBate error occurred */ if (USART_GetFlagStatus(USART1, USART_FLAG_ABRE) != RESET) { /* Turn on LED3 */ STM_EVAL_LEDOn(LED3); } else { /* Turn on LED2 */ STM_EVAL_LEDOn(LED2); /* Wait until RXNE flag is set */ while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET) {} /* Wait until TXE flag is set */ while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET) {} /* Send received character */ USART_SendData(USART1, USART_ReceiveData(USART1)); /* clear the TE bit (if a transmission is on going or a data is in the TDR, it will be sent before efectivelly disabling the transmission) */ USART_DirectionModeCmd(USART1, USART_Mode_Tx, DISABLE); /* Check the Transfer Complete Flag */ while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {} } /* USART Disable */ USART_Cmd(USART1, DISABLE); }
/** * @brief Main program. * @param None * @retval None */ int main(void) { /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f30x.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f30x.c file */ /* Initialize LEDs available on STM32303C-EVAL board ************************/ STM_EVAL_LEDInit(LED1); STM_EVAL_LEDInit(LED2); STM_EVAL_LEDInit(LED3); STM_EVAL_LEDInit(LED4); /* Enable PWR APB clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); /* USART configuration to Wake up from STOP mode by Start bit Method */ USART_Config(); /* Waiting Wake Up interrupt */ while(InterruptCounter == 0x00) {} /* Disable USART peripheral in STOP mode */ USART_STOPModeCmd(USART1, DISABLE); while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET) {} DataReceived = USART_ReceiveData(USART1); /* Clear the TE bit (if a transmission is on going or a data is in the TDR, it will be sent before effectively disabling the transmission) */ USART_DirectionModeCmd(USART1, USART_Mode_Tx, DISABLE); /* Check the Transfer Complete Flag */ while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {} /* USART Disable */ USART_Cmd(USART1, DISABLE); /* Configure SystemClock*/ RestoreConfiguration(); /* Configure and enable the systick timer to generate an interrupt each 1 ms */ SysTick_Config((SystemCoreClock / 1000)); while(1) {} }
/** * @brief Start Bit Method to Wake Up USART from Stop mode Test. * @param None * @retval None */ static void WakeUp_StartBitMethod(void) { /* Configure the wake up Method = Start bit */ USART_StopModeWakeUpSourceConfig(USART1, USART_WakeUpSource_StartBit); /* Enable USART1 */ USART_Cmd(USART1, ENABLE); /* Before entering the USART in STOP mode the REACK flag must be checked to ensure the USART RX is ready */ while(USART_GetFlagStatus(USART1, USART_FLAG_REACK) == RESET) {} /* Enable USART STOP mode by setting the UESM bit in the CR1 register.*/ USART_STOPModeCmd(USART1, ENABLE); /* Enable the wake up from stop Interrupt */ USART_ITConfig(USART1, USART_IT_WU, ENABLE); /* Enable PWR APB clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); /* Enter USART in STOP mode with regulator in low power mode */ PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); /* Waiting Wake Up interrupt */ while(InterruptCounter == 0x00) {} /* Disable USART peripheral in STOP mode */ USART_STOPModeCmd(USART1, DISABLE); while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET) {} DataReceived = USART_ReceiveData(USART1); /* Clear the TE bit (if a transmission is on going or a data is in the TDR, it will be sent before efectivelly disabling the transmission) */ USART_DirectionModeCmd(USART1, USART_Mode_Tx, DISABLE); /* Check the Transfer Complete Flag */ while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {} /* USART Disable */ USART_Cmd(USART1, DISABLE); }