OpenEdv-开源电子网

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

F103串口唤醒STOP模式怎么才能不丢数

[复制链接]

4

主题

10

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2020-2-3
在线时间
12 小时
发表于 2020-2-25 17:34:24 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 zzqnysafe 于 2020-2-26 10:09 编辑

如题。使用的串口1顺序:将RX引脚配置为外部中断10→进入stop模式→起始字符下降沿唤醒单片机→重新初始化时钟→重新初始化PA.10串口配置
问题:1.第一次唤醒,串口连续发送的字符会发生错位。
2.如果先发一个字符,唤醒之后,后面接收就正常了。(其实这个字符会引起多少个下降沿,就会进入多少次外部中断)
希望解决:能不能在start bit把单片机唤醒之后,获取到后面的数据?
不是钢筋,我手里有个俄罗斯的传感器,用的芯片是STM32F103用的内部HSI休眠时工作3.3V电流0.8mA。9600的波特率情况下,发送比如“F“,”DATA“等指令(有十几个),间隔45ms左右都能立刻回复对应的内容(指令识别从未发生错误)。回复时,电流为20mA左右。如果不问答,传感器会定时10ms唤醒一次 采集数据,电流在10mA。因此我确信它是工作在低功耗模式。问题是它怎么实现的串口数据不丢失。
传感器上的硬件:一个LDO+单片机+2个放大信号的运放。或者不是STOP模式???STANDBY能实现?



接收单个字符响应

接收单个字符响应
通信状态.png
正常唤醒.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2020-2-25 23:41:00 | 显示全部楼层
唤醒是需要时间的,唤醒还要配置USART,所以唤醒的哪个数据不一定会收得到。建议从协议上解决吧,比如多发一个字节用作唤醒。
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2778
金钱
2778
注册时间
2015-6-1
在线时间
394 小时
发表于 2020-2-26 09:26:46 | 显示全部楼层
如果不问答,传感器会定时10ms唤醒一次?
你确定是10ms么?这么高频的唤醒+停机,你是怎么做到的?唤醒后光初始化时钟就比较慢吧?还要读数据,9600波特率,10ms才能收几个字节,好奇你是怎么做到的?
自在随心
回复

使用道具 举报

4

主题

10

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2020-2-3
在线时间
12 小时
 楼主| 发表于 2020-2-26 09:34:54 | 显示全部楼层
yuzeyuan1 发表于 2020-2-26 09:26
如果不问答,传感器会定时10ms唤醒一次?
你确定是10ms么?这么高频的唤醒+停机,你是怎么做到的?唤醒后 ...

RTC的闹钟应该是在进入STOP之前写入的.分2种情况。没有数据的时候定时唤醒。有数据的时候,等串口数据回复完了再休眠 。STOP 模式只停时钟不掉电,醒了之后寄存器不用重新初始化吧。目前进度是2400的波特率可以正确识别任意字符
回复

使用道具 举报

4

主题

10

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2020-2-3
在线时间
12 小时
 楼主| 发表于 2020-2-26 09:41:14 | 显示全部楼层
正点原子 发表于 2020-2-25 23:41
唤醒是需要时间的,唤醒还要配置USART,所以唤醒的哪个数据不一定会收得到。建议从协议上解决吧,比如多发 ...

多发字节比较好解决,就是觉得如果俄罗斯的那个传感器如果实现了,应该是有办法。现在唤醒之后凡是涉及寄存器赋值的都没干,只是把PLL重新使能,RX恢复为floating输入,尽可能的缩短唤醒后的时间。2400波特率以下可以正常收发 4800以上就不行了 第一个字节就不正常了。我再试试吧 有结果再分享  谢谢
回复

使用道具 举报

4

主题

10

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2020-2-3
在线时间
12 小时
 楼主| 发表于 2020-2-26 13:30:15 | 显示全部楼层
本帖最后由 zzqnysafe 于 2020-3-4 15:20 编辑

自己挖的坑自己填一下。之前一直在尝试修改启动的时间,但是翻阅资料后发现应该是用起始位将单片机唤醒之后,导致发生了起始位帧测发生了错误,无法获取到正确的采样序列,该序列为:1 1 1 0 X 0 X 0 X 0 0 0 0。唤醒后只能获取到低电平,获取不到本来在空闲时应该获取到的高电平
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2778
金钱
2778
注册时间
2015-6-1
在线时间
394 小时
发表于 2020-2-26 13:48:12 | 显示全部楼层
zzqnysafe 发表于 2020-2-26 13:30
自己挖的坑自己填一下。之前一直在尝试修改启动的时间,但是翻阅资料后发现应该是用起始位将单片机唤醒之后 ...

楼主,先别跑,再聊聊,你的停机模式在唤醒后不用初始化时钟?,我最近在做一个代码用停机模式,每次唤醒后初始化时钟,再连着配置传感器部分,得工作400ms,严重影响功耗,你的代码不初始化时钟也能用?

芯片工作模式:

工作模式:外设正常运行,内核CPU及SRAM供电,未使用外设的时钟默认关闭。

睡眠模式:只有CPU停止工作,各个外设正常工作,依靠任何中断/事件唤醒。

停机模式:1.8V供电区域时钟被停止,内部HSI,PLL,外部时钟HSE均关闭,同时电压检测器也可进入低功耗模式,但SRAM和寄存器不断电,此时只能依靠外部中断(EXTI)和RTC时钟才能唤醒。

待机模式:1.8V供电区域被时钟停止,内部HSI,PLL,外部时钟HSE均关闭,同时电压检测器也可进入低功耗模式,SRAM和不属于待机电路的寄存器也被断电关闭,此时即使是外部中断(EXTI)也不能将其唤醒,只能通过复位(外部复位,看门狗复位)、唤醒引脚、RTC时钟来唤醒。

注意:无论是在停止模式 还是待机模式下,RTC和IWDG及其时钟源不会被关闭。
————————————————
版权声明:本文为CSDN博主「beep_」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/beep_/article/details/47975227
自在随心
回复

使用道具 举报

4

主题

10

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2020-2-3
在线时间
12 小时
 楼主| 发表于 2020-2-26 16:12:17 | 显示全部楼层
yuzeyuan1 发表于 2020-2-26 13:48
楼主,先别跑,再聊聊,你的停机模式在唤醒后不用初始化时钟?,我最近在做一个代码用停机模式,每次唤醒 ...

我还没完整的写完方案 ,只是一个功能一个功能的在测,唤醒后要重新使能一下PLL倍频的
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-25 22:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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