can板间通信代码学习
一、板间通信
板间通信是底盘与上下云台之间的通信
A型板和两个C型板
主要可以分成两个方面,一是哨兵的模式选择和遥控器数据的解码;二是对于CAN发送和接收数据的处理。
二、CAN的板间通信相关函数
can_util.c封装了有关can协议的一些底层函数
1.Can_InitFilterAndStart(Can2.hcan); //初始化can过滤器并启用can总线收发
2.CAN_WriteTxdata(&Can2,&CAN_Buffchassis_judge); //写入环形队列并发送
三、数据发送的相关函数
1.初始化 DataConnect_Init
2. 更新板间通信数据包 DataConnect_Update
3. 发送板间通信数据 SendChassisData(Chassis_Data_t *chassisdata)
4.任务函数
void Chassis_SendTask()
{
for(;;)
{
DataConnect_Update();
SendChassisData(&ChassisData);
osDelay(1);
}
}
5.解码函数
GimbalUpper_Decode(uint8_t rxdata[])
GimbalLower_Decode(uint8_t rxdata[])
6.解码回调函数
void Connect_EncoderDecodeCallback(CAN_HandleTypeDef* phcan, uint16_t stdid, uint8_t rxdata[])
{
switch (stdid)
{
case GIMBAL_UPPER:
GimbalUpper_Decode(rxdata);
break;
case GIMBAL_LOWER:
GimbalLower_Decode(rxdata);
break;
default:
break;
}
}
2022-04-29 21:55:19
四、数据接收的相关函数
void DataConnect_Init(void) //初始化
void SendGimbalData(Gimbal_Data_t *gimbaldata)
void SendLowerPCData() //发送上云台小电脑数据给下云台
void ChassisJudge_Decode(uint8_t rxdata[]) //底盘数据解码(除遥控器)
void Remote_Decode(uint8_t rxdata[]) //遥控器数据解码
void miniPC1_Decode(uint8_t rxdata[]) //云台电脑数据解码1
void miniPC2_Decode(uint8_t rxdata[])//云台电脑数据解码2
void Connect_EncoderDecodeCallback(CAN_HandleTypeDef* phcan, uint16_t stdid, uint8_t rxdata[])
{
switch (stdid)
{
case CHASSIS_JUDGE:
ChassisJudge_Decode(rxdata) ;
break;
case REMOTE:
Remote_Decode(rxdata) ;
break;
case MINIPC_LOWER1:
miniPC1_Decode(rxdata) ;
break;
case MINIPC_LOWER2:
miniPC2_Decode(rxdata) ;
break;
default:
break;
}
}
2022-04-30 10:07:37