引用: 60user128 发表于 2018-9-10 09:56
不是要配置是否奇偶校验,是奇偶校验那个位能否手工设置,比如我设置了偶校验,然后发个数据0,本来奇偶位应该是0的,但是我能否改成1?这两天看了很多遍手册,感觉这个是没可能了。我想了个方案,开启校验功能,并设计一个数,令校验位刚好是0,发送一个数后,就关掉校验,这样“第9位”就是停止位,符合客户的协议。不过 ...
用我的方案可以应对客户的协议,只是原来忽略了一个问题,如下代码
SciaRegs.SCICCR.bit.PARITYENA = 1; //启用奇偶校验
SciaRegs.SCITXBUF = 0; //发送数据
while(SciaRegs.SCIFFTX.bit.TXFFST); //等待FIFO为空,因为是帧头,所以仅在FIFO放入一个数
SciaRegs.SCICCR.bit.PARITYENA = 0; //关闭奇偶校验
如果按照这个代码运行,实际发送出去的数据是不带奇偶校验的。因为FIFO为空不代表数据已经发出去,所以发送数据时,实际奇偶校验就已经关闭了
引用: 60user128 发表于 2018-9-10 09:56
不是要配置是否奇偶校验,是奇偶校验那个位能否手工设置,比如我设置了偶校验,然后发个数据0,本来奇偶位应该是0的,但是我能否改成1?这两天看了很多遍手册,感觉这个是没可能了。我想了个方案,开启校验功能,并设计一个数,令校验位刚好是0,发送一个数后,就关掉校验,这样“第9位”就是停止位,符合客户的协议。不过 ...
用我的方案可以应对客户的协议,只是原来忽略了一个问题,如下代码
SciaRegs.SCICCR.bit.PARITYENA = 1; //启用奇偶校验
SciaRegs.SCITXBUF = 0; //发送数据
while(SciaRegs.SCIFFTX.bit.TXFFST); //等待FIFO为空,因为是帧头,所以仅在FIFO放入一个数
SciaRegs.SCICCR.bit.PARITYENA = 0; //关闭奇偶校验
如果按照这个代码运行,实际发送出去的数据是不带奇偶校验的。因为FIFO为空不代表数据已经发出去,所以发送数据时,实际奇偶校验就已经关闭了
1
举报