添加rc——can

This commit is contained in:
Robofish 2025-09-30 19:12:10 +08:00
parent 2b35ce3955
commit 4da08b6e4b
2 changed files with 36 additions and 46 deletions

View File

@ -1,33 +1,7 @@
/*
RC CAN数据发送模块
DR16遥控器数据通过CAN总线发送
motor_rm的结构设计
Example:
RC_CAN_t rc_can;
RC_CAN_Param_t param = {
.can = BSP_CAN_1,
.enabled = true,
.send_period = 10 // 10ms发送一次
};
RC_CAN_Init(&rc_can, &param);
// 在主循环中
while(1) {
if (DR16_ParseData(&dr16) == DEVICE_OK) {
RC_CAN_SendData(&rc_can, &dr16);
}
osDelay(param.send_period);
}
*/
/* Includes ----------------------------------------------------------------- */
#include "rc_can.h"
#include "device/dr16.h"
#include "bsp/time.h"
#include <string.h>
/* USER INCLUDE BEGIN */

View File

@ -19,16 +19,14 @@ extern "C" {
/* USER DEFINE END */
/* Exported constants ------------------------------------------------------- */
// CAN ID 定义
#define RC_CAN_DR16_JOYSTICK_ID 0x300 // 遥杆数据
#define RC_CAN_DR16_SWITCH_ID 0x301 // 拨杆数据
#define RC_CAN_DR16_MOUSE_ID 0x302 // 鼠标数据
#define RC_CAN_DR16_KEYBOARD_ID 0x303 // 键盘数据
#define RC_CAN_DR16_STATUS_ID 0x304 // 状态数据
#define RC_CAN_DR16_JOY_ID 0x350 // 遥杆数据
#define RC_CAN_DR16_SWITCH_ID 0x351 // 拨杆数据
#define RC_CAN_DR16_MOUSE_ID 0x352 // 鼠标数据
#define RC_CAN_DR16_KEYBOARD_ID 0x353 // 键盘数据
#define RC_CAN_DR16_STATUS_ID 0x354 // 状态数据
/* Exported macro ----------------------------------------------------------- */
/* Exported types ----------------------------------------------------------- */
typedef enum {
RC_CAN_SW_ERR = 0,
RC_CAN_SW_UP = 1,
@ -36,20 +34,38 @@ typedef enum {
RC_CAN_SW_DOWN = 2,
} RC_CAN_SW_t;
typedef enum {
DR16_KEY_W = 0,
DR16_KEY_S,
DR16_KEY_A,
DR16_KEY_D,
DR16_KEY_SHIFT,
DR16_KEY_CTRL,
DR16_KEY_Q,
DR16_KEY_E,
DR16_KEY_R,
DR16_KEY_F,
DR16_KEY_G,
DR16_KEY_Z,
DR16_KEY_X,
DR16_KEY_C,
DR16_KEY_V,
DR16_KEY_B,
DR16_KEY_NUM,
} DR16_Key_t;
// 遥杆数据包 (CAN ID: 0x300)
typedef struct __packed {
int16_t ch_l_x; // 左侧摇杆X轴 (-1000~1000)
int16_t ch_l_y; // 左侧摇杆Y轴 (-1000~1000)
int16_t ch_r_x; // 右侧摇杆X轴 (-1000~1000)
int16_t ch_r_y; // 右侧摇杆Y轴 (-1000~1000)
} RC_CAN_JoystickData_t;
typedef struct {
int16_t ch_l_x;
int16_t ch_l_y;
int16_t ch_r_x;
int16_t ch_r_y;
} RC_CAN_JoyData_t;
// 拨杆数据包 (CAN ID: 0x301)
typedef struct __packed {
uint8_t sw_l; // 左拨杆状态
uint8_t sw_r; // 右拨杆状态
RC_CAN_SW_t sw_l; // 左拨杆状态
RC_CAN_SW_t sw_r; // 右拨杆状态
int16_t ch_res; // 第五通道 (-1000~1000)
uint32_t reserved; // 保留字节
} RC_CAN_SwitchData_t;
// 鼠标数据包 (CAN ID: 0x302)
@ -57,14 +73,14 @@ typedef struct __packed {
int16_t mouse_x; // 鼠标X轴移动
int16_t mouse_y; // 鼠标Y轴移动
int16_t mouse_z; // 鼠标Z轴(滚轮)
uint8_t mouse_l; // 鼠标左键
uint8_t mouse_r; // 鼠标右键
bool mouse_l; // 鼠标左键
bool mouse_r; // 鼠标右键
} RC_CAN_MouseData_t;
// 键盘数据包 (CAN ID: 0x303)
typedef struct __packed {
typedef union {
uint16_t key_value; // 键盘按键位映射
uint8_t reserved[6]; // 保留字节
DR16_Key_t keys[16]; // 按键数组
} RC_CAN_KeyboardData_t;
// 状态数据包 (CAN ID: 0x304)