3 changed files with 190 additions and 38 deletions
@ -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); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
Loading…
Reference in new issue