OpenEdv-开源电子网

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

STM32串口DMA接收发送数据奇偶校验判断

[复制链接]

26

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-8-1
在线时间
57 小时
发表于 2021-6-25 09:35:51 | 显示全部楼层 |阅读模式
1金钱
有没有人用HAL库写过串口DMA接收,并进行奇偶校验?我现在遇到设置成奇校验,然后串口助手用偶校验也能通讯的情况;PE标志一直也没有,不知道为什么?

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

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11536
金钱
11536
注册时间
2014-4-1
在线时间
1313 小时
发表于 2021-6-25 09:48:28 | 显示全部楼层

用串口,很少有人开奇偶校验。

DMA只是负责转移数据,校验应当是串口部分完成的。
所以,你先撇开DMA,单独测试串口吧。


回复

使用道具 举报

6

主题

156

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
464
金钱
464
注册时间
2021-4-28
在线时间
158 小时
发表于 2021-6-25 09:48:30 | 显示全部楼层
帮顶,只单纯用过HAL 串口 DMA接收
回复

使用道具 举报

26

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-8-1
在线时间
57 小时
 楼主| 发表于 2021-6-25 09:53:18 | 显示全部楼层
xuande 发表于 2021-6-25 09:48
用串口,很少有人开奇偶校验。

DMA只是负责转移数据,校验应当是串口部分完成的。

不用DMA接收是没问题的,奇偶校验PE位是可以检测到的
回复

使用道具 举报

26

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-8-1
在线时间
57 小时
 楼主| 发表于 2021-6-25 09:53:50 | 显示全部楼层
嘉神川诺埃尔 发表于 2021-6-25 09:48
帮顶,只单纯用过HAL 串口 DMA接收

对的,很少有人用校验,或者这么测试
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3369
金钱
3369
注册时间
2011-11-10
在线时间
207 小时
发表于 2021-6-25 10:29:43 | 显示全部楼层
当STM32的串口配置成带有奇偶校验位的情况下,需要自己软件校验是否发生奇偶校验错误,硬件只是置起奇偶校验错误标志位,并将错误的数据放到DR寄存器中,同时置起RXEN标志位。如果使能中断还是会正常进入中断,用户如果不在读取DR寄存器之前手动检验(读DR寄存器会清除错误状态标志)奇偶校验位是否置起,将会接受奇偶校验错误的数据。
你开启DMA,那就是自动搬走数据了。
  如果想开启奇偶校验,应在读取数据寄存器时先查看标志位,如果发生校验错误标志则丢弃数据。或者进行其他应用逻辑代码处理。。正常不会开启这个校验位,一帧数据完毕直接用CRC校验就可以了。
回复

使用道具 举报

26

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-8-1
在线时间
57 小时
 楼主| 发表于 2021-6-25 10:34:04 | 显示全部楼层
c2007s 发表于 2021-6-25 10:29
当STM32的串口配置成带有奇偶校验位的情况下,需要自己软件校验是否发生奇偶校验错误,硬件只是置起奇偶校 ...

是在IDLE中断里面先判断PE标志的,只是PE一直是0,所以检测奇偶校验错误;
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3369
金钱
3369
注册时间
2011-11-10
在线时间
207 小时
发表于 2021-6-25 12:31:43 | 显示全部楼层
IDLE中断你要理解它是什么时候发生的。你在串口IDLE中断里检测肯定不行的啊。
因为此时数据已经全部收下了来,而且已经读取并搬到你的内存里了。这个IDLE中断是通知你程序来处理这一批数据的。
回复

使用道具 举报

26

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-8-1
在线时间
57 小时
 楼主| 发表于 2021-6-25 16:45:07 | 显示全部楼层
c2007s 发表于 2021-6-25 12:31
IDLE中断你要理解它是什么时候发生的。你在串口IDLE中断里检测肯定不行的啊。
因为此时数据已经全部收下了 ...

那要用DMA什么时候检测PE标志位呢?
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3369
金钱
3369
注册时间
2011-11-10
在线时间
207 小时
发表于 2021-6-25 17:12:07 | 显示全部楼层
鱼与熊掌不可兼得。既然用了DMA,那就是发挥它的特性长处搬运数据。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-23 05:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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