更新项目结构,修改自述文件
This commit is contained in:
102
00-Driver/BSP_CAN.c
Normal file
102
00-Driver/BSP_CAN.c
Normal file
@@ -0,0 +1,102 @@
|
||||
#include "bsp_can.h"
|
||||
#include "main.h"
|
||||
#include "Motor.h"
|
||||
//===============变量区
|
||||
extern CAN_HandleTypeDef hcan1;
|
||||
extern CAN_HandleTypeDef hcan2;
|
||||
|
||||
//===============公共函数
|
||||
void Can_Filter_Init(void)
|
||||
{
|
||||
CAN_FilterTypeDef can_filter_st;
|
||||
can_filter_st.FilterActivation = ENABLE;
|
||||
can_filter_st.FilterMode = CAN_FILTERMODE_IDMASK;//CAN_FILTERMODE_IDLIST//CAN_FILTERMODE_IDMASK
|
||||
can_filter_st.FilterScale = CAN_FILTERSCALE_16BIT;
|
||||
can_filter_st.FilterIdHigh = 0x0000; //(0x207<<5)
|
||||
can_filter_st.FilterIdLow = 0x0000;
|
||||
can_filter_st.FilterMaskIdHigh = 0x0000;//(0x1FF<<5)
|
||||
can_filter_st.FilterMaskIdLow = 0x0000;
|
||||
can_filter_st.FilterBank = 0;
|
||||
can_filter_st.FilterFIFOAssignment = CAN_RX_FIFO0;
|
||||
HAL_CAN_ConfigFilter(&hcan1, &can_filter_st);
|
||||
HAL_CAN_Start(&hcan1);
|
||||
HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING);
|
||||
|
||||
can_filter_st.SlaveStartFilterBank = 14;
|
||||
can_filter_st.FilterBank = 14;
|
||||
|
||||
HAL_CAN_ConfigFilter(&hcan2, &can_filter_st);
|
||||
HAL_CAN_Start(&hcan2);
|
||||
HAL_CAN_ActivateNotification(&hcan2, CAN_IT_RX_FIFO0_MSG_PENDING);
|
||||
|
||||
}
|
||||
|
||||
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
|
||||
{
|
||||
CAN_RxHeaderTypeDef rx_header;
|
||||
uint8_t rx_data[8];
|
||||
|
||||
// 读取接收到的消息
|
||||
if (HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &rx_header, rx_data) != HAL_OK)
|
||||
return; // 安全检查
|
||||
|
||||
// 只处理标准帧
|
||||
if (rx_header.IDE != CAN_ID_STD)
|
||||
return;
|
||||
|
||||
// 根据 CAN 外设实例区分总线
|
||||
if (hcan == &hcan1)
|
||||
{
|
||||
switch (rx_header.StdId)
|
||||
{
|
||||
case 0x201:
|
||||
CAN1_M3508_DataProcess(0x201,rx_data);break;
|
||||
case 0x202:
|
||||
CAN1_M3508_DataProcess(0x202,rx_data);break;
|
||||
case 0x203:
|
||||
CAN1_M3508_DataProcess(0x203,rx_data);break;
|
||||
case 0x204:
|
||||
CAN1_M3508_DataProcess(0x204,rx_data);break;
|
||||
case 0x205:
|
||||
break;
|
||||
case 0x206:
|
||||
break;
|
||||
case 0x207:
|
||||
break;
|
||||
case 0x208:
|
||||
break;
|
||||
default:
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (hcan == &hcan2)
|
||||
{
|
||||
switch (rx_header.StdId)
|
||||
{
|
||||
case 0x201:
|
||||
break;
|
||||
case 0x202:
|
||||
break;
|
||||
case 0x203:
|
||||
break;
|
||||
case 0x204:
|
||||
break;
|
||||
case 0x205:
|
||||
CAN2_M6020_DataProcess(0x205,rx_data);break;
|
||||
case 0x206:
|
||||
CAN2_M6020_DataProcess(0x206,rx_data);break;
|
||||
case 0x207:
|
||||
break;
|
||||
case 0x208:
|
||||
break;
|
||||
case 0x149:
|
||||
CToC_CANDataProcess(0x149,rx_data);break;
|
||||
default:
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user