添加文件1和文件2

This commit is contained in:
2025-11-27 20:08:38 +08:00
parent 5d4099938c
commit edc427c423
1675 changed files with 1068907 additions and 2830 deletions

View File

@@ -0,0 +1,149 @@
#include "main.h"
#include "can.h"
#include "gpio.h"
#include "CToC.h"
#include "RefreeSystem.h"
#include "Remote.h"
#include "M3508.h"
static CAN_TxHeaderTypeDef TxMessage;
static uint8_t DATE_CAIPAN[8];
uint8_t CToC_SlaveSendRefereeSystemData(void)
{
uint32_t send_mail_box;
TxMessage.StdId=CToC_MasterID1;
TxMessage.IDE = CAN_ID_STD;
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.DLC=0x08;
DATE_CAIPAN[0]=RefereeSystem_ShooterStatus;
DATE_CAIPAN[1]=0;
DATE_CAIPAN[2]=0;
DATE_CAIPAN[3]=0;
DATE_CAIPAN[4]=0;
DATE_CAIPAN[5]=0;
DATE_CAIPAN[6]=0;
DATE_CAIPAN[7]=0;
HAL_StatusTypeDef status = HAL_CAN_AddTxMessage(&hcan2, &TxMessage,DATE_CAIPAN, &send_mail_box);
if (status != HAL_OK) {
return 0;
}
uint16_t i = 0;
while ((HAL_CAN_IsTxMessagePending(&hcan2, send_mail_box)) && (i < 0xFFF)) {
i++;
}
if (i >= 0xFFF) {
return 0;
}
return 1;
}
void can_filter_init(void)
{
CAN_FilterTypeDef can_filter_st;
// ==================== CAN1 ?? ====================
// CAN1??ID
can_filter_st.FilterActivation = ENABLE;
can_filter_st.FilterMode = CAN_FILTERMODE_IDMASK;
can_filter_st.FilterScale = CAN_FILTERSCALE_32BIT;
can_filter_st.FilterIdHigh = 0x0000; // ??ID
can_filter_st.FilterIdLow = 0x0000;
can_filter_st.FilterMaskIdHigh = 0x0000;
can_filter_st.FilterMaskIdLow = 0x0007; // ??ID
can_filter_st.FilterBank = 0;
can_filter_st.FilterFIFOAssignment = CAN_RX_FIFO0;
can_filter_st.SlaveStartFilterBank = 14; // CAN2??14???
HAL_CAN_ConfigFilter(&hcan1, &can_filter_st);
HAL_CAN_Start(&hcan1);
HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING);
// ==================== CAN2 ?? ====================
// CAN2??ID 0x200-0x207???
can_filter_st.FilterIdHigh = 0; // ?????ID
can_filter_st.FilterIdLow = 0; // ?????ID
can_filter_st.FilterMaskIdHigh = 0; // ???????ID
can_filter_st.FilterMaskIdLow = 0; // ???????ID
can_filter_st.FilterBank = 14; // CAN2??????14
can_filter_st.FilterFIFOAssignment = CAN_RX_FIFO0;
HAL_CAN_ConfigFilter(&hcan2, &can_filter_st);
HAL_CAN_Start(&hcan2);
HAL_CAN_ActivateNotification(&hcan2, CAN_IT_RX_FIFO0_MSG_PENDING);
}
Remote_Data Remote_RxData;
void CToC_CANDataProcess(uint32_t ID,uint8_t *Data)
{
if(ID==CToC_SlaveID1)//?????????
{
Remote_RxData.Remote_R_RL=(uint16_t)((uint16_t)Data[0]<<8 | Data[1]);//?????
Remote_RxData.Remote_R_UD=(uint16_t)((uint16_t)Data[2]<<8 | Data[3]);//?????
Remote_RxData.Remote_L_RL=(uint16_t)((uint16_t)Data[4]<<8 | Data[5]);//?????
Remote_RxData.Remote_L_UD=(uint16_t)((uint16_t)Data[6]<<8 | Data[7]);//?????
}
else if(ID==CToC_SlaveID2)//?????????
{
Remote_Status=Data[0];//???????
Remote_RxData.Remote_RS=Data[1];//?????????
Remote_RxData.Remote_KeyPush_Ctrl=Data[2];//??Ctrl??
Remote_RxData.Remote_KeyPush_Shift=Data[3];//??Shift??
Remote_StartFlag=Data[4];//????????
Remote_RxData.Remote_LS=Data[5];//?????????
}
}
/**
* @brief <20><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param motor_id: <20><><EFBFBD><EFBFBD>ID (0-3)
* @param measure: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
*/
void Update_Motor_Measure(uint8_t motor_id, motor_measure_t* measure)
{
if (motor_id < 4) {
// ֱ<>ӽṹ<D3BD>帳ֵ<E5B8B3><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
motor_controller[motor_id].measure = *measure;
}
}
//can<61><6E><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B6A8>
// CAN2<4E><32><EFBFBD>ջص<D5BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
{
CAN_RxHeaderTypeDef rx_header;
uint8_t rx_data[8];
HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &rx_header, rx_data);
// <20>ж<EFBFBD><D0B6><EFBFBD>CAN1<4E><31><EFBFBD><EFBFBD>CAN2
if (hcan->Instance == CAN1) {
// CAN1<4E><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (ID 1-4)
switch (rx_header.StdId) {
case 1: case 2: case 3: case 4: {
static uint8_t i = 0;
i = rx_header.StdId - 1;
get_motor_measure(&motor_chassis[i], rx_data);
Update_Motor_Measure(i, &motor_chassis[i]);
break;
}
default:
break;
}
}
else if (hcan->Instance == CAN2) {
// CAN2<4E><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CToC_CANDataProcess(rx_header.StdId, rx_data);
}
}
//HAL<41><4C><EFBFBD><EFBFBD><EFBFBD>պ<EFBFBD><D5BA><EFBFBD>HAL_CAN_GetRxMessage
HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]);