[STM8] STM8L唤醒后串口发送出错?

[复制链接]
3967|7
 楼主| donsbin 发表于 2015-7-20 14:58 | 显示全部楼层 |阅读模式
程序利用RTC定时唤醒,进入睡眠前把串口中断关闭了
唤醒后使能中断,发送数据,在串口助手上看到的数据是错误的。
如果唤醒后重新对串口进行初始化,就正常了。这是怎么回事?

  1. void RTC_Config1(void)
  2. {
  3.   CLK_LSEConfig(CLK_LSE_ON);
  4.   CLK_RTCClockConfig(CLK_RTCCLKSource_LSE, CLK_RTCCLKDiv_1);
  5.   while (CLK_GetFlagStatus(CLK_FLAG_LSERDY) == RESET);
  6.   RTC_WakeUpCmd(DISABLE);
  7.   CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);
  8.   RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);
  9.   RTC_ITConfig(RTC_IT_WUT, ENABLE);
  10.   RTC_SetWakeUpCounter(10000);
  11.   ITC_SetSoftwarePriority(RTC_IRQn, ITC_PriorityLevel_3);
  12. }


我是土匪 发表于 2015-7-20 15:20 | 显示全部楼层
我也用这个片子。
做法是进入低功耗前把串口设置GPIO才能最省电,halt模式唤醒后重新初始化一次。

不过即使不这样做,也不会出现你的问题,请逐步砍掉你的代码做测试。
 楼主| donsbin 发表于 2015-7-20 15:29 | 显示全部楼层
我是土匪 发表于 2015-7-20 15:20
我也用这个片子。
做法是进入低功耗前把串口设置GPIO才能最省电,halt模式唤醒后重新初始化一次。

在进入halt低功耗之前,我把时钟切换到了LSE后,程序无法在线调试了啊。
不过可以采用你的方案。目前我低功耗电流还是挺大的,不知道你现在做到多少uA了。
我是土匪 发表于 2015-7-20 16:53 | 显示全部楼层
我的单片机能做到1uA以下,加上外围,整个系统110uA.
HALT无法调试,你唤醒以下,可以发现又能够继续调试了
十三月 发表于 2015-7-24 17:18 | 显示全部楼层
我最近也在用这个片子,请问一下我的主时钟为16M,进入停机模式halt();指令前我没有关闭它,但是我关掉了外设,功耗有200uA,停机初始化的时候要关掉时钟吗?还要进行哪些操作呢?
十三月 发表于 2015-7-24 17:20 | 显示全部楼层
我使用串口的时候也出现这种情况,停机唤醒后必须重新初始化串口才能正常打印,不然就打印乱码
mintspring 发表于 2015-7-24 21:25 | 显示全部楼层
逐步砍掉你的代码做测试
wangwei0952 发表于 2016-3-1 18:04 | 显示全部楼层
最近使用STM8L也遇到这样的问题,用的RTC  100ms唤醒一次,唤醒后初始化好串口发送数据,发送完成后进入halt,最后两个字节总是错的。不知道怎么弄
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

96

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部