• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

STM32怎么用软件代码实现一个奇偶校验

天涯海QxkJX 2020-03-16 浏览量:1314
STM32怎么用软件代码实现一个奇偶校验
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 奇偶校验是用于通信等处理的,一般很少直接用奇偶校验,而是结合通信协议来进行处理。

    因为奇偶校验位可能是传输数据的一部分:

    1. 对发送,会在正确数据后附一个校验位

    2. 对接收,会在数据获取后,把正常位进行计算并和校验位进行比较

    软件处理上,其实处理比较简单,就是对需要校验部分计数1的个数,看是偶数还是奇数个,就可以算出校验位(根据奇校验、偶校验还有其他协议规定置位要求置为1或者0)


    apleilx的方法提供了具体的一种实现,但这种实现其实较少用,因为如果是1byte传输,则一般前7位是需要校验的,最后1位是校验位来判断接收数据是否正确的。即正常的校验输出会是 校验通过 或 校验不通过 这两种情况。 而它这种只用于 8位数据+1位校验的形式,这种通信本身就相对较少用到。

    • 发布于 2020-03-16
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:2
  • 把收到的所有数据进行奇偶的统计,通过统计结果判断奇偶校验的值是不是一样的
    • 发布于2020-03-16
    • 举报
    • 评论 0
    • 0
    • 0

  • /@@*----------------------------------------------------------------------------
     * 偶校验
     *---------------------------------------------------------------------------*/
    uint8_t EvenU8(uint8_t Data)           //返回8位数据的偶校验结果,0表示偶数个1,1表示奇数个1
    {
        Data ^= Data >> 4;                  //高4位和低4位相同位置若都是1则消去,0不用管
        Data ^= Data >> 2;                  //原理同上,消去1、2和3、4相同位置的1,
        Data ^= Data >> 1;                  //原理同上,至此最低位留下消去所有成对1后的结果即偶校验结果
        //Data &= 0x01;                     //返回校验结果为uint8时需要此句消除无效位
        return (Data & 0x01);
    }
    /@@*----------------------------------------------------------------------------
     * 奇校验
     *---------------------------------------------------------------------------*/
    uint8_t OddU8(uint8_t Data)                  //返回8位数据的奇校验结果,0表示奇数个1,0表示偶数个1
    {
        Data ^= Data >> 4;                  //高4位和低4位相同位置若都是1则消去,0不用管
        Data ^= Data >> 2;                  //原理同上,消去1、2和3、4相同位置的1,
        Data ^= Data >> 1;                  //原理同上,至此最低位留下消去所有成对1后的结果即偶校验结果
        Data ++ ;                           //将偶校验结果(最低位)加1得到奇校验结果
        //Data &= 0x01;                     //返回校验结果为uint8时需要此句消除无效位
        return (Data & 0x01);
    }
    • 发布于2020-03-16
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

STM32怎么用软件代码实现一个奇偶校验