1028 lines
43 KiB
C
1028 lines
43 KiB
C
#include "McuBspUart.h"
|
|
|
|
static UART_HandleTypeDef gUartHandle1;
|
|
static UART_HandleTypeDef gUartHandle2;
|
|
static UART_HandleTypeDef gUartHandle3;
|
|
static UART_HandleTypeDef gUartHandle4;
|
|
static UART_HandleTypeDef gUartHandle5;
|
|
|
|
static uint8_t gRecvData1;
|
|
static uint8_t gRecvData2;
|
|
static uint8_t gRecvData3;
|
|
static uint8_t gRecvData4;
|
|
static uint8_t gRecvData5;
|
|
|
|
static uint8_t gUart1UseFlag = 0;
|
|
static uint8_t gUart2UseFlag = 0;
|
|
static uint8_t gUart3UseFlag = 0;
|
|
static uint8_t gUart4UseFlag = 0;
|
|
static uint8_t gUart5UseFlag = 0;
|
|
|
|
static UART_SEND_CALLBACK gSendCallback1 = NULL;
|
|
static UART_RECV_CALLBACK gRecvCallback1 = NULL;
|
|
static UART_SEND_CALLBACK gSendCallback2 = NULL;
|
|
static UART_RECV_CALLBACK gRecvCallback2 = NULL;
|
|
static UART_SEND_CALLBACK gSendCallback3 = NULL;
|
|
static UART_RECV_CALLBACK gRecvCallback3 = NULL;
|
|
static UART_SEND_CALLBACK gSendCallback4 = NULL;
|
|
static UART_RECV_CALLBACK gRecvCallback4 = NULL;
|
|
static UART_SEND_CALLBACK gSendCallback5 = NULL;
|
|
static UART_RECV_CALLBACK gRecvCallback5 = NULL;
|
|
|
|
/* 串口初始化 */
|
|
int McuBspUartInit(uint8_t UartId, MCU_BSP_UART_CONF *conf, UART_SEND_CALLBACK SendCallback,
|
|
UART_RECV_CALLBACK RecvCallback)
|
|
{
|
|
if (UartId == MCU_BSP_UART1_ID) {
|
|
if (MCU_BSP_UART1_USE_FLAG == 0) {
|
|
return -1;
|
|
}
|
|
if (gUart1UseFlag == 1) {
|
|
return 0;
|
|
}
|
|
gUartHandle1.Instance = USART1;
|
|
if (conf == NULL) {
|
|
gUartHandle1.Init.BaudRate = MCU_BSP_UART1_BAUDRATE;
|
|
gUartHandle1.Init.WordLength = MCU_BSP_UART1_WORDLENGTH;
|
|
gUartHandle1.Init.StopBits = MCU_BSP_UART1_STOPBITS;
|
|
gUartHandle1.Init.Parity = MCU_BSP_UART1_PARITY;
|
|
gUartHandle1.Init.Mode = MCU_BSP_UART1_MODE;
|
|
} else {
|
|
gUartHandle1.Init.BaudRate = conf->BaudRate;
|
|
gUartHandle1.Init.WordLength = conf->WordLength;
|
|
gUartHandle1.Init.StopBits = conf->StopBits;
|
|
gUartHandle1.Init.Parity = conf->Parity;
|
|
gUartHandle1.Init.Mode = conf->Mode;
|
|
}
|
|
gUartHandle1.Init.HwFlowCtl = MCU_BSP_UART1_HWFLOWCTL;
|
|
if(HAL_UART_DeInit(&gUartHandle1) != HAL_OK) {
|
|
return -1;
|
|
}
|
|
if(HAL_UART_Init(&gUartHandle1) != HAL_OK) {
|
|
return -1;
|
|
}
|
|
gSendCallback1 = SendCallback;
|
|
gRecvCallback1 = RecvCallback;
|
|
gUart1UseFlag = 1;
|
|
} else if (UartId == MCU_BSP_UART2_ID) {
|
|
if (MCU_BSP_UART2_USE_FLAG == 0) {
|
|
return -1;
|
|
}
|
|
if (gUart2UseFlag == 1) {
|
|
return 0;
|
|
}
|
|
gUartHandle2.Instance = USART2;
|
|
if (conf == NULL) {
|
|
gUartHandle2.Init.BaudRate = MCU_BSP_UART2_BAUDRATE;
|
|
gUartHandle2.Init.WordLength = MCU_BSP_UART2_WORDLENGTH;
|
|
gUartHandle2.Init.StopBits = MCU_BSP_UART2_STOPBITS;
|
|
gUartHandle2.Init.Parity = MCU_BSP_UART2_PARITY;
|
|
gUartHandle2.Init.Mode = MCU_BSP_UART2_MODE;
|
|
} else {
|
|
gUartHandle2.Init.BaudRate = conf->BaudRate;
|
|
gUartHandle2.Init.WordLength = conf->WordLength;
|
|
gUartHandle2.Init.StopBits = conf->StopBits;
|
|
gUartHandle2.Init.Parity = conf->Parity;
|
|
gUartHandle2.Init.Mode = conf->Mode;
|
|
}
|
|
gUartHandle2.Init.HwFlowCtl = MCU_BSP_UART2_HWFLOWCTL;
|
|
if(HAL_UART_DeInit(&gUartHandle2) != HAL_OK) {
|
|
return -1;
|
|
}
|
|
if(HAL_UART_Init(&gUartHandle2) != HAL_OK) {
|
|
return -1;
|
|
}
|
|
gSendCallback2 = SendCallback;
|
|
gRecvCallback2 = RecvCallback;
|
|
gUart2UseFlag = 1;
|
|
} else if (UartId == MCU_BSP_UART3_ID) {
|
|
if (MCU_BSP_UART3_USE_FLAG == 0) {
|
|
return -1;
|
|
}
|
|
if (gUart3UseFlag == 1) {
|
|
return 0;
|
|
}
|
|
gUartHandle3.Instance = USART3;
|
|
if (conf == NULL) {
|
|
gUartHandle3.Init.BaudRate = MCU_BSP_UART3_BAUDRATE;
|
|
gUartHandle3.Init.WordLength = MCU_BSP_UART3_WORDLENGTH;
|
|
gUartHandle3.Init.StopBits = MCU_BSP_UART3_STOPBITS;
|
|
gUartHandle3.Init.Parity = MCU_BSP_UART3_PARITY;
|
|
gUartHandle3.Init.Mode = MCU_BSP_UART3_MODE;
|
|
} else {
|
|
gUartHandle3.Init.BaudRate = conf->BaudRate;
|
|
gUartHandle3.Init.WordLength = conf->WordLength;
|
|
gUartHandle3.Init.StopBits = conf->StopBits;
|
|
gUartHandle3.Init.Parity = conf->Parity;
|
|
gUartHandle3.Init.Mode = conf->Mode;
|
|
}
|
|
gUartHandle3.Init.HwFlowCtl = MCU_BSP_UART3_HWFLOWCTL;
|
|
if(HAL_UART_DeInit(&gUartHandle3) != HAL_OK) {
|
|
return -1;
|
|
}
|
|
if(HAL_UART_Init(&gUartHandle3) != HAL_OK) {
|
|
return -1;
|
|
}
|
|
gSendCallback3 = SendCallback;
|
|
gRecvCallback3 = RecvCallback;
|
|
gUart3UseFlag = 1;
|
|
} else if (UartId == MCU_BSP_UART4_ID) {
|
|
if (MCU_BSP_UART4_USE_FLAG == 0) {
|
|
return -1;
|
|
}
|
|
if (gUart4UseFlag == 1) {
|
|
return 0;
|
|
}
|
|
gUartHandle4.Instance = UART4;
|
|
if (conf == NULL) {
|
|
gUartHandle4.Init.BaudRate = MCU_BSP_UART4_BAUDRATE;
|
|
gUartHandle4.Init.WordLength = MCU_BSP_UART4_WORDLENGTH;
|
|
gUartHandle4.Init.StopBits = MCU_BSP_UART4_STOPBITS;
|
|
gUartHandle4.Init.Parity = MCU_BSP_UART4_PARITY;
|
|
gUartHandle4.Init.Mode = MCU_BSP_UART4_MODE;
|
|
} else {
|
|
gUartHandle4.Init.BaudRate = conf->BaudRate;
|
|
gUartHandle4.Init.WordLength = conf->WordLength;
|
|
gUartHandle4.Init.StopBits = conf->StopBits;
|
|
gUartHandle4.Init.Parity = conf->Parity;
|
|
gUartHandle4.Init.Mode = conf->Mode;
|
|
}
|
|
gUartHandle4.Init.HwFlowCtl = MCU_BSP_UART4_HWFLOWCTL;
|
|
if(HAL_UART_DeInit(&gUartHandle4) != HAL_OK) {
|
|
return -1;
|
|
}
|
|
if(HAL_UART_Init(&gUartHandle4) != HAL_OK) {
|
|
return -1;
|
|
}
|
|
gSendCallback4 = SendCallback;
|
|
gRecvCallback4 = RecvCallback;
|
|
gUart4UseFlag = 1;
|
|
} else if (UartId == MCU_BSP_UART5_ID) {
|
|
if (MCU_BSP_UART5_USE_FLAG == 0) {
|
|
return -1;
|
|
}
|
|
if (gUart5UseFlag == 1) {
|
|
return 0;
|
|
}
|
|
gUartHandle5.Instance = UART5;
|
|
if (conf == NULL) {
|
|
gUartHandle5.Init.BaudRate = MCU_BSP_UART5_BAUDRATE;
|
|
gUartHandle5.Init.WordLength = MCU_BSP_UART5_WORDLENGTH;
|
|
gUartHandle5.Init.StopBits = MCU_BSP_UART5_STOPBITS;
|
|
gUartHandle5.Init.Parity = MCU_BSP_UART5_PARITY;
|
|
gUartHandle5.Init.Mode = MCU_BSP_UART5_MODE;
|
|
} else {
|
|
gUartHandle5.Init.BaudRate = conf->BaudRate;
|
|
gUartHandle5.Init.WordLength = conf->WordLength;
|
|
gUartHandle5.Init.StopBits = conf->StopBits;
|
|
gUartHandle5.Init.Parity = conf->Parity;
|
|
gUartHandle5.Init.Mode = conf->Mode;
|
|
}
|
|
gUartHandle5.Init.HwFlowCtl = MCU_BSP_UART5_HWFLOWCTL;
|
|
if(HAL_UART_DeInit(&gUartHandle5) != HAL_OK) {
|
|
return -1;
|
|
}
|
|
if(HAL_UART_Init(&gUartHandle5) != HAL_OK) {
|
|
return -1;
|
|
}
|
|
gSendCallback5 = SendCallback;
|
|
gRecvCallback5 = RecvCallback;
|
|
gUart5UseFlag = 1;
|
|
} else {
|
|
return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 串口反初始化 */
|
|
int McuBspUartDeInit(uint8_t UartId)
|
|
{
|
|
if (UartId == MCU_BSP_UART1_ID) {
|
|
if (MCU_BSP_UART1_USE_FLAG == 0) {
|
|
return -1;
|
|
}
|
|
if (gUart1UseFlag == 0) {
|
|
return 0;
|
|
}
|
|
if(HAL_UART_DeInit(&gUartHandle1) != HAL_OK) {
|
|
return -1;
|
|
}
|
|
gUart1UseFlag = 0;
|
|
} else if (UartId == MCU_BSP_UART2_ID) {
|
|
if (MCU_BSP_UART2_USE_FLAG == 0) {
|
|
return -1;
|
|
}
|
|
if (gUart2UseFlag == 0) {
|
|
return 0;
|
|
}
|
|
if(HAL_UART_DeInit(&gUartHandle2) != HAL_OK) {
|
|
return -1;
|
|
}
|
|
gUart2UseFlag = 0;
|
|
} else if (UartId == MCU_BSP_UART3_ID) {
|
|
if (MCU_BSP_UART3_USE_FLAG == 0) {
|
|
return -1;
|
|
}
|
|
if (gUart3UseFlag == 0) {
|
|
return 0;
|
|
}
|
|
if(HAL_UART_DeInit(&gUartHandle3) != HAL_OK) {
|
|
return -1;
|
|
}
|
|
gUart3UseFlag = 0;
|
|
} else if (UartId == MCU_BSP_UART4_ID) {
|
|
if (MCU_BSP_UART4_USE_FLAG == 0) {
|
|
return -1;
|
|
}
|
|
if (gUart4UseFlag == 0) {
|
|
return 0;
|
|
}
|
|
if(HAL_UART_DeInit(&gUartHandle4) != HAL_OK) {
|
|
return -1;
|
|
}
|
|
gUart4UseFlag = 0;
|
|
} else if (UartId == MCU_BSP_UART5_ID) {
|
|
if (MCU_BSP_UART5_USE_FLAG == 0) {
|
|
return -1;
|
|
}
|
|
if (gUart5UseFlag == 0) {
|
|
return 0;
|
|
}
|
|
if(HAL_UART_DeInit(&gUartHandle5) != HAL_OK) {
|
|
return -1;
|
|
}
|
|
gUart5UseFlag = 0;
|
|
} else {
|
|
return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 串口发送 */
|
|
int McuBspUartSend(uint8_t UartId, uint8_t* tbuf, uint16_t tbuflen)
|
|
{
|
|
if (UartId == MCU_BSP_UART1_ID) {
|
|
if (MCU_BSP_UART1_USE_FLAG == 0) {
|
|
return -1;
|
|
}
|
|
if (MCU_BSP_UART1_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
HAL_GPIO_WritePin(MCU_BSP_UART1_RS485_CTRL_GPIO_PORT, MCU_BSP_UART1_RS485_CTRL_GPIO_PIN, GPIO_PIN_SET);
|
|
}
|
|
/* 等待串口闲置 */
|
|
while (gUartHandle1.gState != HAL_UART_STATE_READY) {
|
|
|
|
}
|
|
HAL_UART_Transmit_IT(&gUartHandle1, tbuf, tbuflen);
|
|
/* 等待发送完成 */
|
|
while (gUartHandle1.gState != HAL_UART_STATE_READY) {
|
|
|
|
}
|
|
if (MCU_BSP_UART1_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
HAL_GPIO_WritePin(MCU_BSP_UART1_RS485_CTRL_GPIO_PORT, MCU_BSP_UART1_RS485_CTRL_GPIO_PIN, GPIO_PIN_RESET);
|
|
}
|
|
} else if (UartId == MCU_BSP_UART2_ID) {
|
|
if (MCU_BSP_UART2_USE_FLAG == 0) {
|
|
return -1;
|
|
}
|
|
if (MCU_BSP_UART2_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
HAL_GPIO_WritePin(MCU_BSP_UART2_RS485_CTRL_GPIO_PORT, MCU_BSP_UART2_RS485_CTRL_GPIO_PIN, GPIO_PIN_SET);
|
|
}
|
|
/* 等待串口闲置 */
|
|
while (gUartHandle2.gState != HAL_UART_STATE_READY) {
|
|
|
|
}
|
|
HAL_UART_Transmit_IT(&gUartHandle2, tbuf, tbuflen);
|
|
/* 等待发送完成 */
|
|
while (gUartHandle2.gState != HAL_UART_STATE_READY) {
|
|
|
|
}
|
|
if (MCU_BSP_UART2_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
HAL_GPIO_WritePin(MCU_BSP_UART2_RS485_CTRL_GPIO_PORT, MCU_BSP_UART2_RS485_CTRL_GPIO_PIN, GPIO_PIN_RESET);
|
|
}
|
|
} else if (UartId == MCU_BSP_UART3_ID) {
|
|
if (MCU_BSP_UART3_USE_FLAG == 0) {
|
|
return -1;
|
|
}
|
|
if (MCU_BSP_UART3_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
HAL_GPIO_WritePin(MCU_BSP_UART3_RS485_CTRL_GPIO_PORT, MCU_BSP_UART3_RS485_CTRL_GPIO_PIN, GPIO_PIN_SET);
|
|
}
|
|
/* 等待串口闲置 */
|
|
while (gUartHandle3.gState != HAL_UART_STATE_READY) {
|
|
|
|
}
|
|
HAL_UART_Transmit_IT(&gUartHandle3, tbuf, tbuflen);
|
|
/* 等待发送完成 */
|
|
while (gUartHandle3.gState != HAL_UART_STATE_READY) {
|
|
|
|
}
|
|
if (MCU_BSP_UART3_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
HAL_GPIO_WritePin(MCU_BSP_UART3_RS485_CTRL_GPIO_PORT, MCU_BSP_UART3_RS485_CTRL_GPIO_PIN, GPIO_PIN_RESET);
|
|
}
|
|
} else if (UartId == MCU_BSP_UART4_ID) {
|
|
if (MCU_BSP_UART4_USE_FLAG == 0) {
|
|
return -1;
|
|
}
|
|
if (MCU_BSP_UART4_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
HAL_GPIO_WritePin(MCU_BSP_UART4_RS485_CTRL_GPIO_PORT, MCU_BSP_UART4_RS485_CTRL_GPIO_PIN, GPIO_PIN_SET);
|
|
}
|
|
/* 等待串口闲置 */
|
|
while (gUartHandle4.gState != HAL_UART_STATE_READY) {
|
|
|
|
}
|
|
HAL_UART_Transmit_IT(&gUartHandle4, tbuf, tbuflen);
|
|
/* 等待发送完成 */
|
|
while (gUartHandle4.gState != HAL_UART_STATE_READY) {
|
|
|
|
}
|
|
if (MCU_BSP_UART4_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
HAL_GPIO_WritePin(MCU_BSP_UART4_RS485_CTRL_GPIO_PORT, MCU_BSP_UART4_RS485_CTRL_GPIO_PIN, GPIO_PIN_RESET);
|
|
}
|
|
} else if (UartId == MCU_BSP_UART5_ID) {
|
|
if (MCU_BSP_UART5_USE_FLAG == 0) {
|
|
return -1;
|
|
}
|
|
if (MCU_BSP_UART5_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
HAL_GPIO_WritePin(MCU_BSP_UART5_RS485_CTRL_GPIO_PORT, MCU_BSP_UART5_RS485_CTRL_GPIO_PIN, GPIO_PIN_SET);
|
|
}
|
|
/* 等待串口闲置 */
|
|
while (gUartHandle5.gState != HAL_UART_STATE_READY) {
|
|
|
|
}
|
|
HAL_UART_Transmit_IT(&gUartHandle5, tbuf, tbuflen);
|
|
/* 等待发送完成 */
|
|
while (gUartHandle5.gState != HAL_UART_STATE_READY) {
|
|
|
|
}
|
|
if (MCU_BSP_UART5_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
HAL_GPIO_WritePin(MCU_BSP_UART5_RS485_CTRL_GPIO_PORT, MCU_BSP_UART5_RS485_CTRL_GPIO_PIN, GPIO_PIN_RESET);
|
|
}
|
|
} else {
|
|
return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 串口开启接收 */
|
|
void McuBspUartStartRecv(uint8_t UartId)
|
|
{
|
|
if (UartId == MCU_BSP_UART1_ID) {
|
|
if (MCU_BSP_UART1_USE_FLAG == 0) {
|
|
return;
|
|
}
|
|
HAL_UART_Receive_IT(&gUartHandle1, &gRecvData1, 1);
|
|
} else if (UartId == MCU_BSP_UART2_ID) {
|
|
if (MCU_BSP_UART2_USE_FLAG == 0) {
|
|
return;
|
|
}
|
|
HAL_UART_Receive_IT(&gUartHandle2, &gRecvData2, 1);
|
|
} else if (UartId == MCU_BSP_UART3_ID) {
|
|
if (MCU_BSP_UART3_USE_FLAG == 0) {
|
|
return;
|
|
}
|
|
HAL_UART_Receive_IT(&gUartHandle3, &gRecvData3, 1);
|
|
} else if (UartId == MCU_BSP_UART4_ID) {
|
|
if (MCU_BSP_UART4_USE_FLAG == 0) {
|
|
return;
|
|
}
|
|
HAL_UART_Receive_IT(&gUartHandle4, &gRecvData4, 1);
|
|
} else if (UartId == MCU_BSP_UART5_ID) {
|
|
if (MCU_BSP_UART5_USE_FLAG == 0) {
|
|
return;
|
|
}
|
|
HAL_UART_Receive_IT(&gUartHandle5, &gRecvData5, 1);
|
|
}
|
|
}
|
|
|
|
/* uart sleep */
|
|
void McuBspUartSleep(void)
|
|
{
|
|
GPIO_InitTypeDef GPIO_InitStruct;
|
|
if (MCU_BSP_UART1_USE_FLAG == 1) {
|
|
if (gUart1UseFlag == 1) {
|
|
__HAL_UART_DISABLE(&gUartHandle1);
|
|
__HAL_RCC_USART1_CLK_DISABLE();
|
|
}
|
|
HAL_NVIC_DisableIRQ(MCU_BSP_UART1_IRQn);
|
|
MCU_BSP_UART1_TX_GPIO_CLK();
|
|
MCU_BSP_UART1_RX_GPIO_CLK();
|
|
/* 初始化发送引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART1_TX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
|
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
HAL_GPIO_Init(MCU_BSP_UART1_TX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化接收引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART1_RX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
|
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
HAL_GPIO_Init(MCU_BSP_UART1_RX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化485控制引脚 */
|
|
if (MCU_BSP_UART1_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
MCU_BSP_UART1_RS485_CTRL_GPIO_CLK();
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART1_RS485_CTRL_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
HAL_GPIO_Init(MCU_BSP_UART1_RS485_CTRL_GPIO_PORT, &GPIO_InitStruct);
|
|
}
|
|
}
|
|
if (MCU_BSP_UART2_USE_FLAG == 1) {
|
|
if (gUart2UseFlag == 1) {
|
|
__HAL_UART_DISABLE(&gUartHandle2);
|
|
__HAL_RCC_USART2_CLK_DISABLE();
|
|
}
|
|
HAL_NVIC_DisableIRQ(MCU_BSP_UART2_IRQn);
|
|
MCU_BSP_UART2_TX_GPIO_CLK();
|
|
MCU_BSP_UART2_RX_GPIO_CLK();
|
|
/* 初始化发送引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART2_TX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
|
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
HAL_GPIO_Init(MCU_BSP_UART2_TX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化接收引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART2_RX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
|
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
HAL_GPIO_Init(MCU_BSP_UART2_RX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化485控制引脚 */
|
|
if (MCU_BSP_UART2_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
MCU_BSP_UART2_RS485_CTRL_GPIO_CLK();
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART2_RS485_CTRL_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
HAL_GPIO_Init(MCU_BSP_UART2_RS485_CTRL_GPIO_PORT, &GPIO_InitStruct);
|
|
}
|
|
}
|
|
if (MCU_BSP_UART3_USE_FLAG == 1) {
|
|
if (gUart3UseFlag == 1) {
|
|
__HAL_UART_DISABLE(&gUartHandle3);
|
|
__HAL_RCC_USART3_CLK_DISABLE();
|
|
}
|
|
HAL_NVIC_DisableIRQ(MCU_BSP_UART3_IRQn);
|
|
MCU_BSP_UART3_TX_GPIO_CLK();
|
|
MCU_BSP_UART3_RX_GPIO_CLK();
|
|
/* 初始化发送引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART3_TX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
|
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
HAL_GPIO_Init(MCU_BSP_UART3_TX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化接收引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART3_RX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
|
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
HAL_GPIO_Init(MCU_BSP_UART3_RX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化485控制引脚 */
|
|
if (MCU_BSP_UART3_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
MCU_BSP_UART3_RS485_CTRL_GPIO_CLK();
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART3_RS485_CTRL_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
|
|
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
HAL_GPIO_Init(MCU_BSP_UART3_RS485_CTRL_GPIO_PORT, &GPIO_InitStruct);
|
|
}
|
|
}
|
|
if (MCU_BSP_UART4_USE_FLAG == 1) {
|
|
if (gUart4UseFlag == 1) {
|
|
__HAL_UART_DISABLE(&gUartHandle4);
|
|
__HAL_RCC_UART4_CLK_DISABLE();
|
|
}
|
|
HAL_NVIC_DisableIRQ(MCU_BSP_UART4_IRQn);
|
|
MCU_BSP_UART4_TX_GPIO_CLK();
|
|
MCU_BSP_UART4_RX_GPIO_CLK();
|
|
/* 初始化发送引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART4_TX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
|
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
HAL_GPIO_Init(MCU_BSP_UART4_TX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化接收引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART4_RX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
|
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
HAL_GPIO_Init(MCU_BSP_UART4_RX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化485控制引脚 */
|
|
if (MCU_BSP_UART4_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
MCU_BSP_UART4_RS485_CTRL_GPIO_CLK();
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART4_RS485_CTRL_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
HAL_GPIO_Init(MCU_BSP_UART4_RS485_CTRL_GPIO_PORT, &GPIO_InitStruct);
|
|
}
|
|
}
|
|
if (MCU_BSP_UART5_USE_FLAG == 1) {
|
|
if (gUart5UseFlag == 1) {
|
|
__HAL_UART_DISABLE(&gUartHandle5);
|
|
__HAL_RCC_UART5_CLK_DISABLE();
|
|
}
|
|
HAL_NVIC_DisableIRQ(MCU_BSP_UART5_IRQn);
|
|
MCU_BSP_UART5_TX_GPIO_CLK();
|
|
MCU_BSP_UART5_RX_GPIO_CLK();
|
|
/* 初始化发送引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART5_TX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
|
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
HAL_GPIO_Init(MCU_BSP_UART5_TX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化接收引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART5_RX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
|
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
HAL_GPIO_Init(MCU_BSP_UART5_RX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化485控制引脚 */
|
|
if (MCU_BSP_UART5_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
MCU_BSP_UART5_RS485_CTRL_GPIO_CLK();
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART5_RS485_CTRL_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
HAL_GPIO_Init(MCU_BSP_UART5_RS485_CTRL_GPIO_PORT, &GPIO_InitStruct);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* uart wakeup */
|
|
void McuBspUart1WakeUp(void)
|
|
{
|
|
GPIO_InitTypeDef GPIO_InitStruct;
|
|
if (gUart1UseFlag == 1) {
|
|
MCU_BSP_UART1_CLK_ENABLE();
|
|
MCU_BSP_UART1_TX_GPIO_CLK();
|
|
MCU_BSP_UART1_RX_GPIO_CLK();
|
|
/* 初始化发送引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART1_TX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART1_TX_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART1_TX_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART1_TX_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART1_TX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化接收引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART1_RX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART1_RX_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART1_RX_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART1_RX_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART1_RX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化485控制引脚 */
|
|
if (MCU_BSP_UART1_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
MCU_BSP_UART1_RS485_CTRL_GPIO_CLK();
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART1_RS485_CTRL_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART1_RS485_CTRL_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART1_RS485_CTRL_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART1_RS485_CTRL_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART1_RS485_CTRL_GPIO_PORT, &GPIO_InitStruct);
|
|
// 默认为接收态
|
|
HAL_GPIO_WritePin(MCU_BSP_UART1_RS485_CTRL_GPIO_PORT, MCU_BSP_UART1_RS485_CTRL_GPIO_PIN, GPIO_PIN_RESET);
|
|
}
|
|
HAL_NVIC_EnableIRQ(MCU_BSP_UART1_IRQn);
|
|
__HAL_UART_ENABLE(&gUartHandle1);
|
|
}
|
|
}
|
|
|
|
/* uart wakeup */
|
|
void McuBspUart2WakeUp(void)
|
|
{
|
|
GPIO_InitTypeDef GPIO_InitStruct;
|
|
if (gUart2UseFlag == 1) {
|
|
MCU_BSP_UART2_CLK_ENABLE();
|
|
MCU_BSP_UART2_TX_GPIO_CLK();
|
|
MCU_BSP_UART2_RX_GPIO_CLK();
|
|
/* 初始化发送引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART2_TX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART2_TX_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART2_TX_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART2_TX_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART2_TX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化接收引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART2_RX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART2_RX_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART2_RX_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART2_RX_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART2_RX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化485控制引脚 */
|
|
if (MCU_BSP_UART2_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
MCU_BSP_UART2_RS485_CTRL_GPIO_CLK();
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART2_RS485_CTRL_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART2_RS485_CTRL_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART2_RS485_CTRL_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART2_RS485_CTRL_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART2_RS485_CTRL_GPIO_PORT, &GPIO_InitStruct);
|
|
// 默认为接收态
|
|
HAL_GPIO_WritePin(MCU_BSP_UART2_RS485_CTRL_GPIO_PORT, MCU_BSP_UART2_RS485_CTRL_GPIO_PIN, GPIO_PIN_RESET);
|
|
}
|
|
HAL_NVIC_EnableIRQ(MCU_BSP_UART2_IRQn);
|
|
__HAL_UART_ENABLE(&gUartHandle2);
|
|
}
|
|
}
|
|
|
|
/* uart wakeup */
|
|
void McuBspUart3WakeUp(void)
|
|
{
|
|
GPIO_InitTypeDef GPIO_InitStruct;
|
|
if (gUart3UseFlag == 1) {
|
|
MCU_BSP_UART3_CLK_ENABLE();
|
|
MCU_BSP_UART3_TX_GPIO_CLK();
|
|
MCU_BSP_UART3_RX_GPIO_CLK();
|
|
/* 初始化发送引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART3_TX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART3_TX_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART3_TX_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART3_TX_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART3_TX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化接收引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART3_RX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART3_RX_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART3_RX_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART3_RX_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART3_RX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化485控制引脚 */
|
|
if (MCU_BSP_UART3_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
MCU_BSP_UART3_RS485_CTRL_GPIO_CLK();
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART3_RS485_CTRL_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART3_RS485_CTRL_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART3_RS485_CTRL_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART3_RS485_CTRL_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART3_RS485_CTRL_GPIO_PORT, &GPIO_InitStruct);
|
|
// 默认为接收态
|
|
HAL_GPIO_WritePin(MCU_BSP_UART3_RS485_CTRL_GPIO_PORT, MCU_BSP_UART3_RS485_CTRL_GPIO_PIN, GPIO_PIN_RESET);
|
|
}
|
|
HAL_NVIC_EnableIRQ(MCU_BSP_UART3_IRQn);
|
|
__HAL_UART_ENABLE(&gUartHandle3);
|
|
}
|
|
}
|
|
|
|
/* uart wakeup */
|
|
void McuBspUart4WakeUp(void)
|
|
{
|
|
GPIO_InitTypeDef GPIO_InitStruct;
|
|
if (gUart4UseFlag == 1) {
|
|
MCU_BSP_UART4_CLK_ENABLE();
|
|
MCU_BSP_UART4_TX_GPIO_CLK();
|
|
MCU_BSP_UART4_RX_GPIO_CLK();
|
|
/* 初始化发送引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART4_TX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART4_TX_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART4_TX_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART4_TX_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART4_TX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化接收引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART4_RX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART4_RX_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART4_RX_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART4_RX_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART4_RX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化485控制引脚 */
|
|
if (MCU_BSP_UART4_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
MCU_BSP_UART4_RS485_CTRL_GPIO_CLK();
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART4_RS485_CTRL_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART4_RS485_CTRL_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART4_RS485_CTRL_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART4_RS485_CTRL_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART4_RS485_CTRL_GPIO_PORT, &GPIO_InitStruct);
|
|
// 默认为接收态
|
|
HAL_GPIO_WritePin(MCU_BSP_UART4_RS485_CTRL_GPIO_PORT, MCU_BSP_UART4_RS485_CTRL_GPIO_PIN, GPIO_PIN_RESET);
|
|
}
|
|
HAL_NVIC_EnableIRQ(MCU_BSP_UART4_IRQn);
|
|
__HAL_UART_ENABLE(&gUartHandle4);
|
|
}
|
|
}
|
|
|
|
/* uart wakeup */
|
|
void McuBspUart5WakeUp(void)
|
|
{
|
|
GPIO_InitTypeDef GPIO_InitStruct;
|
|
if (gUart5UseFlag == 1) {
|
|
MCU_BSP_UART5_CLK_ENABLE();
|
|
MCU_BSP_UART5_TX_GPIO_CLK();
|
|
MCU_BSP_UART5_RX_GPIO_CLK();
|
|
/* 初始化发送引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART5_TX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART5_TX_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART5_TX_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART5_TX_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART5_TX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化接收引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART5_RX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART5_RX_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART5_RX_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART5_RX_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART5_RX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化485控制引脚 */
|
|
if (MCU_BSP_UART5_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
MCU_BSP_UART5_RS485_CTRL_GPIO_CLK();
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART5_RS485_CTRL_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART5_RS485_CTRL_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART5_RS485_CTRL_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART5_RS485_CTRL_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART5_RS485_CTRL_GPIO_PORT, &GPIO_InitStruct);
|
|
// 默认为接收态
|
|
HAL_GPIO_WritePin(MCU_BSP_UART5_RS485_CTRL_GPIO_PORT, MCU_BSP_UART5_RS485_CTRL_GPIO_PIN, GPIO_PIN_RESET);
|
|
}
|
|
HAL_NVIC_EnableIRQ(MCU_BSP_UART5_IRQn);
|
|
__HAL_UART_ENABLE(&gUartHandle5);
|
|
}
|
|
}
|
|
|
|
|
|
/* 串口发送完成回调函数 */
|
|
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *UartHandle)
|
|
{
|
|
if (UartHandle->Instance == USART1) {
|
|
if (gSendCallback1 != NULL) {
|
|
gSendCallback1();
|
|
}
|
|
} else if (UartHandle->Instance == USART2) {
|
|
if (gSendCallback2 != NULL) {
|
|
gSendCallback2();
|
|
}
|
|
} else if (UartHandle->Instance == USART3) {
|
|
if (gSendCallback3 != NULL) {
|
|
gSendCallback3();
|
|
}
|
|
} else if (UartHandle->Instance == UART4) {
|
|
if (gSendCallback4 != NULL) {
|
|
gSendCallback4();
|
|
}
|
|
} else if (UartHandle->Instance == UART5) {
|
|
if (gSendCallback5 != NULL) {
|
|
gSendCallback5();
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 串口接收完成的回调函数 */
|
|
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
|
|
{
|
|
if (UartHandle->Instance == USART1) {
|
|
if (gRecvCallback1 != NULL) {
|
|
gRecvCallback1(gRecvData1);
|
|
}
|
|
HAL_UART_Receive_IT(&gUartHandle1, &gRecvData1, 1);
|
|
} else if (UartHandle->Instance == USART2) {
|
|
if (gRecvCallback2 != NULL) {
|
|
gRecvCallback2(gRecvData2);
|
|
}
|
|
HAL_UART_Receive_IT(&gUartHandle2, &gRecvData2, 1);
|
|
} else if (UartHandle->Instance == USART3) {
|
|
if (gRecvCallback3 != NULL) {
|
|
gRecvCallback3(gRecvData3);
|
|
}
|
|
HAL_UART_Receive_IT(&gUartHandle3, &gRecvData3, 1);
|
|
} else if (UartHandle->Instance == UART4) {
|
|
if (gRecvCallback4 != NULL) {
|
|
gRecvCallback4(gRecvData4);
|
|
}
|
|
HAL_UART_Receive_IT(&gUartHandle4, &gRecvData4, 1);
|
|
} else if (UartHandle->Instance == UART5) {
|
|
if (gRecvCallback5 != NULL) {
|
|
gRecvCallback5(gRecvData5);
|
|
}
|
|
HAL_UART_Receive_IT(&gUartHandle5, &gRecvData5, 1);
|
|
}
|
|
}
|
|
|
|
/* 串口的错误回调函数 */
|
|
void HAL_UART_ErrorCallback(UART_HandleTypeDef *UartHandle)
|
|
{
|
|
|
|
}
|
|
|
|
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
|
|
{
|
|
GPIO_InitTypeDef GPIO_InitStruct;
|
|
if (huart->Instance == USART1) {
|
|
MCU_BSP_UART1_CLK_ENABLE();
|
|
MCU_BSP_UART1_TX_GPIO_CLK();
|
|
MCU_BSP_UART1_RX_GPIO_CLK();
|
|
/* 初始化发送引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART1_TX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART1_TX_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART1_TX_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART1_TX_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART1_TX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化接收引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART1_RX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART1_RX_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART1_RX_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART1_RX_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART1_RX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化485控制引脚 */
|
|
if (MCU_BSP_UART1_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
MCU_BSP_UART1_RS485_CTRL_GPIO_CLK();
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART1_RS485_CTRL_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART1_RS485_CTRL_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART1_RS485_CTRL_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART1_RS485_CTRL_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART1_RS485_CTRL_GPIO_PORT, &GPIO_InitStruct);
|
|
// 默认为接收态
|
|
HAL_GPIO_WritePin(MCU_BSP_UART1_RS485_CTRL_GPIO_PORT, MCU_BSP_UART1_RS485_CTRL_GPIO_PIN, GPIO_PIN_RESET);
|
|
}
|
|
HAL_NVIC_SetPriority(MCU_BSP_UART1_IRQn, 1, 0);
|
|
HAL_NVIC_EnableIRQ(MCU_BSP_UART1_IRQn);
|
|
} else if (huart->Instance == USART2) {
|
|
MCU_BSP_UART2_CLK_ENABLE();
|
|
MCU_BSP_UART2_TX_GPIO_CLK();
|
|
MCU_BSP_UART2_RX_GPIO_CLK();
|
|
/* 初始化发送引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART2_TX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART2_TX_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART2_TX_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART2_TX_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART2_TX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化接收引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART2_RX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART2_RX_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART2_RX_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART2_RX_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART2_RX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化485控制引脚 */
|
|
if (MCU_BSP_UART2_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
MCU_BSP_UART2_RS485_CTRL_GPIO_CLK();
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART2_RS485_CTRL_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART2_RS485_CTRL_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART2_RS485_CTRL_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART2_RS485_CTRL_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART2_RS485_CTRL_GPIO_PORT, &GPIO_InitStruct);
|
|
// 默认为接收态
|
|
HAL_GPIO_WritePin(MCU_BSP_UART2_RS485_CTRL_GPIO_PORT, MCU_BSP_UART2_RS485_CTRL_GPIO_PIN, GPIO_PIN_RESET);
|
|
}
|
|
|
|
HAL_NVIC_SetPriority(MCU_BSP_UART2_IRQn, 5, 0);
|
|
HAL_NVIC_EnableIRQ(MCU_BSP_UART2_IRQn);
|
|
} else if (huart->Instance == USART3) {
|
|
MCU_BSP_UART3_CLK_ENABLE();
|
|
__HAL_AFIO_REMAP_USART3_ENABLE(); // 重定义口
|
|
MCU_BSP_UART3_TX_GPIO_CLK();
|
|
MCU_BSP_UART3_RX_GPIO_CLK();
|
|
/* 初始化发送引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART3_TX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART3_TX_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART3_TX_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART3_TX_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART3_TX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化接收引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART3_RX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART3_RX_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART3_RX_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART3_RX_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART3_RX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化485控制引脚 */
|
|
if (MCU_BSP_UART3_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
MCU_BSP_UART3_RS485_CTRL_GPIO_CLK();
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART3_RS485_CTRL_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART3_RS485_CTRL_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART3_RS485_CTRL_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART3_RS485_CTRL_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART3_RS485_CTRL_GPIO_PORT, &GPIO_InitStruct);
|
|
// 默认为接收态
|
|
HAL_GPIO_WritePin(MCU_BSP_UART3_RS485_CTRL_GPIO_PORT, MCU_BSP_UART3_RS485_CTRL_GPIO_PIN, GPIO_PIN_RESET);
|
|
}
|
|
HAL_NVIC_SetPriority(MCU_BSP_UART3_IRQn, 5, 0);
|
|
HAL_NVIC_EnableIRQ(MCU_BSP_UART3_IRQn);
|
|
} else if (huart->Instance == UART4) {
|
|
MCU_BSP_UART4_CLK_ENABLE();
|
|
MCU_BSP_UART4_TX_GPIO_CLK();
|
|
MCU_BSP_UART4_RX_GPIO_CLK();
|
|
/* 初始化发送引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART4_TX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART4_TX_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART4_TX_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART4_TX_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART4_TX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化接收引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART4_RX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART4_RX_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART4_RX_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART4_RX_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART4_RX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化485控制引脚 */
|
|
if (MCU_BSP_UART4_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
MCU_BSP_UART4_RS485_CTRL_GPIO_CLK();
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART4_RS485_CTRL_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART4_RS485_CTRL_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART4_RS485_CTRL_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART4_RS485_CTRL_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART4_RS485_CTRL_GPIO_PORT, &GPIO_InitStruct);
|
|
// 默认为接收态
|
|
HAL_GPIO_WritePin(MCU_BSP_UART4_RS485_CTRL_GPIO_PORT, MCU_BSP_UART4_RS485_CTRL_GPIO_PIN, GPIO_PIN_RESET);
|
|
}
|
|
HAL_NVIC_SetPriority(MCU_BSP_UART4_IRQn, 1, 0);
|
|
HAL_NVIC_EnableIRQ(MCU_BSP_UART4_IRQn);
|
|
} else if (huart->Instance == UART5) {
|
|
MCU_BSP_UART5_CLK_ENABLE();
|
|
MCU_BSP_UART5_TX_GPIO_CLK();
|
|
MCU_BSP_UART5_RX_GPIO_CLK();
|
|
/* 初始化发送引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART5_TX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART5_TX_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART5_TX_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART5_TX_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART5_TX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化接收引脚 */
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART5_RX_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART5_RX_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART5_RX_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART5_RX_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART5_RX_GPIO_PORT, &GPIO_InitStruct);
|
|
/* 初始化485控制引脚 */
|
|
if (MCU_BSP_UART5_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
MCU_BSP_UART5_RS485_CTRL_GPIO_CLK();
|
|
GPIO_InitStruct.Pin = MCU_BSP_UART5_RS485_CTRL_GPIO_PIN;
|
|
GPIO_InitStruct.Mode = MCU_BSP_UART5_RS485_CTRL_GPIO_MODE;
|
|
GPIO_InitStruct.Pull = MCU_BSP_UART5_RS485_CTRL_GPIO_PULL;
|
|
GPIO_InitStruct.Speed = MCU_BSP_UART5_RS485_CTRL_GPIO_SPEED;
|
|
HAL_GPIO_Init(MCU_BSP_UART5_RS485_CTRL_GPIO_PORT, &GPIO_InitStruct);
|
|
// 默认为接收态
|
|
HAL_GPIO_WritePin(MCU_BSP_UART5_RS485_CTRL_GPIO_PORT, MCU_BSP_UART5_RS485_CTRL_GPIO_PIN, GPIO_PIN_RESET);
|
|
}
|
|
HAL_NVIC_SetPriority(MCU_BSP_UART5_IRQn, 1, 0);
|
|
HAL_NVIC_EnableIRQ(MCU_BSP_UART5_IRQn);
|
|
}
|
|
}
|
|
|
|
void HAL_UART_MspDeInit(UART_HandleTypeDef *huart)
|
|
{
|
|
if (huart->Instance == USART1) {
|
|
MCU_BSP_UART1_FORCE_RESET();
|
|
MCU_BSP_UART1_RELEASE_RESET();
|
|
HAL_GPIO_DeInit(MCU_BSP_UART1_RX_GPIO_PORT, MCU_BSP_UART1_RX_GPIO_PIN);
|
|
HAL_GPIO_DeInit(MCU_BSP_UART1_RX_GPIO_PORT, MCU_BSP_UART1_RX_GPIO_PIN);
|
|
if (MCU_BSP_UART1_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
HAL_GPIO_DeInit(MCU_BSP_UART1_RS485_CTRL_GPIO_PORT, MCU_BSP_UART1_RS485_CTRL_GPIO_PIN);
|
|
}
|
|
HAL_NVIC_DisableIRQ(MCU_BSP_UART1_IRQn);
|
|
} else if (huart->Instance == USART2) {
|
|
MCU_BSP_UART2_FORCE_RESET();
|
|
MCU_BSP_UART2_RELEASE_RESET();
|
|
HAL_GPIO_DeInit(MCU_BSP_UART2_TX_GPIO_PORT, MCU_BSP_UART2_TX_GPIO_PIN);
|
|
HAL_GPIO_DeInit(MCU_BSP_UART2_RX_GPIO_PORT, MCU_BSP_UART2_RX_GPIO_PIN);
|
|
if (MCU_BSP_UART2_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
HAL_GPIO_DeInit(MCU_BSP_UART2_RS485_CTRL_GPIO_PORT, MCU_BSP_UART2_RS485_CTRL_GPIO_PIN);
|
|
}
|
|
HAL_NVIC_DisableIRQ(MCU_BSP_UART2_IRQn);
|
|
} else if (huart->Instance == USART3) {
|
|
MCU_BSP_UART3_FORCE_RESET();
|
|
MCU_BSP_UART3_RELEASE_RESET();
|
|
HAL_GPIO_DeInit(MCU_BSP_UART3_TX_GPIO_PORT, MCU_BSP_UART3_TX_GPIO_PIN);
|
|
HAL_GPIO_DeInit(MCU_BSP_UART3_RX_GPIO_PORT, MCU_BSP_UART3_RX_GPIO_PIN);
|
|
if (MCU_BSP_UART3_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
HAL_GPIO_DeInit(MCU_BSP_UART3_RS485_CTRL_GPIO_PORT, MCU_BSP_UART3_RS485_CTRL_GPIO_PIN);
|
|
}
|
|
HAL_NVIC_DisableIRQ(MCU_BSP_UART3_IRQn);
|
|
} else if (huart->Instance == UART4) {
|
|
MCU_BSP_UART4_FORCE_RESET();
|
|
MCU_BSP_UART4_RELEASE_RESET();
|
|
HAL_GPIO_DeInit(MCU_BSP_UART4_TX_GPIO_PORT, MCU_BSP_UART4_TX_GPIO_PIN);
|
|
HAL_GPIO_DeInit(MCU_BSP_UART4_RX_GPIO_PORT, MCU_BSP_UART4_RX_GPIO_PIN);
|
|
if (MCU_BSP_UART4_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
HAL_GPIO_DeInit(MCU_BSP_UART4_RS485_CTRL_GPIO_PORT, MCU_BSP_UART4_RS485_CTRL_GPIO_PIN);
|
|
}
|
|
HAL_NVIC_DisableIRQ(MCU_BSP_UART4_IRQn);
|
|
} else if (huart->Instance == UART5) {
|
|
MCU_BSP_UART5_FORCE_RESET();
|
|
MCU_BSP_UART5_RELEASE_RESET();
|
|
HAL_GPIO_DeInit(MCU_BSP_UART5_TX_GPIO_PORT, MCU_BSP_UART5_TX_GPIO_PIN);
|
|
HAL_GPIO_DeInit(MCU_BSP_UART5_RX_GPIO_PORT, MCU_BSP_UART5_RX_GPIO_PIN);
|
|
if (MCU_BSP_UART5_TYPE == MCU_BSP_RS485_UART_TYPE) {
|
|
HAL_GPIO_DeInit(MCU_BSP_UART5_RS485_CTRL_GPIO_PORT, MCU_BSP_UART5_RS485_CTRL_GPIO_PIN);
|
|
}
|
|
HAL_NVIC_DisableIRQ(MCU_BSP_UART5_IRQn);
|
|
}
|
|
}
|
|
|
|
/* 串口1中断 */
|
|
void USART1_IRQHandler(void)
|
|
{
|
|
HAL_UART_IRQHandler(&gUartHandle1);
|
|
}
|
|
|
|
/* 串口2中断 */
|
|
void USART2_IRQHandler(void)
|
|
{
|
|
HAL_UART_IRQHandler(&gUartHandle2);
|
|
}
|
|
|
|
/* 串口3中断 */
|
|
void USART3_IRQHandler(void)
|
|
{
|
|
HAL_UART_IRQHandler(&gUartHandle3);
|
|
}
|
|
|
|
/* 串口4中断 */
|
|
void UART4_IRQHandler(void)
|
|
{
|
|
HAL_UART_IRQHandler(&gUartHandle4);
|
|
}
|
|
|
|
/* 串口5中断 */
|
|
void UART5_IRQHandler(void)
|
|
{
|
|
HAL_UART_IRQHandler(&gUartHandle5);
|
|
}
|