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" can{can_num}_filter.FilterFIFOAssignment = {fifo_assignment};",
|
||||||
f" HAL_CAN_ConfigFilter(&hcan{can_num}, &can{can_num}_filter);",
|
f" HAL_CAN_ConfigFilter(&hcan{can_num}, &can{can_num}_filter);",
|
||||||
f" HAL_CAN_Start(&hcan{can_num});",
|
f" HAL_CAN_Start(&hcan{can_num});",
|
||||||
f" HAL_CAN_ActivateNotification(&hcan{can_num}, CAN_IT_RX_FIFO0_MSG_PENDING);",
|
|
||||||
"",
|
"",
|
||||||
f" // 注册回调函数",
|
f" // 注册{instance}回调函数",
|
||||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_RX_FIFO0_MSG_PENDING_CB, BSP_CAN_RxFifoCallback);",
|
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" can1_filter.FilterFIFOAssignment = CAN_RX_FIFO0;",
|
||||||
f" HAL_CAN_ConfigFilter(&hcan1, &can1_filter);",
|
f" HAL_CAN_ConfigFilter(&hcan1, &can1_filter);",
|
||||||
f" HAL_CAN_Start(&hcan1);",
|
f" HAL_CAN_Start(&hcan1);",
|
||||||
f" HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING);",
|
|
||||||
"",
|
"",
|
||||||
f" // 注册CAN1回调函数",
|
f" // 注册CAN1回调函数",
|
||||||
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_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
|
name, instance = can2_config
|
||||||
init_lines.extend([
|
init_lines.extend([
|
||||||
f" // 初始化 CAN2 - 使用 FIFO1",
|
f" // 初始化 CAN2 - 使用 FIFO1",
|
||||||
f" CAN_FilterTypeDef can2_filter = {{0}};",
|
f" can1_filter.FilterBank = 14;",
|
||||||
f" can2_filter.FilterBank = 14;",
|
f" can1_filter.FilterFIFOAssignment = CAN_RX_FIFO1;",
|
||||||
f" can2_filter.FilterIdHigh = 0;",
|
f" HAL_CAN_ConfigFilter(&hcan2, &can1_filter); // 通过 CAN1 配置",
|
||||||
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" HAL_CAN_Start(&hcan2);",
|
f" HAL_CAN_Start(&hcan2);",
|
||||||
f" HAL_CAN_ActivateNotification(&hcan2, CAN_IT_RX_FIFO0_MSG_PENDING);",
|
|
||||||
"",
|
"",
|
||||||
f" // 注册CAN2回调函数",
|
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,34 +559,27 @@ class bsp_can(BspPeripheralBase):
|
|||||||
f" can1_filter.FilterFIFOAssignment = CAN_RX_FIFO0;",
|
f" can1_filter.FilterFIFOAssignment = CAN_RX_FIFO0;",
|
||||||
f" HAL_CAN_ConfigFilter(&hcan1, &can1_filter);",
|
f" HAL_CAN_ConfigFilter(&hcan1, &can1_filter);",
|
||||||
f" HAL_CAN_Start(&hcan1);",
|
f" HAL_CAN_Start(&hcan1);",
|
||||||
f" HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING);",
|
|
||||||
"",
|
"",
|
||||||
f" // 注册CAN1回调函数",
|
f" // 注册CAN1回调函数",
|
||||||
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_FIFO0_MSG_PENDING_CB, BSP_CAN_RxFifo0Callback);",
|
||||||
|
"",
|
||||||
|
f" HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING);",
|
||||||
""
|
""
|
||||||
])
|
])
|
||||||
|
|
||||||
# CAN2 - FIFO0
|
# CAN2 - FIFO0
|
||||||
if can2_config:
|
if can2_config:
|
||||||
name, instance = can2_config
|
name, instance = can2_config
|
||||||
init_lines.extend([
|
init_lines.extend([
|
||||||
f" // 初始化 CAN2 - 使用 FIFO0",
|
f" // 初始化 CAN2 - 使用 FIFO0",
|
||||||
f" CAN_FilterTypeDef can2_filter = {{0}};",
|
f" can1_filter.FilterBank = 14;",
|
||||||
f" can2_filter.FilterBank = 14;",
|
f" can1_filter.FilterFIFOAssignment = CAN_RX_FIFO0;",
|
||||||
f" can2_filter.FilterIdHigh = 0;",
|
f" HAL_CAN_ConfigFilter(&hcan2, &can1_filter); // 通过 CAN1 配置",
|
||||||
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" HAL_CAN_Start(&hcan2);",
|
f" HAL_CAN_Start(&hcan2);",
|
||||||
f" HAL_CAN_ActivateNotification(&hcan2, CAN_IT_RX_FIFO0_MSG_PENDING);",
|
|
||||||
"",
|
"",
|
||||||
f" // 注册CAN2回调函数",
|
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_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))
|
can_num = ''.join(filter(str.isdigit, instance))
|
||||||
init_lines.extend([
|
init_lines.extend([
|
||||||
f" // 初始化 {instance} - 使用 FIFO1",
|
f" // 初始化 {instance} - 使用 FIFO1",
|
||||||
f" CAN_FilterTypeDef can{can_num}_filter = {{0}};",
|
f" can1_filter.FilterBank = {filter_bank};",
|
||||||
f" can{can_num}_filter.FilterBank = {filter_bank};",
|
f" can1_filter.FilterFIFOAssignment = CAN_RX_FIFO1;",
|
||||||
f" can{can_num}_filter.FilterIdHigh = 0;",
|
f" HAL_CAN_ConfigFilter(&hcan1, &can1_filter); // 通过 CAN1 配置",
|
||||||
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" HAL_CAN_Start(&hcan{can_num});",
|
f" HAL_CAN_Start(&hcan{can_num});",
|
||||||
f" HAL_CAN_ActivateNotification(&hcan{can_num}, CAN_IT_RX_FIFO0_MSG_PENDING);",
|
|
||||||
"",
|
"",
|
||||||
f" // 注册{instance}回调函数",
|
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分配不同的过滤器组
|
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 --------------------------------------------------- */
|
/* HAL Callback Functions --------------------------------------------------- */
|
||||||
void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan) {
|
void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan) {
|
||||||
BSP_CAN_t bsp_can = CAN_Get(hcan);
|
BSP_CAN_t bsp_can = CAN_Get(hcan);
|
||||||
|
Loading…
Reference in New Issue
Block a user