高级会员

- 积分
- 684
- 金钱
- 684
- 注册时间
- 2014-8-14
- 在线时间
- 214 小时
|
大多数时候使用串口,都是配置为波特率+8N1,想起之前在使用正泰电表的时候,规定总线是偶校验,还是波特率+8E1,此时配置串口初始化部分校验方式为USART_Parity_Even,然后死活不能通信,后来问了下AI,需要吧数据位设置为USART_WordLength_9b,也就是波特率+9E1才行,尝试之后发现,通信确实正常了。
-----------------------------------------------------------------------
那么按照我自己的逻辑来说,校验位不应该和数据位混在一起,我的数据还是8bit的,为什么要设置为9bit呢,然后我在上位机上测试调试串口,发现MCU侧是115200+9E1,上位机设置为115200+8E1,才能正常通信,为什么双方数据位不一样,但可以正常通信,到底谁是正确的。
-----------------------------------------------------------------------
然后我查阅了STM32F1中文手册,以及问了AI,AI给出结果大概意思是,MCU的数据位代表的是用户数据位+可能的校验位,以下是DS的回答
-----------------------------------------------------------------------
然后我在中文手册中找到这张表,从USART帧来看,的确验证了AI说的用户数据位+可能的校验位来组成串口的数据位
-----------------------------------------------------------------------
于是我将串口配置为115200+8E1,上位机配置为115200+7E1,发送ASCII可显示字符,上位机是可以正常显示的,验证猜想:MCU侧其实是7位数据(ASCII可显示字符只需要7位就行)+1位校验,上位机其实没错,只是通过一种合乎逻辑的方式显示给人看,的确是7位数据,校验位是单独的
-----------------------------------------------------------------------
总结来看,MCU侧串口配置的数据位是用户数据位+可能的校验位,而上位机才是合乎人正常逻辑的配置方式。
最后,看到此贴的朋友,是否有更好的见解
|
|