mbed 串口通信------带校验位的通信,奇偶校验(stm32F103RBT6)

来源:互联网 发布:最近网络流行词汇 编辑:程序博客网 时间:2024/05/17 09:45

第一次写技术积累博客,有不对的地方大家多多指出,多多交流。

关于mbed就不多讲了,这人比较推崇这个平台,毕竟是ARM公司主推。虽然像意法这样的公司,并不喜欢mbed(国内其实很多人用st,mbed的出现很可能挖走原来用stm32的人)。mbed在国内不温不火,能查到的大家写出来的技术积累真的很有限。在调串口问题的时候遇到了很多疑惑。没有前人去踩雷,我只能光着脚去踩了,为后人乘凉吧。下面直入正题吧。

串口通信,基础问题不多说了,不懂得百度吧。在一个小项目中,需要用到奇偶校验。看了一下mbed提供Serial类,该类的提供的功能还没很丰富的。


官方网站上有sdk的讲解

下面说说常用的几个public 方法

 
Serial(PinName tx, PinName rx, const char *name=NULL)                            

Create a Serial port, connected to the specified transmit and receive pins.
void baud(int baudrate)
Set the baud rate of the serial port.
void format(int bits=8, Parity parity=SerialBase::None, int stop_bits=1)
Set the transmission format used by the serial port.

  (我用的是自己做的开发板 基于stm32F103RBT6  使用了两个uart ,一个spi 一个iic  )                                

Serial构造函数需要在初始化的时候给串口指定一个pin脚,这个例如Serial pc(PA_9,PA_10);这个大家根据自己的开发板实际情况写,我用到的是PA9,和PA10

pc.baud(19200) 这个比较好好理解,baud的参数类型 int型,设置波特率

pc.format(8,SerialBase::Odd,1)  设置数据位,校验位,停止位。我原本的意思是想做一个带偶校验的串口通信 一位起始位,数据位8,一位校验位,一位停止位,11位。



上位机串口助手软件如上图所示设置,感觉很容易,对不对。然后串口助手收到的是一堆乱码,什么情况????

哪里错了????我一度怀疑人生。网上也有讲解mbed 串口,麻蛋都是抄官网简单翻译一下,没人调程序吗?????

多试了几次,结果我手贱,有一次点错了,如下图:


有没有注意到,数据位7bits。咦?明明是8bits,怎么7bits对了?不乱码了?我恍然大悟,第一个参数指的是bits 位数是包含校验位的。而我们的pc软件设置的时候通常说的数据位就是有效的信息为,不含校验位。坑爹~~~~。

修改一下代码    pc.format(9,SerialBase::Odd,1)    串口助手设置: 数据位8 、停止位1、 校验位 odd、流控None。 


联系方式qq:307640242


1 0
原创粉丝点击