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.

279 lines
8.0 KiB

2 months ago
/******************************************************************************
(C), 2018-2099, Radkil
******************************************************************************
: drv_interface.c
: 稿
: radkil
: 2026527
:
:
:
1. : 2026527
: radkil
:
******************************************************************************/
#include "BHBF.h"
2 months ago
#include "cmsis_os.h"
#include "FreeRTOS.h"
#include "msg_center.h"
2 months ago
/*----------------------------------------------*
* *
*----------------------------------------------*/
/*----------------------------------------------*
* *
*----------------------------------------------*/
extern TComCtrl *g_ptUartCtrl;
2 months ago
/*----------------------------------------------*
* *
*----------------------------------------------*/
/*----------------------------------------------*
* *
*----------------------------------------------*/
TComCtrl *g_ptrs485_1;
TComCtrl *g_ptrs485_2;
TComCtrl *g_ptrs485_3;
TComCtrl *g_ptrs485_4;
TComCtrl *g_ptlte_7S0;
TComCtrl *g_ptSbus;
2 months ago
TComCtrl *g_ptInterCall;
3 days ago
TComCtrl *g_ptlpuart;
2 months ago
TComCtrl *g_ptCAN1;
TComCtrl *g_ptCAN2;
2 months ago
/*----------------------------------------------*
* *
*----------------------------------------------*/
/*----------------------------------------------*
* *
*----------------------------------------------*/
/*----------------------------------------------*
* *
*----------------------------------------------*/
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;
2 months ago
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;
2 months ago
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;
2 months ago
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;
2 months ago
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;
2 months ago
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;
2 months ago
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;
}
3 days ago
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;
}
2 months ago
int FDCAN1_Send(char *_pBuffer, uint32_t _iSize)
{
return CAN_TX_FIFOQ(g_ptCAN1, _pBuffer, _iSize);
2 months ago
}
int FDCAN2_Send(char *_pBuffer, uint32_t _iSize)
{
return CAN_TX_FIFOQ(g_ptCAN2, _pBuffer, _iSize);
2 months ago
}
#ifndef CONFIG_UART_IT_IDLEDMA
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if (huart->Instance == USART1)
{
UART_RX_IRQHandler(g_ptrs485_1);
2 months ago
}
else if (huart->Instance == USART2)
{
UART_RX_IRQHandler(g_ptlte_7S0);
2 months ago
}
else if (huart->Instance == USART3)
{
#ifdef USE_PRINT
UART_RX_IRQHandler(g_ptUartCtrl);
#else
UART_RX_IRQHandler(g_ptrs485_2);
#endif
2 months ago
}
else if (huart->Instance == UART4)
{
UART_RX_IRQHandler(g_ptInterCall);
}
else if (huart->Instance == UART5)
{
UART_RX_IRQHandler(g_ptSbus);
2 months ago
}
else if (huart->Instance == USART6)
{
UART_RX_IRQHandler(g_ptrs485_3);
2 months ago
}
else if (huart->Instance == UART7)
{
UART_RX_IRQHandler(g_ptrs485_4);
2 months ago
}
3 days ago
else if (huart->Instance == LPUART1)
{
UART_RX_IRQHandler(g_ptlpuart);
}
2 months ago
}
#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);
}
}
2 months ago
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);
2 months ago
}
else if (hfdcan->Instance == FDCAN2)
{
CAN_RX_IRQHandler(g_ptCAN2);
2 months ago
}
}
3 days ago
void Read_MK32(void *argument)
2 months ago
{
char pcBuffer[52] = {0};
3 days ago
char pcBuffer2[52] = {0};
2 months ago
while(1)
{
__disable_irq();
rd_ComRead(g_ptSbus, pcBuffer, 25);
3 days ago
rd_ComRead(g_ptlpuart, pcBuffer2, 25);
2 months ago
__enable_irq();
2 months ago
Rd_Delay(1);
2 months ago
}
}
extern void MotorInit(void);
3 days ago
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);
2 months ago
void Drv_InterfaceInit(void)
{
MsgCenter_Init();
3 days ago
ground_manger_init();
MotorInit();
RBcore_Init();
3 days ago
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",
2 months ago
.stack_size = 512,
.priority = (osPriority_t) osPriorityHigh6,
2 months ago
};
3 days ago
(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 = 512,
.priority = (osPriority_t) osPriorityHigh4,
};
(void)osThreadNew(Send_PV, NULL, &Send_PV_attributes);
2 months ago
}