mirror of
https://github.com/goldenfishs/MRobot.git
synced 2026-04-01 05:17:13 +08:00
修改了can
This commit is contained in:
@@ -433,6 +433,27 @@ class bsp_can(BspPeripheralBase):
|
||||
|
||||
# 生成CAN初始化代码
|
||||
init_lines = []
|
||||
# 初始化发送信号量
|
||||
init_lines.append(" // 创建发送信号量,每个CAN通道有3个发送邮箱")
|
||||
init_lines.append(" for (int i = 0; i < BSP_CAN_NUM; i++) {")
|
||||
init_lines.append(" tx_semaphore[i] = osSemaphoreNew(CAN_TX_MAILBOX_NUM, CAN_TX_MAILBOX_NUM, NULL);")
|
||||
init_lines.append(" if (tx_semaphore[i] == NULL) {")
|
||||
init_lines.append(" // 清理已创建的信号量")
|
||||
init_lines.append(" for (int j = 0; j < i; j++) {")
|
||||
init_lines.append(" if (tx_semaphore[j] != NULL) {")
|
||||
init_lines.append(" osSemaphoreDelete(tx_semaphore[j]);")
|
||||
init_lines.append(" tx_semaphore[j] = NULL;")
|
||||
init_lines.append(" }")
|
||||
init_lines.append(" }")
|
||||
init_lines.append(" if (queue_mutex != NULL) {")
|
||||
init_lines.append(" osMutexDelete(queue_mutex);")
|
||||
init_lines.append(" queue_mutex = NULL;")
|
||||
init_lines.append(" }")
|
||||
init_lines.append(" return BSP_ERR;")
|
||||
init_lines.append(" }")
|
||||
init_lines.append(" }")
|
||||
init_lines.append("")
|
||||
|
||||
# 先设置初始化标志
|
||||
init_lines.append(" // 先设置初始化标志,以便后续回调注册能通过检查")
|
||||
init_lines.append(" inited = true;")
|
||||
@@ -482,10 +503,19 @@ class bsp_can(BspPeripheralBase):
|
||||
f" HAL_CAN_ConfigFilter(&hcan{can_num}, &can{can_num}_filter);",
|
||||
f" HAL_CAN_Start(&hcan{can_num});",
|
||||
"",
|
||||
f" // 注册{instance}回调函数",
|
||||
f" // 注册{instance}发送完成回调(用于释放信号量)",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX0_CPLT_CB, BSP_CAN_TxCompleteCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX1_CPLT_CB, BSP_CAN_TxCompleteCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX2_CPLT_CB, BSP_CAN_TxCompleteCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX0_ABORT_CB, BSP_CAN_TxAbortCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX1_ABORT_CB, BSP_CAN_TxAbortCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX2_ABORT_CB, BSP_CAN_TxAbortCallback);",
|
||||
"",
|
||||
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);",
|
||||
f" HAL_CAN_ActivateNotification(&hcan{can_num}, CAN_IT_RX_FIFO0_MSG_PENDING | ",
|
||||
f" CAN_IT_TX_MAILBOX_EMPTY); // 激活发送邮箱空中断",
|
||||
""
|
||||
])
|
||||
|
||||
@@ -513,10 +543,19 @@ class bsp_can(BspPeripheralBase):
|
||||
f" HAL_CAN_ConfigFilter(&hcan1, &can1_filter);",
|
||||
f" HAL_CAN_Start(&hcan1);",
|
||||
"",
|
||||
f" // 注册CAN1回调函数",
|
||||
f" // 注册CAN1发送完成回调(用于释放信号量)",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX0_CPLT_CB, BSP_CAN_TxCompleteCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX1_CPLT_CB, BSP_CAN_TxCompleteCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX2_CPLT_CB, BSP_CAN_TxCompleteCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX0_ABORT_CB, BSP_CAN_TxAbortCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX1_ABORT_CB, BSP_CAN_TxAbortCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX2_ABORT_CB, BSP_CAN_TxAbortCallback);",
|
||||
"",
|
||||
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);",
|
||||
f" HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING | ",
|
||||
f" CAN_IT_TX_MAILBOX_EMPTY); // 激活发送邮箱空中断",
|
||||
""
|
||||
])
|
||||
|
||||
@@ -529,9 +568,18 @@ class bsp_can(BspPeripheralBase):
|
||||
f" HAL_CAN_ConfigFilter(&hcan2, &can1_filter); // 通过 CAN1 配置",
|
||||
f" HAL_CAN_Start(&hcan2);",
|
||||
"",
|
||||
f" // 注册CAN2回调函数",
|
||||
f" // 注册CAN2发送完成回调(用于释放信号量)",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX0_CPLT_CB, BSP_CAN_TxCompleteCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX1_CPLT_CB, BSP_CAN_TxCompleteCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX2_CPLT_CB, BSP_CAN_TxCompleteCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX0_ABORT_CB, BSP_CAN_TxAbortCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX1_ABORT_CB, BSP_CAN_TxAbortCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX2_ABORT_CB, BSP_CAN_TxAbortCallback);",
|
||||
"",
|
||||
f" // 注册CAN2接收回调函数",
|
||||
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);",
|
||||
f" HAL_CAN_ActivateNotification(&hcan2, CAN_IT_RX_FIFO1_MSG_PENDING | ",
|
||||
f" CAN_IT_TX_MAILBOX_EMPTY); // 激活发送邮箱空中断",
|
||||
""
|
||||
])
|
||||
|
||||
@@ -560,10 +608,19 @@ class bsp_can(BspPeripheralBase):
|
||||
f" HAL_CAN_ConfigFilter(&hcan1, &can1_filter);",
|
||||
f" HAL_CAN_Start(&hcan1);",
|
||||
"",
|
||||
f" // 注册CAN1回调函数",
|
||||
f" // 注册CAN1发送完成回调(用于释放信号量)",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX0_CPLT_CB, BSP_CAN_TxCompleteCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX1_CPLT_CB, BSP_CAN_TxCompleteCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX2_CPLT_CB, BSP_CAN_TxCompleteCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX0_ABORT_CB, BSP_CAN_TxAbortCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX1_ABORT_CB, BSP_CAN_TxAbortCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX2_ABORT_CB, BSP_CAN_TxAbortCallback);",
|
||||
"",
|
||||
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);",
|
||||
f" HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING | ",
|
||||
f" CAN_IT_TX_MAILBOX_EMPTY); // 激活发送邮箱空中断",
|
||||
""
|
||||
])
|
||||
|
||||
@@ -577,9 +634,18 @@ class bsp_can(BspPeripheralBase):
|
||||
f" HAL_CAN_ConfigFilter(&hcan2, &can1_filter); // 通过 CAN1 配置",
|
||||
f" HAL_CAN_Start(&hcan2);",
|
||||
"",
|
||||
f" // 注册CAN2回调函数",
|
||||
f" // 注册CAN2发送完成回调(用于释放信号量)",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX0_CPLT_CB, BSP_CAN_TxCompleteCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX1_CPLT_CB, BSP_CAN_TxCompleteCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX2_CPLT_CB, BSP_CAN_TxCompleteCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX0_ABORT_CB, BSP_CAN_TxAbortCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX1_ABORT_CB, BSP_CAN_TxAbortCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX2_ABORT_CB, BSP_CAN_TxAbortCallback);",
|
||||
"",
|
||||
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);",
|
||||
f" HAL_CAN_ActivateNotification(&hcan2, CAN_IT_RX_FIFO0_MSG_PENDING | ",
|
||||
f" CAN_IT_TX_MAILBOX_EMPTY); // 激活发送邮箱空中断",
|
||||
""
|
||||
])
|
||||
|
||||
@@ -595,9 +661,18 @@ class bsp_can(BspPeripheralBase):
|
||||
f" HAL_CAN_ConfigFilter(&hcan1, &can1_filter); // 通过 CAN1 配置",
|
||||
f" HAL_CAN_Start(&hcan{can_num});",
|
||||
"",
|
||||
f" // 注册{instance}回调函数",
|
||||
f" // 注册{instance}发送完成回调(用于释放信号量)",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX0_CPLT_CB, BSP_CAN_TxCompleteCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX1_CPLT_CB, BSP_CAN_TxCompleteCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX2_CPLT_CB, BSP_CAN_TxCompleteCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX0_ABORT_CB, BSP_CAN_TxAbortCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX1_ABORT_CB, BSP_CAN_TxAbortCallback);",
|
||||
f" BSP_CAN_RegisterCallback({self.enum_prefix}_{name}, HAL_CAN_TX_MAILBOX2_ABORT_CB, BSP_CAN_TxAbortCallback);",
|
||||
"",
|
||||
f" // 注册{instance}接收回调函数",
|
||||
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);",
|
||||
f" HAL_CAN_ActivateNotification(&hcan{can_num}, CAN_IT_RX_FIFO1_MSG_PENDING | ",
|
||||
f" CAN_IT_TX_MAILBOX_EMPTY); // 激活发送邮箱空中断",
|
||||
""
|
||||
])
|
||||
filter_bank += 1 # 为下一个CAN分配不同的过滤器组
|
||||
|
||||
Reference in New Issue
Block a user