scfor123456 发表于 2019-11-13 19:33:38

USART串口奇偶校验通讯不上

软件中配置为8-N-1,8-N-2通讯格式,可成功通讯,但选择为8-E-1,8-O-1都通讯不了,仿真看USART1-CR1的PCE和PS位都能对上,这是哪里的问题?或者说配置PCE位需要注意什么?

mylovemcu 发表于 2019-11-14 08:13:43

选择奇偶校验需要用9的数据位切记切记

scfor123456 发表于 2019-11-14 09:01:12

mylovemcu 发表于 2019-11-14 08:13
选择奇偶校验需要用9的数据位切记切记

你的意思是USART需要配置为9位数据位,奇偶校验位;如果不需要奇偶校验位,则改为8位数据位,这样理解对吗?

mylovemcu 发表于 2019-11-14 09:07:23

scfor123456 发表于 2019-11-14 09:01
你的意思是USART需要配置为9位数据位,奇偶校验位;如果不需要奇偶校验位,则改为8位数据位,这样理解对 ...

是的

sky_han 发表于 2019-11-14 09:07:36

当奇偶校验通信时,下面寄存器要设置成9 位数据长度,寄存器M值为1.因为通信的时候会发送8 bit data+1 bit 奇偶校验位,所以是9位长度。

mikecai 发表于 2019-11-14 09:13:02

首先,设置接收、发送的方式都相同,如TX,8-E-1,RX 也要 8-E-1
其次,检查是否 线过长【搞短线试下】,或有干扰源【加屏蔽】,以致奇偶校验不行。

scfor123456 发表于 2019-11-14 11:49:54

改了数据位9位,不行。CR1的设置也是对的,M0=1,M1=0,PCE=1。我上位机用的串口调试助手,在其他机器上奇偶校验是可以用的。

toofree 发表于 2019-11-14 13:05:06

用示波器看一下波形吧。
看看你板子发送时的波形,与标准串口发送的波形,在发送相同数据的时候有什么不一样。

scfor123456 发表于 2019-11-14 14:28:21

问题找到了,数据改为9位后,RDR寄存器的数据只能读取低8位,第9位是校验位。ST的USART设计真奇怪,谁关心RDR的校验位是什么,完全可以放到其他地方不要占用接收数据寄存器位。

mylovemcu 发表于 2019-11-14 15:13:12

scfor123456 发表于 2019-11-14 14:28
问题找到了,数据改为9位后,RDR寄存器的数据只能读取低8位,第9位是校验位。ST的USART设计真奇怪,谁关心R ...
改成9位以后,读数据还是正常读就可以了,这块感觉设计的确实不好,我第一次碰上也是折腾了好久

你是用的寄存器???没有用库函数读吗???
页: [1] 2
查看完整版本: USART串口奇偶校验通讯不上