This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

F28035 SCI通讯的奇偶校验位能否用代码指定

Expert 1795 points

看寄存器,似乎没有可以修改这个位的操作,现在要做个项目,和客户的MCU通讯,他们的协议中,用奇偶位为0来表示帧头,1表示数据。我觉得可以用地址位来代替奇偶位,但是28035的地址位操作看起来好麻烦,现在还没彻底理解整个操作过程。

  • 你在看一下数据手册   应该是可以在寄存器中配置的

    找了手册  里面是有奇偶校验和无校验的配置bit的

  • 你在看一下数据手册   应该是可以在寄存器中配置的

    找了手册  里面是有奇偶校验和无校验的配置bit的

  • 不是要配置是否奇偶校验,是奇偶校验那个位能否手工设置,比如我设置了偶校验,然后发个数据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为空不代表数据已经发出去,所以发送数据时,实际奇偶校验就已经关闭了

  • 先学习了,稍后测下,感谢分享!

  • 这些客户乱七八糟的协议真的非常扯淡,非要跟标准的对着来。

    C2000作为实时控制的MCU,接收每一个byte都要中断一下来算奇偶校验,是不是闲的蛋疼?

  • 他们是利用奇偶校验位来做帧头判断,实际并没有做奇偶校验。从他们发出的信号看,这个协议的帧头其实就是break信号,但是break信号在单片机中不容易实现,电脑的串口通讯,就很容易实现break信号,一个函数搞定。