现在的位置: 首页 > 综合 > 正文

stm32串口通讯

2013年03月17日 ⁄ 综合 ⁄ 共 972字 ⁄ 字号 评论关闭

这两天在看stm32的串口通讯,其实很简单,但是头疼了很久。因为一个问题没有搞清楚,stm32的奇偶校验位问题。

先看看奇偶检验的意思:

串口通信中数据的奇偶校验位算法
奇偶校验位是一个表示给定位数的二进制数中 1 的个数是奇数还是偶数的二进制数。奇偶校验位是最简单的错误检测码。奇偶校验位有两种类型:偶校验位与奇校验位。如果一组给定数据位中 1 的个数是奇数,那么偶校验位就置为 1,从而使得总的 1 的个数是偶数。如果给定一组数据位中 1 的个数是偶数,那么奇校验位就置为 1,使得总的 1
的个数是奇数。偶校验实际上是循环冗余校验的一个特例,通过多项式 x + 1 得到 1 位 CRC

对数据传输正确性的一种校验方法。在数据传输前附加一位奇校验位,用来表示传输的数据中"1"的个数是奇数还是偶数,为奇数时,校验位置为"0",否则置为"1",用以保持数据的奇偶性不变。例如,需要传输"11001110",数据中含5个"1",所以其奇校验位为"0",同时把"110011100"传输给接收方,接收方收到数据后再一次计算奇偶性,"110011100"中仍然含有5个"1",所以接收方计算出的奇校验位还是"0",与发送方一致,表示在此次传输过程中未发生错误。
大家一定会问,如何计算奇偶性呢,在计算机内有一种特殊的运算它遵守下面的规则:
1+1=0; 1+0=1; 0+1=1; 0+0=0;我们把传送过来的1100111000逐位相加就会得到一个1,应该注意的的,如果在传送中1100111000变成为0000111000,通过上面的运算也将得到1,接收方就会认为传送的数据是正确的,这个判断正确与否的过程称为校验。而使用上面方法进行的校验称为奇校验,奇校验只能判断传送数据中奇数个数据从0变为1或从1变为0的情况,对于传送中偶数个数据发生错误,它就无能为力了。



stm32中串口的位数是包含了奇偶校验位的。如果9位,则是8位数据位,一位校验位。电脑端可以设置8位数据位,一位相应的校验位。但是如果设置stm32为8位数据,这样其实只传了7位数据位,电脑端要设置为7位数据位。否则,传过来的数据是乱码。

2013.5.29

今天写一个串口程序,一直不停地进入中断,发现是因为启动了USART_IT_TXE中断,只要寄存器为空,就会触发,进入中断。中断发送接收的时候只要使用USART_IT_TC就可以了。

抱歉!评论已关闭.