打印

请教USART加奇偶校验位的一帧数据位数问题

[复制链接]
7540|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hackthree|  楼主 | 2011-8-24 09:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在调SRM32的串口通讯,有点不明白的地方
看书上说串口通讯的一帧一般是1个起始位,8个数据位,一个或两个停止位
这样的话,那么一帧数据是不是应该是1+8+1(或2)=10(或11位)
但是如果加上奇偶校验位的话,这个奇偶校验位是插在数据位和停止位的中间,
还是数据位的最高位?
我配置了USART的USART_WordLength的长度是8位。。
在发送0x80时,用偶校验,串口收到的数据是00(HEX显示)
而如果把USART_WordLength的长度是9位。。
则串口接收的数据就是80。。。
这个好像是把奇偶校验位加在了数据位的最高位。。
这里就想问了,这个USART_WordLength的长度是指的什么长度?
如果要用奇偶校验的话,是不是一定要配置成9位?
还有就是一个停止位和两个停止位有啥区别?
我发现在配置成两个停止位后,串口精灵配置成一个停止位,收到的数据是正常的。
相反,如果程序配置成一个停止位,串口精灵配置成两个停止位,接收的数据也是正常的。。
这个到底有啥区别?
沙发
香水城| | 2011-8-24 09:29 | 只看该作者
在STM32中WordLength需要包含数据位数和奇偶校验的位数

如果需要8位数据,无奇偶校验,则WordLength=8
如果需要8位数据,有奇偶校验,则WordLength=9

使用特权

评论回复
板凳
hackthree|  楼主 | 2011-8-24 10:03 | 只看该作者
2# 香水城

哦,原来这样,谢谢香主
还有个问题,就是在程序初始化之后
如果在程序的执行工程中需要更改USART的波特率,USART_WordLength这些参数时。。
是不是直接给对应的值赋值就行?
比如之前初始化的时候是USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
而我程序运行时要修改比特率为115200,USART_WordLength为9,停止位为2。。
是不是直接
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength=USART_WordLength_9b;
USART_InitStructure.USART_StopBits = USART_StopBits_2;
就行?
需不需要关闭USART的时钟再重新开启?

使用特权

评论回复
地板
香水城| | 2011-8-24 10:39 | 只看该作者
变量赋值之后要再次调用初始化函数,再次调用初始化函数最好关闭USART的时钟再重新开启。

使用特权

评论回复
5
hackthree|  楼主 | 2011-8-24 13:53 | 只看该作者
4# 香水城

谢香主。。

使用特权

评论回复
6
wuxj00| | 2012-4-20 20:06 | 只看该作者
谢楼主分享

使用特权

评论回复
7
wuxj00| | 2012-5-7 21:45 | 只看该作者
顶起

使用特权

评论回复
8
huo_shan| | 2012-9-15 19:48 | 只看该作者
霸气

使用特权

评论回复
9
lai832| | 2012-9-16 00:51 | 只看该作者
非官方:SMTxx103xx 可以单改BAUD直接工作,
主意先检查收发完据后,再改配置,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

220

帖子

1

粉丝