diff --git a/bsp/can.c b/bsp/can.c index 5083893..d0376f5 100644 --- a/bsp/can.c +++ b/bsp/can.c @@ -243,6 +243,9 @@ static void BSP_CAN_TxAbortCallback(CAN_HandleTypeDef *hcan) { void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan) { BSP_CAN_t bsp_can = CAN_Get(hcan); if (bsp_can != BSP_CAN_ERR) { + // 自动释放发送信号量 + BSP_CAN_TxCompleteCallback(hcan); + // 调用用户回调 if (CAN_Callback[bsp_can][HAL_CAN_TX_MAILBOX0_CPLT_CB]) CAN_Callback[bsp_can][HAL_CAN_TX_MAILBOX0_CPLT_CB](); } @@ -251,6 +254,9 @@ void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan) { void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan) { BSP_CAN_t bsp_can = CAN_Get(hcan); if (bsp_can != BSP_CAN_ERR) { + // 自动释放发送信号量 + BSP_CAN_TxCompleteCallback(hcan); + // 调用用户回调 if (CAN_Callback[bsp_can][HAL_CAN_TX_MAILBOX1_CPLT_CB]) CAN_Callback[bsp_can][HAL_CAN_TX_MAILBOX1_CPLT_CB](); } @@ -259,6 +265,9 @@ void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan) { void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan) { BSP_CAN_t bsp_can = CAN_Get(hcan); if (bsp_can != BSP_CAN_ERR) { + // 自动释放发送信号量 + BSP_CAN_TxCompleteCallback(hcan); + // 调用用户回调 if (CAN_Callback[bsp_can][HAL_CAN_TX_MAILBOX2_CPLT_CB]) CAN_Callback[bsp_can][HAL_CAN_TX_MAILBOX2_CPLT_CB](); } @@ -267,6 +276,9 @@ void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan) { void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan) { BSP_CAN_t bsp_can = CAN_Get(hcan); if (bsp_can != BSP_CAN_ERR) { + // 自动释放发送信号量 + BSP_CAN_TxAbortCallback(hcan); + // 调用用户回调 if (CAN_Callback[bsp_can][HAL_CAN_TX_MAILBOX0_ABORT_CB]) CAN_Callback[bsp_can][HAL_CAN_TX_MAILBOX0_ABORT_CB](); } @@ -275,6 +287,9 @@ void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan) { void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan) { BSP_CAN_t bsp_can = CAN_Get(hcan); if (bsp_can != BSP_CAN_ERR) { + // 自动释放发送信号量 + BSP_CAN_TxAbortCallback(hcan); + // 调用用户回调 if (CAN_Callback[bsp_can][HAL_CAN_TX_MAILBOX1_ABORT_CB]) CAN_Callback[bsp_can][HAL_CAN_TX_MAILBOX1_ABORT_CB](); } @@ -283,6 +298,9 @@ void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan) { void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan) { BSP_CAN_t bsp_can = CAN_Get(hcan); if (bsp_can != BSP_CAN_ERR) { + // 自动释放发送信号量 + BSP_CAN_TxAbortCallback(hcan); + // 调用用户回调 if (CAN_Callback[bsp_can][HAL_CAN_TX_MAILBOX2_ABORT_CB]) CAN_Callback[bsp_can][HAL_CAN_TX_MAILBOX2_ABORT_CB](); } diff --git a/bsp/uart.h b/bsp/uart.h index 324b1df..49a758b 100644 --- a/bsp/uart.h +++ b/bsp/uart.h @@ -42,6 +42,9 @@ typedef enum { /* Exported functions prototypes -------------------------------------------- */ UART_HandleTypeDef *BSP_UART_GetHandle(BSP_UART_t uart); + +void BSP_UART_IRQHandler(UART_HandleTypeDef *huart); + int8_t BSP_UART_RegisterCallback(BSP_UART_t uart, BSP_UART_Callback_t type, void (*callback)(void)); diff --git a/device/config.yaml b/device/config.yaml index 21dd5aa..7472db7 100644 --- a/device/config.yaml +++ b/device/config.yaml @@ -213,6 +213,10 @@ devices: dependencies: bsp: ["uart"] component: [] + bsp_requirements: + - type: "uart" + var_name: "BSP_UART_VOFA" # 需要替换的变量名 + description: "用于VOFA数据传输" thread_signals: [] files: header: "vofa.h" diff --git a/device/motor.c b/device/motor.c index e71327d..ffea060 100644 --- a/device/motor.c +++ b/device/motor.c @@ -18,7 +18,7 @@ /* Exported functions ------------------------------------------------------- */ float MOTOR_GetRotorAbsAngle(const MOTOR_t *motor) { if (motor == NULL) return DEVICE_ERR_NULL; - motor->feedback.rotor_abs_angle; + return motor->feedback.rotor_abs_angle; } float MOTOR_GetRotorSpeed(const MOTOR_t *motor) { diff --git a/device/vofa.c b/device/vofa.c index b5e1cbc..0cd4c82 100644 --- a/device/vofa.c +++ b/device/vofa.c @@ -5,14 +5,14 @@ #include "bsp/uart.h" /* Private define ----------------------------------------------------------- */ -#define MAX_CHANNEL 64u // ����ʵ�����ͨ�������� +#define MAX_CHANNEL 64u // 根据实际最大通道数调整 #define JUSTFLOAT_TAIL 0x7F800000 /* Private macro ------------------------------------------------------------ */ /* Private typedef ---------------------------------------------------------- */ /* Private variables -------------------------------------------------------- */ static uint8_t vofa_tx_buf[sizeof(float) * MAX_CHANNEL + sizeof(uint32_t)]; -static VOFA_Protocol_t current_protocol = VOFA_PROTOCOL_FIREWATER; // Ĭ��Э�� +static VOFA_Protocol_t current_protocol = VOFA_PROTOCOL_FIREWATER; // 默认协议 /* Private function -------------------------------------------------------- */ diff --git a/device/vofa.h b/device/vofa.h index 7eda280..b8f07d9 100644 --- a/device/vofa.h +++ b/device/vofa.h @@ -6,7 +6,7 @@ extern "C" { /* Includes ----------------------------------------------------------------- */ #include "bsp/uart.h" -#include ”device/device.h“ +#include "device/device.h" /* Exported constants ------------------------------------------------------- */ /* Exported macro ----------------------------------------------------------- */ /* Exported types ----------------------------------------------------------- */