void sendVisionData(uint8_t Modle,uint8_t robotcolor,uint16_t Direction)
{
memset(Tx_Buffer,0,VISON_SEND_LENGTH); //数据清零
VisonHeader.SOF=VIOSN_SOF;//A5
VisonHeader.robotColor=robotcolor;//02
VisonHeader.model=Modle;//02
//写入帧头数据
memcpy(Tx_Buffer,&VisonHeader,VISON_LEN_HAEDER);
//写入CRC8校验码
Append_CRC8_Check_Sum(Tx_Buffer, VISON_LEN_HAEDER);//用APPEND函数校验为加到数值中不要用Get_CRC8函数
VisonSendData.direction = Direction ;//0或1 uint8_t是00或01,若16位则01 00或00 00
//写入数据
memcpy(Tx_Buffer + VISON_LEN_HAEDER,&VisonSendData,VISON_SEND_LENGTH);
//写入CRC16校验码
Append_CRC16_Check_Sum(Tx_Buffer,VISON_SEND_LENGTH);
HAL_UART_Transmit_DMA(&huart3,Tx_Buffer,VISON_SEND_LENGTH);
}
typedef struct//只用作发送
{
//帧头
uint8_t SOF;//首地址
uint8_t robotColor; //装甲板颜色识别 0x01 红装甲板 0x02 蓝色装甲板
uint8_t model;//模式切换 0x01 自瞄, 0x02小符 0x03大符
uint8_t crc8;//CRC8校验位
}traVisonHeader_t;
typedef struct
{
//自瞄数据
uint16_t direction;
//数据尾
uint16_t crc16;//CRC16校验位
}traVisonSendData_t;
发送数据会把帧头4个uint8_t+2个uint16_t数据包里的数据,长度总共4+2*2=8个字节
遇到的问题,把Deriction定义成uint16_t类型,然后放入帧头的结构体那里,发送的数据有问题(和校验位有关,我猜的)
解决方法:目前的帧头里的4个数据都是uint8_t类型的,数据包里是uint16_t类型的,发现要把类型分类好,目前帧头是uint8_t,那么就不能再将uint16的数据加到帧头的结构体成员,要分开。