/****************************************************************************** 版权所有 (C), 2018-2099, Radkil ****************************************************************************** 文 件 名 : drv_interface.c 版 本 号 : 初稿 作 者 : radkil 生成日期 : 2026年5月27日 最近修改 : 功能描述 : 对外接口层 修改历史 : 1.日 期 : 2026年5月27日 作 者 : radkil 修改内容 : 创建文件 ******************************************************************************/ #include "BHBF.h" #include "cmsis_os.h" #include "FreeRTOS.h" #include "msg_center.h" /*----------------------------------------------* * 外部变量说明 * *----------------------------------------------*/ /*----------------------------------------------* * 外部函数原型说明 * *----------------------------------------------*/ extern TComCtrl *g_ptUartCtrl; /*----------------------------------------------* * 内部函数原型说明 * *----------------------------------------------*/ /*----------------------------------------------* * 全局变量 * *----------------------------------------------*/ TComCtrl *g_ptrs485_1; TComCtrl *g_ptrs485_2; TComCtrl *g_ptrs485_3; TComCtrl *g_ptrs485_4; TComCtrl *g_ptlte_7S0; TComCtrl *g_ptSbus; TComCtrl *g_ptInterCall; TComCtrl *g_ptlpuart; TComCtrl *g_ptCAN1; TComCtrl *g_ptCAN2; /*----------------------------------------------* * 模块级变量 * *----------------------------------------------*/ /*----------------------------------------------* * 常量定义 * *----------------------------------------------*/ /*----------------------------------------------* * 宏定义 * *----------------------------------------------*/ 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_ptSbus->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 LPUART_PV_Send(char *_pBuffer, uint32_t _iSize) { TUartUserData *ptUartUserData = (TUartUserData *)g_ptlpuart->m_pUserData; int iRet = HAL_UART_Transmit(ptUartUserData->m_uart, (uint8_t *)_pBuffer, _iSize, 100); return iRet; } int FDCAN1_Send(char *_pBuffer, uint32_t _iSize) { return CAN_TX_FIFOQ(g_ptCAN1, _pBuffer, _iSize); } int FDCAN2_Send(char *_pBuffer, uint32_t _iSize) { return CAN_TX_FIFOQ(g_ptCAN2, _pBuffer, _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) { #ifdef USE_PRINT UART_RX_IRQHandler(g_ptUartCtrl); #else UART_RX_IRQHandler(g_ptrs485_2); #endif } else if (huart->Instance == UART4) { UART_RX_IRQHandler(g_ptInterCall); } else if (huart->Instance == UART5) { UART_RX_IRQHandler(g_ptSbus); } else if (huart->Instance == USART6) { UART_RX_IRQHandler(g_ptrs485_3); } else if (huart->Instance == UART7) { UART_RX_IRQHandler(g_ptrs485_4); } else if (huart->Instance == LPUART1) { UART_RX_IRQHandler(g_ptlpuart); } } #endif void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) { if (huart->Instance == USART1) //**RS485_1 { HAL_GPIO_WritePin(RS485_1_DIR_GPIO_Port, RS485_1_DIR_Pin, GPIO_PIN_RESET); } else if (huart->Instance == USART3) //**RS485_2 { HAL_GPIO_WritePin(RS485_2_DIR_GPIO_Port, RS485_2_DIR_Pin, GPIO_PIN_RESET); } else if (huart->Instance == USART6) //**RS485_3 { HAL_GPIO_WritePin(RS485_3_DIR_GPIO_Port, RS485_3_DIR_Pin, GPIO_PIN_RESET); } else if (huart->Instance == UART7) //**RS485_4 { HAL_GPIO_WritePin(RS485_4_DIR_GPIO_Port, RS485_4_DIR_Pin, GPIO_PIN_RESET); } } 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_ptCAN1); } else if (hfdcan->Instance == FDCAN2) { CAN_RX_IRQHandler(g_ptCAN2); } } void Read_MK32(void *argument) { char pcBuffer[52] = {0}; //char pcBuffer2[52] = {0}; while(1) { //__disable_irq(); rd_ComRead(g_ptSbus, pcBuffer, 25); //rd_ComRead(g_ptlpuart, pcBuffer2, 25); //__enable_irq(); //Rd_Delay(1); } } extern void MotorInit(void); extern int check_MK32(char *_pBuffer, uint32_t _iSize); extern void decode_MK32(const char *buf, uint32_t _iSize); extern int check_PV(char *_pBuffer, uint32_t _iSize); extern void decode_PV(const char *buf, uint32_t _iSize); void Send_PV(void *argument); void ground_manger_init(void); void Drv_InterfaceInit(void) { MsgCenter_Init(); // ground_manger_init(); // MotorInit(); // RBcore_Init(); TUartUserData *ptSbus = UART_userdata_init(5, -1, 512); g_ptSbus = rd_ComCreate(check_MK32, decode_MK32, E28_SBUS_Send, ptSbus->m_buf_size, ptSbus); UART_IT_init(g_ptSbus); const osThreadAttr_t MK32_Task_attributes = { .name = "Read_MK32", .stack_size = 2048, .priority = (osPriority_t) osPriorityHigh6, }; (void)osThreadNew(Read_MK32, NULL, &MK32_Task_attributes); // TUartUserData *ptUartUserData = UART_userdata_init(0, -1, 512); // g_ptlpuart = rd_ComCreate(check_PV, decode_PV, LPUART_PV_Send, ptUartUserData->m_buf_size, ptUartUserData); // UART_IT_init(g_ptlpuart); // // const osThreadAttr_t Send_PV_attributes = { // .name = "Send_PV", // .stack_size = 1024, // .priority = (osPriority_t) osPriorityHigh4, // }; // (void)osThreadNew(Send_PV, NULL, &Send_PV_attributes); }