你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

串口收发7位偶校验该怎么设置,求大侠

[复制链接]
钊钊 提问时间:2016-2-19 02:50 /
USART_InitStructure.USART_BaudRate            = 9600;
        USART_InitStructure.USART_WordLength          = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits            = USART_StopBits_1;
        USART_InitStructure.USART_Parity              = USART_Parity_Even;//USART_Parity_No ;        //²ÉÓÃУÑ鷽ʽ         ÎÞ
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode                = USART_Mode_Rx | USART_Mode_Tx;
        
        USART_Init(USART1, &USART_InitStructure);


按理说这样设置就是正确的,但是通过计算机发送过去的数据单片机串口接收显示为错误,单片机发送过来的 数据 用 9600 7 E 1的串口调试工具可以解码出来,这是怎么回事,是不是我的设置还漏掉了什么


楼下我已经发出结论,以及出现该情况的解释
收藏 评论6 发布时间:2016-2-19 02:50

举报

6个回答
钊钊 回答时间:2016-2-21 21:15:59
今天我自己来结贴吧,网上的这方面的比较少, 比如我这里要写入的是  7 E 1的通讯参数,那么我楼上的设置是完全正确的,那会有人问了,为什么数据位是 8B呢,因为在STM32里面,数据位当没有奇偶校验的时候,的确是8位全都写入数据位里面,当存在奇偶校验的时候,奇偶校验位是补充在数据位中的,所以我们得出结论了,如果要使得通讯参数为 8 E 1的时候,写入的数据位参数应该就是9位,
特别注意:计算机使用的一般的串口通讯软件,是无法输出奇偶校验的数据码的,所以通信的话,计算机接收到的数据解码出来是对的,然而单片机接收到的数据却是错误的,这种情况需要大家注意。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

废鱼 回答时间:2016-2-19 09:48:20
楼主设置的是8位的,要配置一致才可以。
钊钊 回答时间:2016-2-19 10:27:03
安 发表于 2016-2-19 09:48
楼主设置的是8位的,要配置一致才可以。

STM32的那个校验位是计算在数据位里面的,所以按照理解得话,E 7 1的模式应该是 8位数据,然后开启偶校验占用一位,然后停止位一位,在网上找了一些说法,是说接收下来的东西 做一个 (&0X7F)位与操作,的确可以正常通讯,但是这样应该是最笨的方法了,大家再看看,怎么解决
废鱼 回答时间:2016-2-20 10:43:10
楼主用的是哪个芯片?
钊钊 回答时间:2016-2-21 21:11:54
安 发表于 2016-2-20 10:43
楼主用的是哪个芯片?

rtc6不过我是来结贴的,结论写楼下了
a阿伟 回答时间:2017-9-22 16:18:00
我也关注

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版