更新了当前进度
This commit is contained in:
94
Core/Bsp/CToC.C
Normal file
94
Core/Bsp/CToC.C
Normal file
@@ -0,0 +1,94 @@
|
||||
#include "stm32f4xx_hal.h"
|
||||
#include "string.h"
|
||||
#include "stdio.h"
|
||||
|
||||
#include "CToC.h"
|
||||
#include "can.h"
|
||||
#include "usart.h"
|
||||
|
||||
|
||||
/*
|
||||
*函数简介:板间通讯主机发送遥控器摇杆数据
|
||||
*参数说明:无
|
||||
*返回类型:1-发送成功,0-发送失败
|
||||
*备注:默认标准格式数据帧,8字节数据段
|
||||
*备注:使用从机ID1
|
||||
*/
|
||||
uint8_t CToC_MasterSendData(uint16_t Remote_R_RL, uint16_t Remote_R_UD, uint16_t Remote_L_RL, uint16_t Remote_L_UD)
|
||||
{
|
||||
CAN_TxHeaderTypeDef txHeader;
|
||||
uint8_t txData[8] = {0};
|
||||
uint32_t txMailbox;
|
||||
|
||||
txHeader.StdId = CToC_SlaveID1;
|
||||
txHeader.ExtId = 0;
|
||||
txHeader.IDE = CAN_ID_STD;
|
||||
txHeader.RTR = CAN_RTR_DATA;
|
||||
txHeader.DLC = 8;
|
||||
txHeader.TransmitGlobalTime = DISABLE;
|
||||
|
||||
txData[0] = (uint8_t)((uint16_t)Remote_R_RL >> 8);
|
||||
txData[1] = (uint8_t)((uint16_t)Remote_R_RL & 0x00FF);
|
||||
txData[2] = (uint8_t)((uint16_t)Remote_R_UD >> 8);
|
||||
txData[3] = (uint8_t)((uint16_t)Remote_R_UD & 0x00FF);
|
||||
txData[4] = (uint8_t)(Remote_L_RL >> 8);
|
||||
txData[5] = (uint8_t)(Remote_L_RL & 0x00FF);
|
||||
txData[6] = (uint8_t)(Remote_L_UD >> 8);
|
||||
txData[7] = (uint8_t)(Remote_L_UD & 0x00FF);
|
||||
|
||||
// 打印要发送的数据
|
||||
printf("Sending CAN Data: ");
|
||||
for(uint8_t i = 0; i < 8; i++) {
|
||||
printf("%02X ", txData[i]);
|
||||
}
|
||||
printf("\r\n");
|
||||
|
||||
if (HAL_CAN_AddTxMessage(&hcan2, &txHeader, txData, &txMailbox) != HAL_OK) {
|
||||
printf("CAN send failed\r\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 等待发送完成(可选):简单轮询超时
|
||||
uint32_t timeout = 0;
|
||||
while (HAL_CAN_IsTxMessagePending(&hcan2, txMailbox) && timeout++ < 0xFFFF) {}
|
||||
if (timeout >= 0xFFFF) return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*函数简介:板间通讯数据处理
|
||||
*参数说明:CAN数据帧ID号,详情见CToC.h的宏定义
|
||||
*参数说明:反馈数据(8字节)
|
||||
*返回类型:无
|
||||
*接收数据:
|
||||
* Data[0]-发射机构状态
|
||||
*/
|
||||
// void CToC_CANDataProcess(uint32_t ID, uint8_t *Data)
|
||||
// {
|
||||
// // 保留原逻辑,但注释掉对未定义符号的影响部分
|
||||
// static uint8_t Last_ShooterStatus = 0;
|
||||
// if (ID == CToC_MasterID1) {
|
||||
// // 如果 RefereeSystem_ShooterStatus 在工程中存在,可恢复下面三行
|
||||
// // Last_ShooterStatus = RefereeSystem_ShooterStatus;
|
||||
// // RefereeSystem_ShooterStatus = Data[0];
|
||||
// // if (Last_ShooterStatus == 0 && RefereeSystem_ShooterStatus == 1) RefereeSystem_ShooterOpenFlag = 1;
|
||||
|
||||
// // 当前仅保存/使用 Data[0] 的值到本地静态变量(示例)
|
||||
// Last_ShooterStatus = Data[0];
|
||||
// (void)Last_ShooterStatus; // 若需要后续使用请替换为实际逻辑
|
||||
// }
|
||||
// }
|
||||
|
||||
void CToC_CANDataProcess(uint32_t ID, uint8_t *Data)
|
||||
{
|
||||
if (ID == CToC_MasterID1) {
|
||||
// 简单打印接收到的数据,用于测试通信
|
||||
printf("Received CAN Data: ");
|
||||
for(uint8_t i = 0; i < 8; i++) {
|
||||
printf("%02X ", Data[i]);
|
||||
}
|
||||
printf("\r\n");
|
||||
}
|
||||
}
|
||||
|
||||
13
Core/Bsp/CToC.h
Normal file
13
Core/Bsp/CToC.h
Normal file
@@ -0,0 +1,13 @@
|
||||
#ifndef __CTOC_H
|
||||
#define __CTOC_H
|
||||
|
||||
#define CToC_MasterID1 0x019//主机ID1
|
||||
|
||||
#define CToC_SlaveID1 0x149//从机ID1
|
||||
#define CToC_SlaveID2 0x189//从机ID2
|
||||
|
||||
uint8_t CToC_MasterSendData(uint16_t Remote_R_RL, uint16_t Remote_R_UD, uint16_t Remote_L_RL, uint16_t Remote_L_UD);//板间通讯主机发送遥控器摇杆数据
|
||||
// uint8_t CToC_MasterSendControl(void);//板间通讯主机发送遥控器控制数据
|
||||
void CToC_CANDataProcess(uint32_t ID,uint8_t *Data);//板间通讯数据处理
|
||||
|
||||
#endif
|
||||
34
Core/Bsp/GM6020.h
Normal file
34
Core/Bsp/GM6020.h
Normal file
@@ -0,0 +1,34 @@
|
||||
#ifndef __GM6020_H
|
||||
#define __GM6020_H
|
||||
|
||||
typedef enum
|
||||
{
|
||||
GM6020_1=0x205,//ID1
|
||||
GM6020_2=0x206,//ID2
|
||||
GM6020_3=0x207,//ID3
|
||||
GM6020_4=0x208,//ID4
|
||||
GM6020_5=0x209,//ID5
|
||||
GM6020_6=0x20A,//ID6
|
||||
GM6020_7=0x20B,//ID7
|
||||
}GM6020_ID;//GM6020电机ID号枚举
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint16_t Angle;//GM6020电机机械角度
|
||||
uint8_t First_Flag;//GM6020电机首次接收标志位
|
||||
int64_t r;//GM6020电机转过圈数(默认圈数只会出现0,1)
|
||||
int64_t Position;//GM6020电机角度位置原始数据
|
||||
int16_t Speed;//GM6020电机转速
|
||||
int16_t Current;//GM6020电机实际转矩电流
|
||||
uint8_t Temperature;//GM6020电机电机温度
|
||||
}GM6020_Motor;//GM6020电机状态结构体
|
||||
|
||||
extern GM6020_Motor GM6020_MotorStatus[];//GM6020电机状态数组
|
||||
|
||||
uint8_t GM6020_CAN1SetLIDVoltage(int16_t Voltage1,int16_t Voltage2,int16_t Voltage3,int16_t Voltage4);//CAN1总线设置GM6020低位ID电压
|
||||
uint8_t GM6020_CAN1SetHIDVoltage(int16_t Voltage5,int16_t Voltage6,int16_t Voltage7);//CAN1总线设置GM6020高位ID电压
|
||||
uint8_t GM6020_CAN2SetLIDVoltage(int16_t Voltage1,int16_t Voltage2,int16_t Voltage3,int16_t Voltage4);//CAN2总线设置GM6020低位ID电压
|
||||
uint8_t GM6020_CAN2SetHIDVoltage(int16_t Voltage5,int16_t Voltage6,int16_t Voltage7);//CAN2总线设置GM6020高位ID电压
|
||||
void GM6020_CANDataProcess(GM6020_ID ID,uint8_t *Data);//GM6020数据处理
|
||||
|
||||
#endif
|
||||
43
Core/Bsp/M2006.h
Normal file
43
Core/Bsp/M2006.h
Normal file
@@ -0,0 +1,43 @@
|
||||
#ifndef __M2006_H
|
||||
#define __M2006_H
|
||||
|
||||
typedef enum
|
||||
{
|
||||
M2006_1=0x201,//ID1
|
||||
M2006_2=0x202,//ID2
|
||||
M2006_3=0x203,//ID3
|
||||
M2006_4=0x204,//ID4
|
||||
M2006_5=0x205,//ID5
|
||||
M2006_6=0x206,//ID6
|
||||
M2006_7=0x207,//ID7
|
||||
M2006_8=0x208,//ID8
|
||||
}M2006_ID;//M2006电机ID号枚举
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t First_Flag;//M2006电机首次接收标志位
|
||||
int64_t Rotor_r;//M2006电机转子转过圈数
|
||||
uint16_t RawRotorAngle;//M2006电机转子机械角度原始数据(范围0~8191,对应0~360°,注意:8192对应360°)
|
||||
float RotorAngle;//M2006电机转子机械角度(单位°)
|
||||
int64_t RawRotorPosition;//M2006电机转子角度位置原始数据
|
||||
float RotorPosition;//M2006电机转子角度位置(单位°)
|
||||
int16_t RotorSpeed;//M2006电机转子转速(单位RPM)
|
||||
|
||||
int64_t Shaft_r;//M2006电机转轴转过圈数
|
||||
float ShaftAngle;//M2006电机转轴机械角度(单位°)
|
||||
float ShaftPosition;//M2006电机转轴角度位置(单位°)
|
||||
float ShaftSpeed;//M2006电机转轴转速(单位RPM)
|
||||
|
||||
int16_t RawCurrent;//M2006电机转矩电流原始数据(范围-10000~10000,对应-10A~10A,注意:10000对应10A)
|
||||
float Current;//M2006电机转矩电流(单位A)
|
||||
|
||||
float Power;//M2006电机功率(单位W)
|
||||
}M2006_Motor;//M2006电机状态结构体(减速比36:1,转矩系数0.18N·m/A)
|
||||
|
||||
extern M2006_Motor M2006_MotorStatus[];//M2006电机状态数组
|
||||
|
||||
uint8_t M2006_CANSetLIDCurrent(int16_t Current1,int16_t Current2,int16_t Current3,int16_t Current4);//CAN总线设置M2006低位ID电流
|
||||
uint8_t M2006_CANSetHIDCurrent(int16_t Current5,int16_t Current6,int16_t Current7,int16_t Current8);//CAN总线设置M2006高位ID电流
|
||||
void M2006_CANDataProcess(M2006_ID ID,uint8_t *Data);//M2006数据处理
|
||||
|
||||
#endif
|
||||
46
Core/Bsp/M3508.h
Normal file
46
Core/Bsp/M3508.h
Normal file
@@ -0,0 +1,46 @@
|
||||
#ifndef __M3508_H
|
||||
#define __M3508_H
|
||||
|
||||
typedef enum
|
||||
{
|
||||
M3508_1=0x201,//ID1
|
||||
M3508_2=0x202,//ID2
|
||||
M3508_3=0x203,//ID3
|
||||
M3508_4=0x204,//ID4
|
||||
M3508_5=0x205,//ID5
|
||||
M3508_6=0x206,//ID6
|
||||
M3508_7=0x207,//ID7
|
||||
M3508_8=0x208,//ID8
|
||||
}M3508_ID;//M3508电机ID号枚举
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t First_Flag;//M3508电机首次接收标志位
|
||||
int64_t Rotor_r;//M3508电机转子转过圈数
|
||||
uint16_t RawRotorAngle;//M3508电机转子机械角度原始数据(范围0~8191,对应0~360°,注意:8192对应360°)
|
||||
float RotorAngle;//M3508电机转子机械角度(单位°)
|
||||
int64_t RawRotorPosition;//M3508电机转子角度位置原始数据
|
||||
float RotorPosition;//M3508电机转子角度位置(单位°)
|
||||
int16_t RotorSpeed;//M3508电机转子转速(单位RPM)
|
||||
|
||||
int64_t Shaft_r;//M3508电机转轴转过圈数
|
||||
float ShaftAngle;//M3508电机转轴机械角度(单位°)
|
||||
float ShaftPosition;//M3508电机转轴角度位置(单位°)
|
||||
float ShaftSpeed;//M3508电机转轴转速(单位RPM)
|
||||
|
||||
int16_t RawCurrent;//M3508电机转矩电流原始数据(范围-16384~16384,对应-20A~20A,注意:16384对应20A)
|
||||
float Current;//M3508电机转矩电流(单位A)
|
||||
|
||||
float Power;//M3508电机功率(单位W)
|
||||
uint8_t Temperature;//M3508电机电机温度(单位℃)
|
||||
}M3508_Motor;//M3508电机状态结构体(减速比3591:187(≈19:1),转矩系数0.3N·m/A)
|
||||
|
||||
extern M3508_Motor M3508_MotorStatus[];//M3508电机状态数组
|
||||
|
||||
void M3508_PWMInit(void);//PWM控制M3508电机初始化
|
||||
void M3508_PWMSetSpeed(int16_t Speed,uint8_t Flag);//PWM设置M3508转速
|
||||
uint8_t M3508_CANSetLIDCurrent(int16_t Current1,int16_t Current2,int16_t Current3,int16_t Current4);//CAN总线设置M3508低位ID电流
|
||||
uint8_t M3508_CANSetHIDCurrent(int16_t Current5,int16_t Current6,int16_t Current7,int16_t Current8);//CAN总线设置M3508高位ID电流
|
||||
void M3508_CANDataProcess(M3508_ID ID,uint8_t *Data);//M3508数据处理
|
||||
|
||||
#endif
|
||||
31
Core/Bsp/remote_control.c
Normal file
31
Core/Bsp/remote_control.c
Normal file
@@ -0,0 +1,31 @@
|
||||
#include "remote_control.h"
|
||||
|
||||
void Message_Remote_to_rc(volatile const uint8_t *sbus_buf, RC_ctrl_t *rc_ctrl)
|
||||
{
|
||||
if (sbus_buf == NULL || rc_ctrl == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
rc_ctrl->rc.ch[0] = (sbus_buf[0] | (sbus_buf[1] << 8)) & 0x07ff; //!< Channel 0
|
||||
rc_ctrl->rc.ch[1] = ((sbus_buf[1] >> 3) | (sbus_buf[2] << 5)) & 0x07ff; //!< Channel 1
|
||||
rc_ctrl->rc.ch[2] = ((sbus_buf[2] >> 6) | (sbus_buf[3] << 2) | //!< Channel 2
|
||||
(sbus_buf[4] << 10)) &0x07ff;
|
||||
rc_ctrl->rc.ch[3] = ((sbus_buf[4] >> 1) | (sbus_buf[5] << 7)) & 0x07ff; //!< Channel 3
|
||||
|
||||
rc_ctrl->rc.s[0] = ((sbus_buf[5] >> 4) & 0x0003); //!< Switch left
|
||||
rc_ctrl->rc.s[1] = ((sbus_buf[5] >> 4) & 0x000C) >> 2; //!< Switch right
|
||||
rc_ctrl->mouse.x = sbus_buf[6] | (sbus_buf[7] << 8); //!< Mouse X axis
|
||||
rc_ctrl->mouse.y = sbus_buf[8] | (sbus_buf[9] << 8); //!< Mouse Y axis
|
||||
rc_ctrl->mouse.z = sbus_buf[10] | (sbus_buf[11] << 8); //!< Mouse Z axis
|
||||
rc_ctrl->mouse.press_l = sbus_buf[12]; //!< Mouse Left Is Press ?
|
||||
rc_ctrl->mouse.press_r = sbus_buf[13]; //!< Mouse Right Is Press ?
|
||||
rc_ctrl->key.v = sbus_buf[14] | (sbus_buf[15] << 8); //!< KeyBoard value
|
||||
rc_ctrl->rc.ch[4] = sbus_buf[16] | (sbus_buf[17] << 8); //NULL
|
||||
|
||||
rc_ctrl->rc.ch[0] -= RC_CH_VALUE_OFFSET;
|
||||
rc_ctrl->rc.ch[1] -= RC_CH_VALUE_OFFSET;
|
||||
rc_ctrl->rc.ch[2] -= RC_CH_VALUE_OFFSET;
|
||||
rc_ctrl->rc.ch[3] -= RC_CH_VALUE_OFFSET;
|
||||
rc_ctrl->rc.ch[4] -= RC_CH_VALUE_OFFSET;
|
||||
}
|
||||
65
Core/Bsp/remote_control.h
Normal file
65
Core/Bsp/remote_control.h
Normal file
@@ -0,0 +1,65 @@
|
||||
#ifndef REMOTE_CONTROL_H
|
||||
#define REMOTE_CONTROL_H
|
||||
|
||||
#include "stm32f4xx_hal.h"
|
||||
|
||||
/* ----------------------- RC Channel Value Definition---------------------- */
|
||||
|
||||
#define RC_CH_VALUE_MIN ((uint16_t)364)
|
||||
#define RC_CH_VALUE_OFFSET ((uint16_t)1024)
|
||||
#define RC_CH_VALUE_MAX ((uint16_t)1684)
|
||||
|
||||
/* ----------------------- RC Switch Definition----------------------------- */
|
||||
|
||||
#define RC_SW_UP ((uint16_t)1)
|
||||
#define RC_SW_MID ((uint16_t)2)
|
||||
#define RC_SW_DOWN ((uint16_t)3)
|
||||
#define switch_is_down(s) (s == RC_SW_DOWN)
|
||||
#define switch_is_mid(s) (s == RC_SW_MID)
|
||||
#define switch_is_up(s) (s == RC_SW_UP)
|
||||
|
||||
/* ----------------------- PC Key Definition-------------------------------- */
|
||||
|
||||
#define KEY_PRESSED_OFFSET_W ((uint16_t)1 << 0)
|
||||
#define KEY_PRESSED_OFFSET_S ((uint16_t)1 << 1)
|
||||
#define KEY_PRESSED_OFFSET_A ((uint16_t)1 << 2)
|
||||
#define KEY_PRESSED_OFFSET_D ((uint16_t)1 << 3)
|
||||
#define KEY_PRESSED_OFFSET_SHIFT ((uint16_t)1 << 4)
|
||||
#define KEY_PRESSED_OFFSET_CTRL ((uint16_t)1 << 5)
|
||||
#define KEY_PRESSED_OFFSET_Q ((uint16_t)1 << 6)
|
||||
#define KEY_PRESSED_OFFSET_E ((uint16_t)1 << 7)
|
||||
#define KEY_PRESSED_OFFSET_R ((uint16_t)1 << 8)
|
||||
#define KEY_PRESSED_OFFSET_F ((uint16_t)1 << 9)
|
||||
#define KEY_PRESSED_OFFSET_G ((uint16_t)1 << 10)
|
||||
#define KEY_PRESSED_OFFSET_Z ((uint16_t)1 << 11)
|
||||
#define KEY_PRESSED_OFFSET_X ((uint16_t)1 << 12)
|
||||
#define KEY_PRESSED_OFFSET_C ((uint16_t)1 << 13)
|
||||
#define KEY_PRESSED_OFFSET_V ((uint16_t)1 << 14)
|
||||
#define KEY_PRESSED_OFFSET_B ((uint16_t)1 << 15)
|
||||
|
||||
/* ----------------------- Data Struct ------------------------------------- */
|
||||
typedef struct
|
||||
{
|
||||
struct
|
||||
{
|
||||
int16_t ch[5];
|
||||
char s[2];
|
||||
} rc;
|
||||
struct
|
||||
{
|
||||
int16_t x;
|
||||
int16_t y;
|
||||
int16_t z;
|
||||
uint8_t press_l;
|
||||
uint8_t press_r;
|
||||
} mouse;
|
||||
struct
|
||||
{
|
||||
uint16_t v;
|
||||
} key;
|
||||
|
||||
} RC_ctrl_t;
|
||||
|
||||
void Message_Remote_to_rc(volatile const uint8_t *sbus_buf, RC_ctrl_t *rc_ctrl);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user