OpenEdv-开源电子网

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

STM32 低功耗 DMA串口问题 求助

[复制链接]

5

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
307
金钱
307
注册时间
2014-4-2
在线时间
85 小时
发表于 2021-6-10 15:19:14 | 显示全部楼层 |阅读模式
5金钱
场景: 使用STM32 DMA串口发送,发送完成后进入STOP低功耗模式,但是发现还没有发送完成就已经进入了低功耗STOP(少了2个字节),进入STOP前会检查DMA的TCIF完成标记。但是发现没用用,还是少了2个字节。

求助哇!
无标题.png

最佳答案

查看完整内容[请看2#楼]

DMA只是把数据丢给了USART_DR,然后DR把数据丢到移位寄存器,按波特率一位一位的往外移数据移完了才是发送结束。 我觉得DMA完成后还需增加等待TC标志位,我没做过这种应用,要不最后再多发两个字节呗。 还可这样调试一下,DMA传输完成后让某IO取反,示波用两个通道看这IO与TXD的波形,看是否存在时间差。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

3389

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8643
金钱
8643
注册时间
2020-5-11
在线时间
4096 小时
发表于 2021-6-10 15:19:15 | 显示全部楼层
本帖最后由 LcwSwust 于 2021-6-10 18:46 编辑

DMA只是把数据丢给了USART_DR,然后DR把数据丢到移位寄存器,按波特率一位一位的往外移数据移完了才是发送结束。
我觉得DMA完成后还需增加等待TC标志位,我没做过这种应用,要不最后再多发两个字节呗。

还可这样调试一下,DMA传输完成后让某IO取反,示波用两个通道看这IO与TXD的波形,看是否存在时间差。

傲游截图20210610183426.jpg 傲游截图20210610183608.jpg

专治疑难杂症
回复

使用道具 举报

5

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
307
金钱
307
注册时间
2014-4-2
在线时间
85 小时
 楼主| 发表于 2021-6-10 15:21:59 | 显示全部楼层
发现F1 F0 L0都有这个问题 感觉STM32可能都会有。应该是自己的问题 但是想不明白!既然DMA的TCIF已经完成了 ,证明已经发送完成了 但是实际上就是少了2个字节,通过上位机sscom 观察的,示波器也观察了!
回复

使用道具 举报

5

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
307
金钱
307
注册时间
2014-4-2
在线时间
85 小时
 楼主| 发表于 2021-6-10 15:24:01 | 显示全部楼层
其实目的很简单,就是想在进入低功耗前,串口的数据全部打印完全。
回复

使用道具 举报

11

主题

2147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4891
金钱
4891
注册时间
2015-1-10
在线时间
612 小时
发表于 2021-6-10 15:45:37 | 显示全部楼层
你加个传输完成中断,每次传的时候开DMA,在中断里把DMA通道关了,进低功耗之前检测以下DMA开还是关,我们这边是这么做的,没发现啥问题
回复

使用道具 举报

5

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
307
金钱
307
注册时间
2014-4-2
在线时间
85 小时
 楼主| 发表于 2021-6-10 15:57:33 | 显示全部楼层
好的 明白 我测试一下, 但是 我使用的是轮训的方式检查传输完成的。难道不行?我先测试中断看是否可以吧!
回复

使用道具 举报

0

主题

114

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2583
金钱
2583
注册时间
2019-10-18
在线时间
414 小时
发表于 2021-6-12 07:54:38 | 显示全部楼层
楼上说的对.
dma只是把你要发送的数据传给了串口,但是数据还没正式发送.
dma传完的时候,发送寄存器还有一个数据.缓冲区刚传过去的待发送的一个数据,刚好2个字节
所以你要停机,需要一直等到串口的发送完成中断才可以.
回复

使用道具 举报

5

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
307
金钱
307
注册时间
2014-4-2
在线时间
85 小时
 楼主| 发表于 2021-6-18 14:12:51 | 显示全部楼层
最后忘记总结了 前几天测试完了 正如2位所说 在进入STOP前 不能只是检查 DMA完成与否 还应该检查串口的TC是否已经完成! 多谢解惑!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-22 18:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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