OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8424|回复: 5

stm32停机模式唤醒求助?????

[复制链接]

60

主题

204

帖子

0

精华

高级会员

Rank: 4

积分
503
金钱
503
注册时间
2014-2-28
在线时间
7 小时
发表于 2014-9-19 16:13:07 | 显示全部楼层 |阅读模式
5金钱
先交代一下背景:
     最近在做这么一个测试,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();//唤醒后时钟的配置,参考了库函数的代码
          }
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-9-19 23:10:35 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-10-20
在线时间
18 小时
发表于 2016-8-4 17:58:55 | 显示全部楼层
@正点原子 @交流zzk
进入stop模式前,将串口的RxD设置为外部中断输入。
在stop模式时,RxD端口接收到数据时(有上升沿或下降沿时),产生中断。
中断服务程序中,恢复MCU的时钟,再将RxD端口当串口接收端口使用即可
回复

使用道具 举报

28

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
461
金钱
461
注册时间
2013-10-18
在线时间
72 小时
发表于 2016-11-8 14:17:58 | 显示全部楼层
本帖最后由 SCREA 于 2016-11-8 16:23 编辑
手机早晚报 发表于 2016-8-4 17:58
@正点原子 @交流zzk
进入stop模式前,将串口的RxD设置为外部中断输入。
在stop模式时,RxD端口接收到数 ...

如图,我也卡在这了。这是外部中断现,其中串口1、2的外部中断线不用配置。倒是需要配置
CR1的UESM、
CR3的WUFIE、WUS
并且只能是HSI、LSE,   这个在RCC->CCIPR 配置。

=======================
试试你的这方法怎么样,为何停止模式下我唤醒后 空闲接收不能使用了?????
QQ截图20161108141245.png
QQ截图20161108141245.png
回复

使用道具 举报

28

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
461
金钱
461
注册时间
2013-10-18
在线时间
72 小时
发表于 2016-11-8 14:19:01 | 显示全部楼层
你解决没有???
回复

使用道具 举报

28

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
461
金钱
461
注册时间
2013-10-18
在线时间
72 小时
发表于 2016-11-8 14:19:15 | 显示全部楼层
本帖最后由 SCREA 于 2016-11-9 11:03 编辑

你解决没有???????????

解决。。。。。。。。。。。
调试的时候CCRG的bit15 我置位1. 因为用的HSI,这样还继续能用空闲中断(手册上说STOP模式下 空闲不可用???)


32.768hz做串口时钟调了半小时就是接收不到数据,先不管了,用HSI吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 22:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表