在串口通信当中
一个字符帧发送需要四部分组成:
1位起始位+8位数据位+1位校验位+1位停止位
需区分我们所需要传输的数据和一个字符帧中数据位的关系。
所需要传输的数据位:通常是由一个个char buffer组成,即每个buffer为8位。
当我们要传输和数据的时候,即将buffer放在数据位当中,然后加上1位起始位+1位校验位+1位停止位,组成一个字符帧,进行传输。
如以下代码中,要传输的sendBuff是一个大小为16的char类型的数组,即由16个buffer组成。将每一个buffer轮流放在数据位当中,然后加上1位起始位+1位校验位+1位停止位,组成一个字符帧,进行传输。共需要传输16的字符帧。
int uMtData::set(uint8_t id) {
uint8_t i = 0;
uint8_t sum = 0x00;
uint8_t sendBuff[16] = {
0xAA, 0x55, 0x55, 0x55, // 帧头:0XAA | CM:目标控制模式 | uIE:电机方向x电机减速比 | pZero
0x55, 0x55, 0x55, 0x55, // | |
0x55, 0x55, 0x55, 0x55, // | | Tao:热保护时间 | wDog:通信超时看门狗时间
0x55, 0x55, 0x55, 0x2F, // 帧尾:0X2F
}; // 提前定义好数据帧,后面根据目标控制模式,往数据帧中写入数据(如pack)进行打包,注意:真正的数据为sendBuff[1]-sendBuff[13]
// org mc0 data
pack(id, &sendBuff[1]);//去掉帧头,从1开始
// calculation check sum
for (i = 1; i < 14; i++)
sum += sendBuff[i]; // 将前面1-13位数据累加
sendBuff[14] = sum; // 校验和:将sendBuff[1]-sendBuff[13]中的数据进行累加。
int ret = writeBytes(sendBuff, 16);//发送定长度16bytes数据
return ret;
}