初始提交

This commit is contained in:
2025-12-06 22:11:58 +08:00
commit 0fabb219bb
1479 changed files with 1061554 additions and 0 deletions

77
Core/Src/can2.c Normal file
View File

@@ -0,0 +1,77 @@
#include "main.h"
#include "can.h"
#include "gpio.h"
#include "can2.h"
// 打包函数
void pack_rc_to_can(const rc_info_t *rc, can_packet_t *packet1, can_packet_t *packet2)
{
// 第一个包ch0-ch3 (共8字节)
packet1->data[0] = (uint8_t)(rc->ch0 & 0xFF);
packet1->data[1] = (uint8_t)((rc->ch0 >> 8) & 0xFF);
packet1->data[2] = (uint8_t)(rc->ch1 & 0xFF);
packet1->data[3] = (uint8_t)((rc->ch1 >> 8) & 0xFF);
packet1->data[4] = (uint8_t)(rc->ch2 & 0xFF);
packet1->data[5] = (uint8_t)((rc->ch2 >> 8) & 0xFF);
packet1->data[6] = (uint8_t)(rc->ch3 & 0xFF);
packet1->data[7] = (uint8_t)((rc->ch3 >> 8) & 0xFF);
// 第二个包roll + sw1 + sw2 (共4字节)
packet2->data[0] = (uint8_t)(rc->roll & 0xFF);
packet2->data[1] = (uint8_t)((rc->roll >> 8) & 0xFF);
packet2->data[2] = rc->sw1;
packet2->data[3] = rc->sw2;
// 填充剩余字节(可以添加校验、计数器等)
static uint8_t counter = 0;
packet2->data[4] = counter++; // 帧计数器
packet2->data[5] = 0xAA; // 校验标记
packet2->data[6] = 0x55;
packet2->data[7] = 0x00;
}
// CAN发送函数
static uint8_t send_can_frame(uint32_t id, uint8_t *data, uint8_t len)
{
CAN_TxHeaderTypeDef tx_header;
uint32_t tx_mailbox;
// 配置CAN帧头
tx_header.StdId = id;
tx_header.ExtId = 0x00;
tx_header.IDE = CAN_ID_STD;
tx_header.RTR = CAN_RTR_DATA;
tx_header.DLC = len;
tx_header.TransmitGlobalTime = DISABLE;
// 发送CAN帧
if (HAL_CAN_AddTxMessage(&hcan2, &tx_header, data, &tx_mailbox) == HAL_OK)
{
return 1; // 发送成功
}
return 0; // 发送失败
}
// 发送遥控器数据
void send_rc_data(const rc_info_t *rc)
{
can_packet_t packet1, packet2;
// 打包数据
pack_rc_to_can(rc, &packet1, &packet2);
// 发送两个CAN帧
if (!send_can_frame(0x100, packet1.data, 8))
{
// 发送失败处理
// 可以重试或记录错误
}
// 延时一下,避免总线拥堵
HAL_Delay(1);
if (!send_can_frame(0x101, packet2.data, 8))
{
// 发送失败处理
}
}