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.
245 lines
6.9 KiB
245 lines
6.9 KiB
|
6 days ago
|
/******************************************************************************
|
||
|
|
|
||
|
|
版权所有 (C), 2018-2099, Radkil
|
||
|
|
|
||
|
|
******************************************************************************
|
||
|
|
文 件 名 : drv_interface.c
|
||
|
|
版 本 号 : 初稿
|
||
|
|
作 者 : radkil
|
||
|
|
生成日期 : 2026年5月27日
|
||
|
|
最近修改 :
|
||
|
|
功能描述 : 对外接口层
|
||
|
|
|
||
|
|
修改历史 :
|
||
|
|
1.日 期 : 2026年5月27日
|
||
|
|
作 者 : radkil
|
||
|
|
修改内容 : 创建文件
|
||
|
|
|
||
|
|
******************************************************************************/
|
||
|
5 days ago
|
#include "BHBF_robot.h"
|
||
|
6 days ago
|
|
||
|
|
#include "cmsis_os.h"
|
||
|
|
#include "FreeRTOS.h"
|
||
|
|
#include "task.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)
|
||
|
|
{
|
||
|
5 days ago
|
return CAN_TX_FIFOQ(g_ptFDCAN1, _pBuffer[0], &_pBuffer[1], _iSize);
|
||
|
6 days ago
|
}
|
||
|
|
|
||
|
|
int FDCAN2_Send(char *_pBuffer, uint32_t _iSize)
|
||
|
|
{
|
||
|
5 days ago
|
return CAN_TX_FIFOQ(g_ptFDCAN2, _pBuffer[0], &_pBuffer[1], _iSize);
|
||
|
6 days ago
|
}
|
||
|
|
|
||
|
|
#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);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void Read_RS485_1(void *argument)
|
||
|
|
{
|
||
|
|
char pcBuffer[52] = {0};
|
||
|
|
|
||
|
|
while(1)
|
||
|
|
{
|
||
|
|
__disable_irq();
|
||
|
|
rd_ComRead(g_ptRS485_1, pcBuffer, 25);
|
||
|
|
__enable_irq();
|
||
|
5 days ago
|
Rd_Delay(1);
|
||
|
6 days ago
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void SendAll_Task(void *argument)
|
||
|
|
{
|
||
|
|
while(1)
|
||
|
|
{
|
||
|
|
rd_ComSendProc(g_ptRS485_1);
|
||
|
5 days ago
|
Rd_Delay(1);
|
||
|
6 days ago
|
rd_ComSendProc(g_ptRS485_2);
|
||
|
5 days ago
|
Rd_Delay(1);
|
||
|
6 days ago
|
rd_ComSendProc(g_ptRS485_3);
|
||
|
5 days ago
|
Rd_Delay(1);
|
||
|
6 days ago
|
rd_ComSendProc(g_ptRS485_4);
|
||
|
5 days ago
|
Rd_Delay(1);
|
||
|
6 days ago
|
rd_ComSendProc(g_ptLTE_7S0);
|
||
|
5 days ago
|
Rd_Delay(1);
|
||
|
6 days ago
|
rd_ComSendProc(g_ptE28_SBUS);
|
||
|
5 days ago
|
Rd_Delay(1);
|
||
|
6 days ago
|
rd_ComSendProc(g_ptInterCall);
|
||
|
5 days ago
|
Rd_Delay(1);
|
||
|
6 days ago
|
rd_ComSendProc(g_ptFDCAN1);
|
||
|
5 days ago
|
Rd_Delay(1);
|
||
|
6 days ago
|
rd_ComSendProc(g_ptFDCAN2);
|
||
|
5 days ago
|
Rd_Delay(1);
|
||
|
6 days ago
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void Drv_InterfaceInit(void)
|
||
|
|
{
|
||
|
|
MK32_Init();
|
||
|
|
|
||
|
|
const osThreadAttr_t Read_RS485_1_attributes = {
|
||
|
|
.name = "RS485_1",
|
||
|
|
.stack_size = 512,
|
||
|
|
.priority = (osPriority_t) osPriorityHigh7,
|
||
|
|
};
|
||
|
|
(void)osThreadNew(Read_RS485_1, NULL, &Read_RS485_1_attributes);
|
||
|
|
|
||
|
|
const osThreadAttr_t send_task_attributes = {
|
||
|
|
.name = "send_task",
|
||
|
|
.stack_size = 512,
|
||
|
|
.priority = (osPriority_t) osPriorityRealtime,
|
||
|
|
};
|
||
|
|
(void)osThreadNew(SendAll_Task, NULL, &send_task_attributes);
|
||
|
5 days ago
|
|
||
|
|
MoveWheel_Init();
|
||
|
6 days ago
|
}
|