You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
278 lines
8.1 KiB
278 lines
8.1 KiB
/******************************************************************************
|
|
|
|
版权所有 (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);
|
|
}
|
|
|