OpenEdv-开源电子网

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

关于STM32串口唤醒STOP模式的总结

[复制链接]

6

主题

48

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6222
金钱
6222
注册时间
2018-12-2
在线时间
112 小时
发表于 2019-3-13 09:31:40 | 显示全部楼层 |阅读模式
本帖最后由 Sanjay 于 2019-3-27 21:02 编辑

看博客更加详细:https://blog.csdn.net/Sanjay_Wu/article/details/88425286

觉得有帮助就回复支持鼓励一下,觉得有错误或可以完善的,麻烦指正指出,,感谢!


前言


STM32常见的低功耗模式有三种:睡眠模式、STOP模式以及待机模式,STM32L系列还有其他低功耗模式。就STOP模式来说,可以通过外部中断或事件唤醒,但是在有些情况下,我们可能需要通过串口来唤醒,比如STM32+ESP8266与后台服务器进行数据交互,当不用发送数据完毕,等待下次发送数据或等待后台下发数据给设备的这段时间可以让STM32进入STOP模式来达到省电,如果后台下发数据,这时候是先把数据下发给ESP8266,然后ESP8266再通过串口发送给STM32,那么就可以唤醒STM32了。

一、用串口唤醒STOP模式思路

1、唤醒思路:在进入STOP模式之前,将串口的RX引脚配置为外部中断模式,然后当串口发送数据时就触发了外部中断,也就唤醒了STM32,唤醒之后就重新配置初始化串口。

2、唤醒后程序是从原来进入STOP模式前那里重新开始执行。


二、如何进入STOP模式?

1、以STM32F103系列为例,用标准库函数,进入STOP模式代码如下:
[mw_shl_code=c,true]/**************************************************************
函数名称:system_enter_stop
函数功能:系统进入STOP模式
输入参数:无
返 回 值:无
备     注:无
**************************************************************/
void system_enter_stop(void)
{
    uart_exti_init()/* 进入STOP模式前配置RX引脚为外部中断模式 */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR , ENABLE);/* 开电源管理时钟 */
    PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFE);/* 进入STOP模式,外部中断或事件唤醒 */
}[/mw_shl_code]


三、串口唤醒存在的问题

1、用串口唤醒会存在一些问题:如果你是发一串很长的数据来唤醒串口,这串数据也是通过0101010等二进制来发送的,当RX引脚被触发中断唤醒MCU之后,剩余的数据也就会接着发送,这样导致的问题就是有数据丢失。如果是发一个字符,那么就会直接唤醒,但是不会接收这个字符,只有第二次发送的时候才会接收到这个字符。


四、唤醒实验

1、实验平台:中国移动物联网OneNET NB开发板(板载STM32)。

2、STM32F103RET6、12M外部晶振、串口3进行实验。

3、操作系统:RT-Thread。

4、进行实际实验,用RT-Thread创建两个线程,一个线程用于读取按键是否按下,按下则调用进入STOP模式函数进入STOP模式,另一个线程读取串口接收到的数据。将RX引脚配置为外部中断模式用的是RT-Thread的PIN设备进行配置,工程代码附件。


实验图.JPG

串口或外部中断唤醒STOP模式实验.zip

6.31 MB, 下载次数: 1354

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

使用道具 举报

109

主题

5562

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10541
金钱
10541
注册时间
2017-2-18
在线时间
1908 小时
发表于 2019-3-13 20:47:02 | 显示全部楼层
回复 支持 反对

使用道具 举报

5

主题

179

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
8194
金钱
8194
注册时间
2016-9-7
在线时间
1113 小时
发表于 2019-3-31 00:12:22 | 显示全部楼层
嗯,多谢分享了。
回复 支持 反对

使用道具 举报

6

主题

315

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1665
金钱
1665
注册时间
2018-1-29
在线时间
159 小时
发表于 2019-6-13 09:48:25 | 显示全部楼层
感谢分享,正在学习STOP模式用法!
回复 支持 反对

使用道具 举报

57

主题

156

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
451
金钱
451
注册时间
2013-5-23
在线时间
46 小时
发表于 2020-4-24 15:48:27 | 显示全部楼层
makr一个。。。。。。。。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2020-12-3
在线时间
1 小时
发表于 2020-12-16 16:01:24 | 显示全部楼层
为什么串口打印乱码呀
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2021-7-1
在线时间
1 小时
发表于 2021-9-17 09:10:35 | 显示全部楼层
不想使用RT 该怎么解决一下
回复 支持 反对

使用道具 举报

5

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2015-4-15
在线时间
22 小时
发表于 2023-4-12 14:00:03 | 显示全部楼层
用hal库如何实现呢
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2014-10-11
在线时间
25 小时
发表于 2023-10-19 19:39:07 | 显示全部楼层
谢谢您的实验和经验分享.
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 19:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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