硬汉嵌入式论坛

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

[技术讨论] 关于串口校验位与数据位

[复制链接]

13

主题

43

回帖

82

积分

初级会员

积分
82
发表于 2025-8-22 10:03:54 | 显示全部楼层 |阅读模式
大多数时候使用串口,都是配置为波特率+8N1,想起之前在使用正泰电表的时候,规定总线是偶校验,还是波特率+8E1,此时配置串口初始化部分校验方式为USART_Parity_Even,然后死活不能通信,后来问了下AI,需要吧数据位设置为USART_WordLength_9b,也就是波特率+9E1才行,尝试之后发现,通信确实正常了。
-----------------------------------------------------------------------
那么按照我自己的逻辑来说,校验位不应该和数据位混在一起,我的数据还是8bit的,为什么要设置为9bit呢,然后我在上位机上测试调试串口,发现MCU侧是115200+9E1,上位机设置为115200+8E1,才能正常通信,为什么双方数据位不一样,但可以正常通信,到底谁是正确的。
-----------------------------------------------------------------------
然后我查阅了STM32F1中文手册,以及问了AI,AI给出结果大概意思是,MCU的数据位代表的是用户数据位+可能的校验位,以下是DS的回答

2.jpg
-----------------------------------------------------------------------
然后我在中文手册中找到这张表,从USART帧来看,的确验证了AI说的用户数据位+可能的校验位来组成串口的数据位
1.jpg
-----------------------------------------------------------------------
于是我将串口配置为115200+8E1,上位机配置为115200+7E1,发送ASCII可显示字符,上位机是可以正常显示的,验证猜想:MCU侧其实是7位数据(ASCII可显示字符只需要7位就行)+1位校验,上位机其实没错,只是通过一种合乎逻辑的方式显示给人看,的确是7位数据,校验位是单独的
-----------------------------------------------------------------------
总结来看,MCU侧串口配置的数据位是用户数据位+可能的校验位,而上位机才是合乎人正常逻辑的配置方式。
最后,看到此贴的朋友,是否有更好的见解
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
118335
QQ
发表于 2025-8-22 11:09:32 | 显示全部楼层
是的,这个地方初次整很容易搞错
回复

使用道具 举报

13

主题

43

回帖

82

积分

初级会员

积分
82
 楼主| 发表于 2025-8-22 11:15:33 | 显示全部楼层
eric2013 发表于 2025-8-22 11:09
是的,这个地方初次整很容易搞错

所以大家的逻辑都是数据位和校验位是没关系的,但在我用过的STM32F1,STM32F4,GD32F1里边都是这样有关系的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-26 18:40 , Processed in 0.041636 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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