QT编写的上位机没有第九位

今天做项目的时候,发现下位机程序的数据位是USART_WordLength_9b,一般在上位机如Windows这种PC上是不支持第九位数据位的,所幸没有校验位,上下位机主要用第九位是否为1或0来做一些特殊的标志处理,比如STM8官方手册上就有说,第九位是用来判断前8bit究竟是地址还是数据...
于是随手一查,发现校验位还有1校验和0校验,再点开QT给的校验类型可知:

enum Parity {
        NoParity = 0,
        EvenParity = 2,
        OddParity = 3,
        SpaceParity = 4,//始终为0
        MarkParity = 5,//始终为1
        UnknownParity = -1
    };

enum DataBits {
        Data5 = 5,
        Data6 = 6,
        Data7 = 7,
        Data8 = 8,
        UnknownDataBits = -1//如果用QSerialPort::Databits(9),传进去的参数就是-1了
    };

9位真不是网上其他人说的什么包括校验位,那是算波特率和传输速率才要算上校验位的,下位机有处理单元专门处理第九位的,比如CUBEMX(某款IDE)也有说明,USART_WordLength_9b配置成这样时,单片机程序从缓存读取时,也要用u16去接,而不是u8...
那没办法了,那要用到9位的收发,校验位是一定不能要的,上位机暂时通过需要去配置SpaceParityMarkParity 来让发给下位机的数据保证在9位...
看看效果怎么样
未完待续...

posted @ 2021-03-03 21:23  tangstoney  阅读(194)  评论(0编辑  收藏  举报