diff --git a/Core/Src/main.c b/Core/Src/main.c index 8740794..99d55e4 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -33,7 +33,6 @@ /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "common.h" -#include "bsp_uart.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -67,43 +66,7 @@ void MX_FREERTOS_Init(void); /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ -#ifndef CONFIG_UART_IT_IDLEDMA -extern TComCtrl *g_ptCom1; -extern TComCtrl *g_ptUartCtrl; -void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) -{ - if (huart->Instance == USART1) - { - UART_RX_IRQHandler(g_ptUartCtrl); - // UART_RX_IRQHandler(g_ptCom1); - } - else if (huart->Instance == USART2) - { - - } - else if (huart->Instance == USART3) - { - - } - else if (huart->Instance == UART4) - { - - } - else if (huart->Instance == UART5) - { - - } - else if (huart->Instance == USART6) - { - - } - else if (huart->Instance == UART7) - { - - } -} -#endif /* USER CODE END 0 */ /** diff --git a/robot/bspMCU/bsp_uart.c b/robot/bspMCU/bsp_uart.c index 457849f..28cf8b8 100644 --- a/robot/bspMCU/bsp_uart.c +++ b/robot/bspMCU/bsp_uart.c @@ -52,7 +52,10 @@ TUartUserData *UART_userdata_init(int _iID, uint32_t _uiBaudRate, uint32_t _uiSi #endif ptUartUserData->m_uart = g_ptUartTab[_iID].m_uart; - bsp_uart_set_baudrate(g_ptUartTab[_iID].m_uart, _uiBaudRate); + if (_uiBaudRate > 0) + { + bsp_uart_set_baudrate(g_ptUartTab[_iID].m_uart, _uiBaudRate); + } return ptUartUserData; } diff --git a/robot/bspMCU/drv_interface.c b/robot/bspMCU/drv_interface.c new file mode 100644 index 0000000..ce79b6c --- /dev/null +++ b/robot/bspMCU/drv_interface.c @@ -0,0 +1,186 @@ +/****************************************************************************** + + 版权所有 (C), 2018-2099, Radkil + + ****************************************************************************** + 文 件 名 : drv_interface.c + 版 本 号 : 初稿 + 作 者 : radkil + 生成日期 : 2026年5月27日 + 最近修改 : + 功能描述 : 对外接口层 + + 修改历史 : + 1.日 期 : 2026年5月27日 + 作 者 : radkil + 修改内容 : 创建文件 + +******************************************************************************/ +#include "bsp_config.h" +#include "main.h" +#include "bsp_uart.h" +#include "bsp_CAN.h" + +/*----------------------------------------------* + * 外部变量说明 * + *----------------------------------------------*/ + +/*----------------------------------------------* + * 外部函数原型说明 * + *----------------------------------------------*/ + +/*----------------------------------------------* + * 内部函数原型说明 * + *----------------------------------------------*/ + +/*----------------------------------------------* + * 全局变量 * + *----------------------------------------------*/ +TComCtrl *g_ptRS485_1; +TComCtrl *g_ptRS485_2; +TComCtrl *g_ptRS485_3; +TComCtrl *g_ptRS485_4; +TComCtrl *g_ptLTE_7S0; +TComCtrl *g_ptE28_SBUS; +TComCtrl *g_ptInterCall; + +TComCtrl *g_ptFDCAN1; +TComCtrl *g_ptFDCAN2; +/*----------------------------------------------* + * 模块级变量 * + *----------------------------------------------*/ + +/*----------------------------------------------* + * 常量定义 * + *----------------------------------------------*/ + +/*----------------------------------------------* + * 宏定义 * + *----------------------------------------------*/ + +int RS485_1_Send(char *_pBuffer, uint32_t _iSize) +{ + HAL_GPIO_WritePin(RS485_1_DIR_GPIO_Port, RS485_1_DIR_Pin, GPIO_PIN_SET); + TUartUserData *ptUartUserData = (TUartUserData *)g_ptRS485_1->m_pUserData; + int iRet = HAL_UART_Transmit(ptUartUserData->m_uart, (uint8_t *)_pBuffer, _iSize, 100); + HAL_GPIO_WritePin(RS485_1_DIR_GPIO_Port, RS485_1_DIR_Pin, GPIO_PIN_RESET); + return iRet; +} + +int LTE_7S0_Send(char *_pBuffer, uint32_t _iSize) +{ + TUartUserData *ptUartUserData = (TUartUserData *)g_ptLTE_7S0->m_pUserData; + int iRet = HAL_UART_Transmit(ptUartUserData->m_uart, (uint8_t *)_pBuffer, _iSize, 100); + return iRet; +} + +int RS485_2_Send(char *_pBuffer, uint32_t _iSize) +{ + HAL_GPIO_WritePin(RS485_2_DIR_GPIO_Port, RS485_2_DIR_Pin, GPIO_PIN_SET); + TUartUserData *ptUartUserData = (TUartUserData *)g_ptRS485_2->m_pUserData; + int iRet = HAL_UART_Transmit(ptUartUserData->m_uart, (uint8_t *)_pBuffer, _iSize, 100); + HAL_GPIO_WritePin(RS485_2_DIR_GPIO_Port, RS485_2_DIR_Pin, GPIO_PIN_RESET); + return iRet; +} + +int InterCall_Send(char *_pBuffer, uint32_t _iSize) +{ + TUartUserData *ptUartUserData = (TUartUserData *)g_ptInterCall->m_pUserData; + int iRet = HAL_UART_Transmit(ptUartUserData->m_uart, (uint8_t *)_pBuffer, _iSize, 100); + return iRet; +} + +int E28_SBUS_Send(char *_pBuffer, uint32_t _iSize) +{ + TUartUserData *ptUartUserData = (TUartUserData *)g_ptE28_SBUS->m_pUserData; + int iRet = HAL_UART_Transmit(ptUartUserData->m_uart, (uint8_t *)_pBuffer, _iSize, 100); + return iRet; +} + +int RS485_3_Send(char *_pBuffer, uint32_t _iSize) +{ + HAL_GPIO_WritePin(RS485_3_DIR_GPIO_Port, RS485_3_DIR_Pin, GPIO_PIN_SET); + TUartUserData *ptUartUserData = (TUartUserData *)g_ptRS485_3->m_pUserData; + int iRet = HAL_UART_Transmit(ptUartUserData->m_uart, (uint8_t *)_pBuffer, _iSize, 100); + HAL_GPIO_WritePin(RS485_3_DIR_GPIO_Port, RS485_3_DIR_Pin, GPIO_PIN_RESET); + return iRet; +} + +int RS485_4_Send(char *_pBuffer, uint32_t _iSize) +{ + HAL_GPIO_WritePin(RS485_4_DIR_GPIO_Port, RS485_4_DIR_Pin, GPIO_PIN_SET); + TUartUserData *ptUartUserData = (TUartUserData *)g_ptRS485_4->m_pUserData; + int iRet = HAL_UART_Transmit(ptUartUserData->m_uart, (uint8_t *)_pBuffer, _iSize, 100); + HAL_GPIO_WritePin(RS485_4_DIR_GPIO_Port, RS485_4_DIR_Pin, GPIO_PIN_RESET); + return iRet; +} + +int FDCAN1_Send(char *_pBuffer, uint32_t _iSize) +{ + return CAN_TX_FIFOQ(g_ptFDCAN1, _pBuffer[0], &_pBuffer[4], _iSize); +} + +int FDCAN2_Send(char *_pBuffer, uint32_t _iSize) +{ + return CAN_TX_FIFOQ(g_ptFDCAN2, _pBuffer[0], &_pBuffer[4], _iSize); +} + +#ifndef CONFIG_UART_IT_IDLEDMA +void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) +{ + if (huart->Instance == USART1) + { + UART_RX_IRQHandler(g_ptRS485_1); + } + else if (huart->Instance == USART2) + { + UART_RX_IRQHandler(g_ptLTE_7S0); + } + else if (huart->Instance == USART3) + { + UART_RX_IRQHandler(g_ptRS485_2); + } + else if (huart->Instance == UART4) + { + UART_RX_IRQHandler(g_ptInterCall); + } + else if (huart->Instance == UART5) + { + UART_RX_IRQHandler(g_ptE28_SBUS); + } + else if (huart->Instance == USART6) + { + UART_RX_IRQHandler(g_ptRS485_3); + } + else if (huart->Instance == UART7) + { + UART_RX_IRQHandler(g_ptRS485_4); + } +} +#endif + +void HAL_FDCAN_ErrorStatusCallback(FDCAN_HandleTypeDef *hfdcan, uint32_t ErrorStatusITs) +{ + if (hfdcan->Instance == FDCAN1) + { + MX_FDCAN1_Init(); + } + else if (hfdcan->Instance == FDCAN2) + { + MX_FDCAN2_Init(); + } +} + +void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs) +{ + if (hfdcan->Instance == FDCAN1) + { + CAN_RX_IRQHandler(g_ptFDCAN1); + } + else if (hfdcan->Instance == FDCAN2) + { + CAN_RX_IRQHandler(g_ptFDCAN2); + } +} + +