[STM32] : H750 UART 7数据位 + 校验接收数据异常

[STM32] : H750 UART 7数据位 + 校验接收数据异常问题记录

如何配置
首先是设置寄存器,按正常设置走就可以,唯一需要注意的地方是串口CR1寄存器的字长设置:
根据帧格式表可以看到,9位数据和8位数据+1位校验所设的M位值相同在这里插入图片描述

所以在CR1寄存器中字长位寄存器的描述,这里所写的数据位其实是指我们平时所说的数据位+校验位

即:
N / 7 / 1:7个数据位,M = 10
ODD / 7 / 1:8个数据位,M = 00
N / 8 / 1: 8个数据位,M = 00

现在的代码是串口ODD / 7 / 1, 接收数据,然后发往网络端。
字长寄存器、校验相关的寄存器都设置完成后,串口发送0x31 0x32 0x33,网络端实际收到的是 0x31 0x32 0xB3:在这里插入图片描述
这就很奇怪了,按道理来说,7数据位下不应该存在大于0x7F的数据。
一开始怀疑是串口工具的问题,拿逻辑分析仪抓了下串口的TTL端,数据是正确的。
在这里插入图片描述
但也非常容易发现,发生错误的数据0x33,因为奇校验的关系,校验位为1,而10110011刚好为0xB3,所以猜测是单片机将校验位的bit当成了8位数据位里的最高位处理了。

改成偶校验验证猜想:
在这里插入图片描述

在这里插入图片描述

直接在逻辑分析仪上改为N/8/1解析,完全正确:逻辑分析仪上直接改为N/8/1

因此基本可以验证猜想:单片机在7数据位+校验位的设置下,将校验位当做8位数据位里的最高位给处理了,校验位为1时就会导致数据错误。

如果直接将字长寄存器改为7,同时又设置校验的话,数据会乱,这里就不截图了。

最后处理方式也很简单,串口收到的每个字节的数据&=0x7F即可。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

___NULL___

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值