硬汉嵌入式论坛

 找回密码
 立即注册
查看: 359|回复: 2
收起左侧

[技术讨论] 仿照st官方模拟串口的例子,采用定时器比较模式+dma采集串口数据的问题

[复制链接]

95

主题

297

回帖

582

积分

金牌会员

123

积分
582
发表于 2024-1-29 14:30:07 | 显示全部楼层 |阅读模式
本帖最后由 ssssssss 于 2024-1-29 14:48 编辑

仿照st官方模拟串口的例子,采用定时器比较模式+dma采集串口数据,参考例子如下:
基于STM32F4的模拟串口实现,采用TIM+DMA方案,支持任意GPIO设置
https://www.armbbs.cn/forum.php? ... 6595&fromuid=58
(出处: 硬汉嵌入式论坛)


原理:我用了定时器的比较模式在串口波形的半bit处采集数据。串口波形过来,外部中断检测到下降沿(起始位开始),然后定时器开始计时,因为我采集的波特率是19200,所以我定时器的arr寄存器的值是52,我的定时器ccr寄存器的值是25,也就是定时器计数cnt会和ccr寄存器的值比较,如果相等,会触发dma,采集数据。如果串口发送0x89;那么我采集到的电平是:0,1001,0001,1


问题:程序刚开始上电,第一次ccr值和cnt相等时候,并没有触发dma采集到起始位的0电平,而是从bit0开始采集的,采集到的数据为:1001,0001,1,1;后面串口发数据接收到的都正常,就上电第一次第一个字节不正常,不知道是什么原因?







输出比较模式259.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2024-1-29 15:32:36 | 显示全部楼层
这种方式有个缺点,就是没有过采样机制,如果是波形中间有抖动就会出错。

第1次不正常,估计是同步有问题。
回复

使用道具 举报

95

主题

297

回帖

582

积分

金牌会员

123

积分
582
 楼主| 发表于 2024-1-29 15:48:44 | 显示全部楼层
本帖最后由 ssssssss 于 2024-1-29 17:02 编辑
eric2013 发表于 2024-1-29 15:32
这种方式有个缺点,就是没有过采样机制,如果是波形中间有抖动就会出错。

第1次不正常,估计是同步有问 ...

同步有问题的话,。如果从代码这块,从哪个方向排查调整呢?实在是想不明白,哪里影响到第一次触发dma了。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 17:13 , Processed in 0.202295 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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