打印
[STM8]

STM8L唤醒后串口发送出错?

[复制链接]
3410|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
donsbin|  楼主 | 2015-7-20 14:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序利用RTC定时唤醒,进入睡眠前把串口中断关闭了
唤醒后使能中断,发送数据,在串口助手上看到的数据是错误的。
如果唤醒后重新对串口进行初始化,就正常了。这是怎么回事?

void RTC_Config1(void)
{
  CLK_LSEConfig(CLK_LSE_ON);
  CLK_RTCClockConfig(CLK_RTCCLKSource_LSE, CLK_RTCCLKDiv_1);
  while (CLK_GetFlagStatus(CLK_FLAG_LSERDY) == RESET);
  RTC_WakeUpCmd(DISABLE);
  CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);
  RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);
  RTC_ITConfig(RTC_IT_WUT, ENABLE);
  RTC_SetWakeUpCounter(10000);
  ITC_SetSoftwarePriority(RTC_IRQn, ITC_PriorityLevel_3);
}


沙发
我是土匪| | 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无法调试,你唤醒以下,可以发现又能够继续调试了

使用特权

评论回复
5
十三月| | 2015-7-24 17:18 | 只看该作者
我最近也在用这个片子,请问一下我的主时钟为16M,进入停机模式halt();指令前我没有关闭它,但是我关掉了外设,功耗有200uA,停机初始化的时候要关掉时钟吗?还要进行哪些操作呢?

使用特权

评论回复
6
十三月| | 2015-7-24 17:20 | 只看该作者
我使用串口的时候也出现这种情况,停机唤醒后必须重新初始化串口才能正常打印,不然就打印乱码

使用特权

评论回复
7
mintspring| | 2015-7-24 21:25 | 只看该作者
逐步砍掉你的代码做测试

使用特权

评论回复
8
wangwei0952| | 2016-3-1 18:04 | 只看该作者
最近使用STM8L也遇到这样的问题,用的RTC  100ms唤醒一次,唤醒后初始化好串口发送数据,发送完成后进入halt,最后两个字节总是错的。不知道怎么弄

使用特权

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

本版积分规则

20

主题

96

帖子

2

粉丝