添加文件1和文件2
This commit is contained in:
149
Mecanum Wheel moving project 1/Core/Src/CToC.c
Normal file
149
Mecanum Wheel moving project 1/Core/Src/CToC.c
Normal 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[]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user