Files
Gimbal-Chassis-Communicate/MDK-ARM/can2.c
2025-12-06 22:11:58 +08:00

68 lines
2.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "main.h"
#include "can.h"
#include "gpio.h"
#include "can2.h"
#include "remote.h"
// 遥控器数据CAN发送函数
void send_rc_data_complete(rc_info_t *rc)
{
static CAN_TxHeaderTypeDef rc_tx_message;
static uint8_t rc_can_send_data[8];
static uint8_t initialized = 0;
uint32_t send_mail_box;
// 初始化CAN消息头只初始化一次
if (!initialized) {
rc_tx_message.StdId = 0x301; // 遥控器数据的CAN ID
rc_tx_message.IDE = CAN_ID_STD; // 标准ID
rc_tx_message.RTR = CAN_RTR_DATA; // 数据帧
rc_tx_message.DLC = 0x08; // 8字节数据长度
initialized = 1;
}
// 将16位数据拆分为高8位和低8位
// 通道数据 (-660~660, 实际是-1024~1024)
rc_can_send_data[0] = (rc->ch0 >> 8) & 0xFF; // ch0高8位
rc_can_send_data[1] = rc->ch0 & 0xFF; // ch0低8位
rc_can_send_data[2] = (rc->ch1 >> 8) & 0xFF; // ch1高8位
rc_can_send_data[3] = rc->ch1 & 0xFF; // ch1低8位
rc_can_send_data[4] = (rc->ch2 >> 8) & 0xFF; // ch2高8位
rc_can_send_data[5] = rc->ch2 & 0xFF; // ch2低8位
// ch3和roll只有11位有效进行优化打包
// ch3低8位 + 开关位
rc_can_send_data[6] = (rc->ch3 & 0xFF); // ch3低8位
// 开关位组合sw2高2位 + sw1低2位 + ch3的高3位(bit8-10)
rc_can_send_data[7] = ((rc->ch3 >> 8) & 0x07) | // ch3高3位
((rc->sw1 & 0x03) << 3) | // sw1占2位
((rc->sw2 & 0x03) << 5); // sw2占2位
// 发送CAN数据
HAL_CAN_AddTxMessage(&hcan2, &rc_tx_message, rc_can_send_data, &send_mail_box);
}
// 如果需要发送roll数据可以再添加一个函数
void send_rc_roll_data(rc_info_t *rc)
{
static CAN_TxHeaderTypeDef roll_tx_message;
static uint8_t roll_can_send_data[8];
static uint8_t initialized = 0;
uint32_t send_mail_box;
if (!initialized) {
roll_tx_message.StdId = 0x302; // roll数据的CAN ID
roll_tx_message.IDE = CAN_ID_STD;
roll_tx_message.RTR = CAN_RTR_DATA;
roll_tx_message.DLC = 0x02; // 2字节数据长度
initialized = 1;
}
// roll数据 (-660~660)
roll_can_send_data[0] = (rc->roll >> 8) & 0xFF; // roll高8位
roll_can_send_data[1] = rc->roll & 0xFF; // roll低8位
HAL_CAN_AddTxMessage(&hcan2, &roll_tx_message, roll_can_send_data, &send_mail_box);
}