mirror of
https://github.com/goldenfishs/MRobot.git
synced 2025-09-14 12:54:33 +08:00
准备测试
This commit is contained in:
parent
006ee185e9
commit
d61dfa3634
@ -481,10 +481,11 @@ class bsp_can(BspPeripheralBase):
|
||||
f" can{can_num}_filter.FilterFIFOAssignment = {fifo_assignment};",
|
||||
f" HAL_CAN_ConfigFilter(&hcan{can_num}, &can{can_num}_filter);",
|
||||
f" HAL_CAN_Start(&hcan{can_num});",
|
||||
f" HAL_CAN_ActivateNotification(&hcan{can_num}, CAN_IT_RX_FIFO0_MSG_PENDING);",
|
||||
"",
|
||||
f" // 注册回调函数",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_RX_FIFO0_MSG_PENDING_CB, BSP_CAN_RxFifoCallback);",
|
||||
f" // 注册{instance}回调函数",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_RX_FIFO0_MSG_PENDING_CB, BSP_CAN_RxFifo0Callback);",
|
||||
"",
|
||||
f" HAL_CAN_ActivateNotification(&hcan{can_num}, CAN_IT_RX_FIFO0_MSG_PENDING);",
|
||||
""
|
||||
])
|
||||
|
||||
@ -511,10 +512,11 @@ class bsp_can(BspPeripheralBase):
|
||||
f" can1_filter.FilterFIFOAssignment = CAN_RX_FIFO0;",
|
||||
f" HAL_CAN_ConfigFilter(&hcan1, &can1_filter);",
|
||||
f" HAL_CAN_Start(&hcan1);",
|
||||
f" HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING);",
|
||||
"",
|
||||
f" // 注册CAN1回调函数",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_RX_FIFO0_MSG_PENDING_CB, BSP_CAN_RxFifo0Callback);",
|
||||
"",
|
||||
f" HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING);",
|
||||
""
|
||||
])
|
||||
|
||||
@ -522,22 +524,14 @@ class bsp_can(BspPeripheralBase):
|
||||
name, instance = can2_config
|
||||
init_lines.extend([
|
||||
f" // 初始化 CAN2 - 使用 FIFO1",
|
||||
f" CAN_FilterTypeDef can2_filter = {{0}};",
|
||||
f" can2_filter.FilterBank = 14;",
|
||||
f" can2_filter.FilterIdHigh = 0;",
|
||||
f" can2_filter.FilterIdLow = 0;",
|
||||
f" can2_filter.FilterMode = CAN_FILTERMODE_IDMASK;",
|
||||
f" can2_filter.FilterScale = CAN_FILTERSCALE_32BIT;",
|
||||
f" can2_filter.FilterMaskIdHigh = 0;",
|
||||
f" can2_filter.FilterMaskIdLow = 0;",
|
||||
f" can2_filter.FilterActivation = ENABLE;",
|
||||
f" can2_filter.FilterFIFOAssignment = CAN_RX_FIFO0;",
|
||||
f" HAL_CAN_ConfigFilter(&hcan1, &can2_filter); // 通过 CAN1 配置",
|
||||
f" can1_filter.FilterBank = 14;",
|
||||
f" can1_filter.FilterFIFOAssignment = CAN_RX_FIFO1;",
|
||||
f" HAL_CAN_ConfigFilter(&hcan2, &can1_filter); // 通过 CAN1 配置",
|
||||
f" HAL_CAN_Start(&hcan2);",
|
||||
f" HAL_CAN_ActivateNotification(&hcan2, CAN_IT_RX_FIFO0_MSG_PENDING);",
|
||||
"",
|
||||
f" // 注册CAN2回调函数",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_RX_FIFO0_MSG_PENDING_CB, BSP_CAN_RxFifo0Callback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_RX_FIFO1_MSG_PENDING_CB, BSP_CAN_RxFifo1Callback);",
|
||||
f" HAL_CAN_ActivateNotification(&hcan2, CAN_IT_RX_FIFO1_MSG_PENDING);",
|
||||
""
|
||||
])
|
||||
|
||||
@ -565,10 +559,11 @@ class bsp_can(BspPeripheralBase):
|
||||
f" can1_filter.FilterFIFOAssignment = CAN_RX_FIFO0;",
|
||||
f" HAL_CAN_ConfigFilter(&hcan1, &can1_filter);",
|
||||
f" HAL_CAN_Start(&hcan1);",
|
||||
f" HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING);",
|
||||
"",
|
||||
f" // 注册CAN1回调函数",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_RX_FIFO0_MSG_PENDING_CB, BSP_CAN_RxFifo0Callback);",
|
||||
"",
|
||||
f" HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING);",
|
||||
""
|
||||
])
|
||||
|
||||
@ -577,22 +572,14 @@ class bsp_can(BspPeripheralBase):
|
||||
name, instance = can2_config
|
||||
init_lines.extend([
|
||||
f" // 初始化 CAN2 - 使用 FIFO0",
|
||||
f" CAN_FilterTypeDef can2_filter = {{0}};",
|
||||
f" can2_filter.FilterBank = 14;",
|
||||
f" can2_filter.FilterIdHigh = 0;",
|
||||
f" can2_filter.FilterIdLow = 0;",
|
||||
f" can2_filter.FilterMode = CAN_FILTERMODE_IDMASK;",
|
||||
f" can2_filter.FilterScale = CAN_FILTERSCALE_32BIT;",
|
||||
f" can2_filter.FilterMaskIdHigh = 0;",
|
||||
f" can2_filter.FilterMaskIdLow = 0;",
|
||||
f" can2_filter.FilterActivation = ENABLE;",
|
||||
f" can2_filter.FilterFIFOAssignment = CAN_RX_FIFO0;",
|
||||
f" HAL_CAN_ConfigFilter(&hcan1, &can2_filter); // 通过 CAN1 配置",
|
||||
f" can1_filter.FilterBank = 14;",
|
||||
f" can1_filter.FilterFIFOAssignment = CAN_RX_FIFO0;",
|
||||
f" HAL_CAN_ConfigFilter(&hcan2, &can1_filter); // 通过 CAN1 配置",
|
||||
f" HAL_CAN_Start(&hcan2);",
|
||||
f" HAL_CAN_ActivateNotification(&hcan2, CAN_IT_RX_FIFO0_MSG_PENDING);",
|
||||
"",
|
||||
f" // 注册CAN2回调函数",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_RX_FIFO0_MSG_PENDING_CB, BSP_CAN_RxFifo0Callback);",
|
||||
f" HAL_CAN_ActivateNotification(&hcan2, CAN_IT_RX_FIFO0_MSG_PENDING);",
|
||||
""
|
||||
])
|
||||
|
||||
@ -603,22 +590,14 @@ class bsp_can(BspPeripheralBase):
|
||||
can_num = ''.join(filter(str.isdigit, instance))
|
||||
init_lines.extend([
|
||||
f" // 初始化 {instance} - 使用 FIFO1",
|
||||
f" CAN_FilterTypeDef can{can_num}_filter = {{0}};",
|
||||
f" can{can_num}_filter.FilterBank = {filter_bank};",
|
||||
f" can{can_num}_filter.FilterIdHigh = 0;",
|
||||
f" can{can_num}_filter.FilterIdLow = 0;",
|
||||
f" can{can_num}_filter.FilterMode = CAN_FILTERMODE_IDMASK;",
|
||||
f" can{can_num}_filter.FilterScale = CAN_FILTERSCALE_32BIT;",
|
||||
f" can{can_num}_filter.FilterMaskIdHigh = 0;",
|
||||
f" can{can_num}_filter.FilterMaskIdLow = 0;",
|
||||
f" can{can_num}_filter.FilterActivation = ENABLE;",
|
||||
f" can{can_num}_filter.FilterFIFOAssignment = CAN_RX_FIFO0;",
|
||||
f" HAL_CAN_ConfigFilter(&hcan1, &can{can_num}_filter); // 通过 CAN1 配置",
|
||||
f" can1_filter.FilterBank = {filter_bank};",
|
||||
f" can1_filter.FilterFIFOAssignment = CAN_RX_FIFO1;",
|
||||
f" HAL_CAN_ConfigFilter(&hcan1, &can1_filter); // 通过 CAN1 配置",
|
||||
f" HAL_CAN_Start(&hcan{can_num});",
|
||||
f" HAL_CAN_ActivateNotification(&hcan{can_num}, CAN_IT_RX_FIFO0_MSG_PENDING);",
|
||||
"",
|
||||
f" // 注册{instance}回调函数",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_RX_FIFO0_MSG_PENDING_CB, BSP_CAN_RxFifo0Callback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_RX_FIFO1_MSG_PENDING_CB, BSP_CAN_RxFifo1Callback);",
|
||||
f" HAL_CAN_ActivateNotification(&hcan{can_num}, CAN_IT_RX_FIFO1_MSG_PENDING);",
|
||||
""
|
||||
])
|
||||
filter_bank += 1 # 为下一个CAN分配不同的过滤器组
|
||||
|
BIN
assets/.DS_Store
vendored
BIN
assets/.DS_Store
vendored
Binary file not shown.
Binary file not shown.
BIN
assets/User_code/.DS_Store
vendored
BIN
assets/User_code/.DS_Store
vendored
Binary file not shown.
@ -176,6 +176,38 @@ static void BSP_CAN_RxFifo0Callback(void) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief FIFO1接收处理函数
|
||||
*/
|
||||
static void BSP_CAN_RxFifo1Callback(void) {
|
||||
CAN_RxHeaderTypeDef rx_header;
|
||||
uint8_t rx_data[BSP_CAN_MAX_DLC];
|
||||
for (int can_idx = 0; can_idx < BSP_CAN_NUM; can_idx++) {
|
||||
CAN_HandleTypeDef *hcan = BSP_CAN_GetHandle((BSP_CAN_t)can_idx);
|
||||
if (hcan == NULL) continue;
|
||||
while (HAL_CAN_GetRxFifoFillLevel(hcan, CAN_RX_FIFO1) > 0) {
|
||||
if (HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO1, &rx_header, rx_data) == HAL_OK) {
|
||||
uint32_t original_id = (rx_header.IDE == CAN_ID_STD) ? rx_header.StdId : rx_header.ExtId;
|
||||
BSP_CAN_FrameType_t frame_type = BSP_CAN_GetFrameType(&rx_header);
|
||||
uint32_t parsed_id = BSP_CAN_ParseId(original_id, frame_type);
|
||||
osMessageQueueId_t queue = BSP_CAN_FindQueue((BSP_CAN_t)can_idx, parsed_id);
|
||||
if (queue != NULL) {
|
||||
BSP_CAN_Message_t msg = {0};
|
||||
msg.frame_type = frame_type;
|
||||
msg.original_id = original_id;
|
||||
msg.parsed_id = parsed_id;
|
||||
msg.dlc = rx_header.DLC;
|
||||
if (rx_header.RTR == CAN_RTR_DATA) {
|
||||
memcpy(msg.data, rx_data, rx_header.DLC);
|
||||
}
|
||||
msg.timestamp = HAL_GetTick();
|
||||
osMessageQueuePut(queue, &msg, 0, BSP_CAN_TIMEOUT_IMMEDIATE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* HAL Callback Functions --------------------------------------------------- */
|
||||
void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan) {
|
||||
BSP_CAN_t bsp_can = CAN_Get(hcan);
|
||||
|
Loading…
Reference in New Issue
Block a user