打印

STM32L停机唤醒求助

[复制链接]
6401|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
化雨眠66|  楼主 | 2014-9-19 16:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
先交代一下背景:
     最近在做这么一个测试,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();//唤醒后时钟的配置,参考了库函数的代码                                                               
                }
}








沙发
大秦正声| | 2014-9-19 16:27 | 只看该作者
你使用哪种功耗模式?

使用特权

评论回复
板凳
大秦正声| | 2014-9-19 16:30 | 只看该作者
建议用i/o唤醒

使用特权

评论回复
地板
化雨眠66|  楼主 | 2014-9-19 16:57 | 只看该作者
大秦正声 发表于 2014-9-19 16:27
你使用哪种功耗模式?

Stop mode  

使用特权

评论回复
5
化雨眠66|  楼主 | 2014-9-19 17:01 | 只看该作者
大秦正声 发表于 2014-9-19 16:30
建议用i/o唤醒

你的意思是 外部中断线唤醒么???因为现在的要求是:单片机工作在低功耗停机模式,串口会不定时发送数据,一旦串口中断接收数据,单片机要立即退出低功耗,然后转发数据到PC

使用特权

评论回复
6
化雨眠66|  楼主 | 2014-9-20 15:17 | 只看该作者
SYJPCB2014 发表于 2014-9-20 14:24
价格便宜:顺易捷PCB打样10*10cm只要50元,双面板批量只要398元,超长板最长可做到1米2。
质量保证:全部采 ...

留下联系方式   正好需要打样PCB呢

使用特权

评论回复
7
mangbudie| | 2015-1-11 18:16 | 只看该作者
HAL_UART_Receive_IT(&Uart2Handle,(uint8_t *)RxBuffer2,1);
我想请教一下,中断接收多个byte时,这句话应该怎么用?

使用特权

评论回复
8
trice| | 2015-1-12 10:27 | 只看该作者
哈,想问一下,如果在进入低功耗之前,想关闭串口功能的话,那串口的两个引脚要怎么配置呢?

使用特权

评论回复
9
北极星405| | 2015-2-15 10:18 | 只看该作者
学习了……

使用特权

评论回复
10
北极星405| | 2015-2-15 10:26 | 只看该作者
楼主问题解决了吗?给大家分享下经验呀~多谢啦!

使用特权

评论回复
11
小浣熊| | 2015-2-28 23:56 | 只看该作者
外部事件可以唤醒!!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

77

帖子

8

粉丝