先交代一下背景: 最近在做这么一个测试,stm32L053进入停机模式,配置stm32的两个串口互相转发数据,并返回到PC端的调试助手。串口使用的是中断接收, 我看了一下文档,说是外部事件可以唤醒,所以,就没有添加按键中断。 贴一下源码: //串口UART1 中断接收 void USART1_IRQHandler(void) { HAL_UART_IRQHandler(&UartHandle); flag_uart1=1;//标志在主函数里面发送数据 //如果串口1接收到数据,则通过串口2将串口1接收的数据回发到PC端 TxBuffer2[0]=aRxBuffer[0]; HAL_UART_Receive_IT(&UartHandle,(uint8_t *)aRxBuffer,1);//使能接收中断 } //串口UART2 中断接收 void USART2_IRQHandler(void) { HAL_UART_IRQHandler(&Uart2Handle);//中断服务函数 flag_uart2=1; //标志在主函数里面发送数据 //如果串口2接收到数据,则通过串口1将串口2接收的数据回发到PC端 aTxBuffer[0]=RxBuffer2[0];//将数据保存至缓存 HAL_UART_Receive_IT(&Uart2Handle,(uint8_t *)RxBuffer2,1);//使能接收中断 } int main(void) { HAL_Init();//硬件抽象层初始化 SystemClock_Config(); SystemPower_Config(); USART1_Init();//串口 UART1 USART2_Init();//串口 UART2 while(1) { if( (flag_uart1==1) || (flag_uart2==1))//如果中断接收了数据 { if(flag_uart1==1) { flag_uart1=0; //如果串口1接收到数据,则通过串口2将串口1接收的数据回发到PC端 HAL_UART_Transmit(&Uart2Handle,(uint8_t *)TxBuffer2,1,100); } if(flag_uart2==1) { flag_uart2=0; //如果串口2接收到数据,则通过串口1将串口2接收的数据回发到PC HAL_UART_Transmit(&UartHandle,(uint8_t *)aTxBuffer,1,100); } } HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFE); //进入停机模式,等待外部事件唤醒 SystemClockConfig_STOP();//唤醒后时钟的配置,参考了库函数的代码 } } |
RE:STM32L0停机唤醒模式求助?????????