1. 新增sqlite文件、协议文档、调试截图、配置ini等各类辅助文件 2. 更新Keil开发包版本与工程配置,调整编译优化等级 3. 重构继电器控制逻辑、串口收发逻辑与线程优先级 4. 新增Modbus寄存器映射、校准结构体与Ymodem升级相关代码 5. 完善南北向协议解析、快充挡位配置与调试日志 6. 修复注释格式、数组越界与线程邮箱溢出问题 7. 新增屏幕控制、功率板调试与协议格式说明文档
712 lines
16 KiB
C
712 lines
16 KiB
C
/**
|
|
* Change Logs:
|
|
* 澧炲姞 __HAL_UART_FLUSH_DRREGISTER
|
|
*/
|
|
|
|
|
|
/* Includes ------------------------------------------------------------------*/
|
|
#include "bsp_uart.h"
|
|
|
|
|
|
/* Private variables ---------------------------------------------------------*/
|
|
#if (BSP_USING_UART2_RE || BSP_USING_UART3_RE)
|
|
static volatile uint8_t _uart2_alter;
|
|
static volatile uint8_t _uart3_alter;
|
|
#endif
|
|
|
|
static UART_Callback_t _UART_RxCallback;
|
|
static UART_Callback_t _UART_RxIdleCallback;
|
|
static UART_Callback_t _UART_DMA_RxCallback;
|
|
static UART_Callback_t _UART_DMA_TxCallback;
|
|
|
|
#if (BSP_USING_UART1)
|
|
UART_CREATE(1);
|
|
#endif
|
|
|
|
#if (BSP_USING_UART2)
|
|
UART_CREATE(2);
|
|
#endif
|
|
|
|
#if (BSP_USING_UART2_RE)
|
|
UART_CREATE(2_RE);
|
|
#endif
|
|
|
|
#if (BSP_USING_UART3)
|
|
UART_CREATE(3);
|
|
#endif
|
|
|
|
#if (BSP_USING_UART3_RE)
|
|
UART_CREATE(3_RE);
|
|
#endif
|
|
|
|
#if (BSP_USING_UART4)
|
|
UART_CREATE(4);
|
|
#endif
|
|
|
|
#if (BSP_USING_UART5)
|
|
UART_CREATE(5);
|
|
#endif
|
|
|
|
#if (BSP_USING_UART6)
|
|
UART_CREATE(6);
|
|
#endif
|
|
|
|
struct UART_STRUCT *_uart_group[] =
|
|
{
|
|
#if (BSP_USING_UART1)
|
|
&UART(1),
|
|
#endif
|
|
#if (BSP_USING_UART2)
|
|
&UART(2),
|
|
#endif
|
|
#if (BSP_USING_UART2_RE)
|
|
&UART(2_RE),
|
|
#endif
|
|
#if (BSP_USING_UART3)
|
|
&UART(3),
|
|
#endif
|
|
#if (BSP_USING_UART3_RE)
|
|
&UART(3_RE),
|
|
#endif
|
|
#if (BSP_USING_UART4)
|
|
&UART(4),
|
|
#endif
|
|
#if (BSP_USING_UART5)
|
|
&UART(5),
|
|
#endif
|
|
#if (BSP_USING_UART6)
|
|
&UART(6),
|
|
#endif
|
|
};
|
|
|
|
static const uint8_t _uart_qty = sizeof(_uart_group) / sizeof(struct UART_STRUCT *);
|
|
|
|
|
|
/* Private function prototypes -----------------------------------------------*/
|
|
static inline void _UART_IntHandler (struct UART_STRUCT *uart);
|
|
static inline void _UART_Alternate (struct UART_STRUCT *uart);
|
|
|
|
|
|
/* Exported functions ---------------------------------------------------------*/
|
|
/**
|
|
* @brief UART 鎺ュ彛鍒濆�鍖? * @note 闇€鍦?UART 澶栬�鍒濆�鍖栧悗鎴栨湰鍑芥暟澶勮繘琛?UART 澶栬�鍒濆�鍖栧悗鎵嶅彲璋冪敤
|
|
* @param[in] uart: UART 瀵硅薄
|
|
* @param[in] rx_callback: 鎺ユ敹鍗曞瓧鑺傛暟鎹�腑鏂�殑鍥炶皟鍑芥暟
|
|
* @param[in] rx_idle_callback: 绌洪棽涓�柇鐨勫洖璋冨嚱鏁? * @param[in] dma_rx_callback: DMA 鎺ユ敹涓�柇鐨勫洖璋冨嚱鏁? * @param[in] dma_tx_callback: DMA 鍙戦€佸畬鎴愮殑鍥炶皟鍑芥暟
|
|
* @retval None
|
|
*/
|
|
void BSP_UART_Port_Init( struct UART_STRUCT *uart,
|
|
UART_Callback_t rx_callback,
|
|
UART_Callback_t rx_idle_callback,
|
|
UART_Callback_t dma_rx_callback,
|
|
UART_Callback_t dma_tx_callback)
|
|
{
|
|
BSP_UART_Port_LockInit(uart);
|
|
|
|
_UART_RxCallback = rx_callback;
|
|
_UART_RxIdleCallback = rx_idle_callback;
|
|
_UART_DMA_RxCallback = dma_rx_callback;
|
|
_UART_DMA_TxCallback = dma_tx_callback;
|
|
|
|
/**
|
|
* 褰?uart->handle 鐨勫�璁剧敱绯荤粺鍒濆�鍖栨椂锛屼緥濡?CubeMX 鐢熸垚鐨勫垵濮嬪寲浠g爜锛屼互涓嬭祴鍊兼搷浣滄槸蹇呴』鐨勩€? * 鍚﹀垯锛岄渶瑕佽嚜宸卞皢 uart->handle 鍒濆�鍖栥€? * 鐢辨�鍙��锛?BSP_UART_Port_Init 闇€鍦?UART 澶栬�鍒濆�鍖栧悗鎴栨湰鍑芥暟澶勮繘琛?UART 澶栬�鍒濆�鍖栧悗鎵嶅彲璋冪敤銆? */
|
|
switch (uart->id)
|
|
{
|
|
#if (BSP_USING_UART1)
|
|
case BSP_UART1: uart->handle = UART1_HANDLE; break;
|
|
#endif
|
|
#if (BSP_USING_UART2)
|
|
case BSP_UART2: uart->handle = UART2_HANDLE; break;
|
|
#endif
|
|
#if (BSP_USING_UART2_RE)
|
|
case BSP_UART2_RE: uart->handle = UART2_HANDLE; break;
|
|
#endif
|
|
#if (BSP_USING_UART3)
|
|
case BSP_UART3: uart->handle = UART3_HANDLE; break;
|
|
#endif
|
|
#if (BSP_USING_UART3_RE)
|
|
case BSP_UART3_RE: uart->handle = UART3_HANDLE; break;
|
|
#endif
|
|
#if (BSP_USING_UART4)
|
|
case BSP_UART4: uart->handle = UART4_HANDLE; break;
|
|
#endif
|
|
#if (BSP_USING_UART5)
|
|
case BSP_UART5: uart->handle = UART5_HANDLE; break;
|
|
#endif
|
|
#if (BSP_USING_UART6)
|
|
case BSP_UART6: uart->handle = UART6_HANDLE; break;
|
|
#endif
|
|
default: break;
|
|
}
|
|
|
|
if (uart->handle.hdmatx)
|
|
uart->handle.hdmatx->Parent = &uart->handle;
|
|
|
|
/* Clean the input path */
|
|
__HAL_UART_FLUSH_DRREGISTER(&uart->handle);
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief UART 鎺ュ彛閫氫俊鎺у埗閿佺殑鍒濆�鍖? * @note
|
|
* @param[in] uart: UART 瀵硅薄
|
|
* @retval BSP_UART_ERR
|
|
*/
|
|
BSP_UART_ERR BSP_UART_Port_LockInit(struct UART_STRUCT *uart)
|
|
{
|
|
return BSP_UART_ERR_OK;
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief UART 绛夊緟鎺ユ敹鏁版嵁鐨勪俊鍙烽攣
|
|
* @note
|
|
* @param[in] uart: UART 瀵硅薄
|
|
* @retval BSP_UART_ERR
|
|
*/
|
|
inline BSP_UART_ERR BSP_UART_Port_RxLock(struct UART_STRUCT *uart)
|
|
{
|
|
return BSP_UART_ERR_OK;
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief UART 鎺ユ敹鍒版暟鎹�彂鍑虹殑淇″彿閿? * @note
|
|
* @param[in] uart: UART 瀵硅薄
|
|
* @retval BSP_UART_ERR
|
|
*/
|
|
inline BSP_UART_ERR BSP_UART_Port_RxUnlock(struct UART_STRUCT *uart)
|
|
{
|
|
return BSP_UART_ERR_OK;
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief UART 鍙戦€侀攣
|
|
* @note
|
|
* @param[in] uart: UART 瀵硅薄
|
|
* @retval BSP_UART_ERR
|
|
*/
|
|
inline BSP_UART_ERR BSP_UART_Port_TxLock(struct UART_STRUCT *uart)
|
|
{
|
|
return BSP_UART_ERR_OK;
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief UART 鍙戦€佸畬姣曡В閿? * @note
|
|
* @param[in] uart: UART 瀵硅薄
|
|
* @retval BSP_UART_ERR
|
|
*/
|
|
inline BSP_UART_ERR BSP_UART_Port_TxUnlock(struct UART_STRUCT *uart)
|
|
{
|
|
return BSP_UART_ERR_OK;
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief 浣胯兘 UART 鎺ユ敹鏁版嵁
|
|
* @note
|
|
* @param[in] uart: UART 瀵硅薄
|
|
* @retval BSP_UART_ERR
|
|
*/
|
|
BSP_UART_ERR BSP_UART_Port_EnableReceive(struct UART_STRUCT *uart)
|
|
{
|
|
BSP_UART_ERR ret = BSP_UART_ERR_OK;
|
|
|
|
if (uart->handle.hdmarx)
|
|
uart->handle.hdmarx->Parent = &uart->handle;
|
|
|
|
_UART_Alternate(uart);
|
|
|
|
if (uart->handle.hdmarx)
|
|
ret = (BSP_UART_ERR)HAL_UART_Receive_DMA(&uart->handle, (uint8_t *)uart->rx_buff, uart->rx_buff_max_len);
|
|
else
|
|
__HAL_UART_ENABLE_IT(&uart->handle, UART_IT_RXNE);
|
|
|
|
/* 寮€鍚�┖闂蹭腑鏂?*/
|
|
__HAL_UART_ENABLE_IT(&uart->handle, UART_IT_IDLE);
|
|
|
|
return ret;
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief 绂佹� UART 鎺ユ敹鏁版嵁
|
|
* @note
|
|
* @param[in] uart: UART 瀵硅薄
|
|
* @retval BSP_UART_ERR
|
|
*/
|
|
BSP_UART_ERR BSP_UART_Port_DisableReceive(struct UART_STRUCT *uart)
|
|
{
|
|
BSP_UART_ERR ret = BSP_UART_ERR_OK;
|
|
|
|
if (uart->handle.hdmarx)
|
|
ret = (BSP_UART_ERR)HAL_UART_DMAPause(&uart->handle);
|
|
else
|
|
__HAL_UART_DISABLE_IT(&uart->handle, UART_IT_RXNE);
|
|
|
|
__HAL_UART_DISABLE_IT(&uart->handle, UART_IT_IDLE);
|
|
|
|
return ret;
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief 鎺у埗 UART 鍙戦€佷竴甯ф暟鎹? * @note
|
|
* @param[in] uart: UART 瀵硅薄
|
|
* @param[in] data: 瑕佸彂閫佺殑鏁版嵁
|
|
* @param[in] len: 瑕佸彂閫佺殑鏁版嵁闀垮害锛屽崟浣?byte銆傛渶澶ч暱搴? 65535 byte
|
|
* @param[in] timeout: 鏈€澶у�鐞嗚秴鏃舵椂闂达紝鍗曚綅 ms銆傛渶澶ф寚瀹氭椂闂? 65535 ms
|
|
* @retval BSP_UART_ERR
|
|
*/
|
|
BSP_UART_ERR BSP_UART_Port_Send(struct UART_STRUCT *uart, const uint8_t *data, uint16_t len, uint16_t timeout)
|
|
{
|
|
// ================================
|
|
// ?? 485 发送模式:置 1 ??
|
|
// ================================
|
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);
|
|
|
|
_UART_Alternate(uart);
|
|
|
|
if (timeout == 0)
|
|
{
|
|
if (uart->handle.hdmatx)
|
|
return (BSP_UART_ERR)HAL_UART_Transmit_DMA(&uart->handle, (uint8_t *)data, len);
|
|
else
|
|
return (BSP_UART_ERR)HAL_UART_Transmit_IT(&uart->handle, (uint8_t *)data, len);
|
|
}
|
|
else
|
|
{
|
|
// 发送
|
|
BSP_UART_ERR err = (BSP_UART_ERR)HAL_UART_Transmit(&uart->handle, (uint8_t *)data, len, timeout);
|
|
|
|
// 等待发送完成
|
|
while(__HAL_UART_GET_FLAG(&uart->handle, UART_FLAG_TC) == RESET);
|
|
|
|
// ================================
|
|
// ?? 485 回到接收模式:置 0 ??
|
|
// ================================
|
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);
|
|
|
|
return err;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
* @brief 浠?UART 鑾峰彇涓€涓�瓧鑺傜殑鏁版嵁
|
|
* @note
|
|
* @param[in] uart: UART 瀵硅薄
|
|
* @retval UART 鏁版嵁
|
|
*/
|
|
inline uint32_t BSP_UART_Port_GetOneByte(struct UART_STRUCT *uart)
|
|
{
|
|
return uart->handle.Instance->DR;
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief 鑾峰彇 DMA 褰撳墠鐨勮�鏁? * @note
|
|
* @param[in] uart: UART 瀵硅薄
|
|
* @retval 璁℃暟鍊? */
|
|
inline uint32_t BSP_UART_Port_GetDmaCounter(struct UART_STRUCT *uart)
|
|
{
|
|
return __HAL_DMA_GET_COUNTER(uart->handle.hdmarx);
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief 閫氳繃 UART ID 鑾峰彇 UART 瀵硅薄
|
|
* @note
|
|
* @param[in] id: 涓插彛 ID
|
|
* @retval NULL: 鏃犳晥鐨?ID銆傞潪 NULL: UART 瀵硅薄
|
|
*/
|
|
struct UART_STRUCT *BSP_UART_Port_GetHandle(BSP_UART_ID id)
|
|
{
|
|
for (uint8_t i = 0; i < _uart_qty; i++)
|
|
{
|
|
if (_uart_group[i]->id == id)
|
|
{
|
|
return _uart_group[i];
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
|
|
/* Private functions ---------------------------------------------------------*/
|
|
/**
|
|
* @brief UART 涓�柇鐨勯泦涓��鐞? * @note
|
|
* @param[in] uart: UART 瀵硅薄
|
|
* @retval None
|
|
*/
|
|
static inline void _UART_IntHandler(struct UART_STRUCT *uart)
|
|
{
|
|
if (uart->handle.Instance == NULL)
|
|
return;
|
|
|
|
if (__HAL_UART_GET_FLAG(&uart->handle, UART_FLAG_RXNE) != RESET)
|
|
{
|
|
/* RXNE 涓�柇鏍囧織浣嶄細鍦ㄨ�鍙?DR 瀵勫瓨鍣ㄧ殑鏃跺€欐竻闆讹紝浣嗘棤娉曠‘瀹?_UART_RxCallback 鏄�惁浼氳�鍙朌R瀵勫瓨鍣�紝
|
|
鎵€浠ュ湪姝ゅ�杩涜�涓€娆℃竻闆?*/
|
|
__HAL_UART_CLEAR_FLAG(&uart->handle, UART_FLAG_RXNE);
|
|
|
|
if (_UART_RxCallback)
|
|
_UART_RxCallback(uart);
|
|
}
|
|
else if ((__HAL_UART_GET_FLAG(&uart->handle, UART_FLAG_IDLE) != RESET)
|
|
&& (__HAL_UART_GET_IT_SOURCE(&uart->handle, UART_IT_IDLE) != RESET))
|
|
{
|
|
/* IDLE 涓�柇鏍囧織浣嶅彧鑳借蒋浠舵竻闆?*/
|
|
__HAL_UART_CLEAR_IDLEFLAG(&uart->handle);
|
|
|
|
if (_UART_RxIdleCallback)
|
|
_UART_RxIdleCallback(uart);
|
|
}
|
|
else
|
|
{
|
|
HAL_UART_IRQHandler(&(uart->handle));
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief 涓插彛澶嶇敤鍒囨崲鍑芥暟
|
|
* @note
|
|
* @param[in] uart: UART 瀵硅薄
|
|
* @retval None
|
|
*/
|
|
static inline void _UART_Alternate(struct UART_STRUCT *uart)
|
|
{
|
|
#if (BSP_USING_UART2_RE || BSP_USING_UART3_RE)
|
|
switch (uart->id)
|
|
{
|
|
case BSP_UART2:
|
|
case BSP_UART2_RE:
|
|
{
|
|
if (_uart2_alter != uart->id) /* 澶嶇敤鍒囨崲 */
|
|
{
|
|
if (uart->id == BSP_UART2)
|
|
{
|
|
BSP_GPIO_SetMode(GET_PIN(A, 2), GPIO_MODE_AF_PP, GPIO_PULLUP); /* TX */
|
|
BSP_GPIO_SetMode(GET_PIN(A, 3), GPIO_MODE_INPUT, GPIO_PULLUP); /* RX */
|
|
__HAL_AFIO_REMAP_USART2_DISABLE();
|
|
}
|
|
else
|
|
{
|
|
BSP_GPIO_SetMode(GET_PIN(D, 5), GPIO_MODE_AF_PP, GPIO_PULLUP); /* TX */
|
|
BSP_GPIO_SetMode(GET_PIN(D, 6), GPIO_MODE_INPUT, GPIO_PULLUP); /* RX */
|
|
__HAL_AFIO_REMAP_USART2_ENABLE();
|
|
}
|
|
_uart2_alter = uart->id;
|
|
}
|
|
break;
|
|
}
|
|
case BSP_UART3:
|
|
case BSP_UART3_RE:
|
|
{
|
|
if (_uart3_alter != uart->id) /* 澶嶇敤鍒囨崲 */
|
|
{
|
|
if (uart->id == BSP_UART3)
|
|
{
|
|
BSP_GPIO_SetMode(GET_PIN(B, 10), GPIO_MODE_AF_PP, GPIO_PULLUP); /* TX */
|
|
BSP_GPIO_SetMode(GET_PIN(B, 11), GPIO_MODE_INPUT, GPIO_PULLUP); /* RX */
|
|
__HAL_AFIO_REMAP_USART3_DISABLE();
|
|
}
|
|
else
|
|
{
|
|
BSP_GPIO_SetMode(GET_PIN(D, 8), GPIO_MODE_AF_PP, GPIO_PULLUP); /* TX */
|
|
BSP_GPIO_SetMode(GET_PIN(D, 9), GPIO_MODE_INPUT, GPIO_PULLUP); /* RX */
|
|
__HAL_AFIO_REMAP_USART3_ENABLE();
|
|
}
|
|
_uart3_alter = uart->id;
|
|
}
|
|
break;
|
|
}
|
|
default: break;
|
|
}
|
|
#endif
|
|
}
|
|
|
|
|
|
/* Callback functions ---------------------------------------------------------*/
|
|
/* 浠ヤ笅 4 涓�嚱鏁板潎鏄?HAL 搴?UART 鐩稿叧鐨勪腑鏂�嚱鏁扮殑鍥炶皟鍑芥暟 */
|
|
/* UART DMA 鎺ユ敹鍗婃弧涓�柇 */
|
|
void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart)
|
|
{
|
|
struct UART_STRUCT *uart = (struct UART_STRUCT *)huart;
|
|
|
|
if (_UART_DMA_RxCallback)
|
|
_UART_DMA_RxCallback(uart);
|
|
}
|
|
|
|
/* UART DMA 鎺ユ敹鍏ㄦ弧涓�柇 */
|
|
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
|
|
{
|
|
struct UART_STRUCT *uart = (struct UART_STRUCT *)huart;
|
|
|
|
if (_UART_DMA_RxCallback)
|
|
_UART_DMA_RxCallback(uart);
|
|
}
|
|
|
|
/* UART DMA 鍙戦€佸畬鎴愪腑鏂?*/
|
|
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
|
|
{
|
|
struct UART_STRUCT *uart = (struct UART_STRUCT *)huart;
|
|
|
|
if (_UART_DMA_TxCallback)
|
|
_UART_DMA_TxCallback(uart);
|
|
}
|
|
|
|
/* UART 涓�柇妫€娴嬪埌閿欒�鐨勫洖璋冨嚱鏁?*/
|
|
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
|
|
{
|
|
struct UART_STRUCT *uart = (struct UART_STRUCT *)huart;
|
|
|
|
//printf("%s: %d %d\r\n", __FUNCTION__, uart->id, huart->ErrorCode);
|
|
}
|
|
|
|
|
|
/* Interrupt request functions ---------------------------------------------------------*/
|
|
#if (BSP_USING_UART1)
|
|
void USART1_IRQHandler(void)
|
|
{
|
|
BSP_INT_ENTER();
|
|
|
|
_UART_IntHandler(&UART(1));
|
|
|
|
BSP_INT_EXIT();
|
|
}
|
|
|
|
void UART1_DMA_RX_IRQHandler(void)
|
|
{
|
|
BSP_INT_ENTER();
|
|
|
|
if (UART(1).rx_init)
|
|
{
|
|
HAL_DMA_IRQHandler(UART(1).handle.hdmarx);
|
|
}
|
|
|
|
BSP_INT_EXIT();
|
|
}
|
|
|
|
void UART1_DMA_TX_IRQHandler(void)
|
|
{
|
|
BSP_INT_ENTER();
|
|
|
|
HAL_DMA_IRQHandler(UART(1).handle.hdmatx);
|
|
|
|
BSP_INT_EXIT();
|
|
}
|
|
#endif
|
|
|
|
#if (BSP_USING_UART2)
|
|
void USART2_IRQHandler(void)
|
|
{
|
|
BSP_INT_ENTER();
|
|
|
|
#if (BSP_USING_UART2_RE)
|
|
if (_uart2_alter == BSP_UART2)
|
|
_UART_IntHandler(&UART(2));
|
|
else
|
|
_UART_IntHandler(&UART(2_RE));
|
|
#else
|
|
_UART_IntHandler(&UART(2));
|
|
#endif
|
|
|
|
BSP_INT_EXIT();
|
|
}
|
|
|
|
void UART2_DMA_RX_IRQHandler(void)
|
|
{
|
|
BSP_INT_ENTER();
|
|
|
|
if (UART(2).rx_init)
|
|
{
|
|
#if (BSP_USING_UART2_RE)
|
|
if (_uart2_alter == BSP_UART2)
|
|
HAL_DMA_IRQHandler(UART(2).handle.hdmarx);
|
|
else
|
|
HAL_DMA_IRQHandler(UART(2_RE).handle.hdmarx);
|
|
#else
|
|
HAL_DMA_IRQHandler(UART(2).handle.hdmarx);
|
|
#endif
|
|
}
|
|
|
|
BSP_INT_EXIT();
|
|
}
|
|
|
|
void UART2_DMA_TX_IRQHandler(void)
|
|
{
|
|
BSP_INT_ENTER();
|
|
|
|
#if (BSP_USING_UART2_RE)
|
|
if (_uart2_alter == BSP_UART2)
|
|
HAL_DMA_IRQHandler(UART(2).handle.hdmatx);
|
|
else
|
|
HAL_DMA_IRQHandler(UART(2_RE).handle.hdmarx);
|
|
#else
|
|
HAL_DMA_IRQHandler(UART(2).handle.hdmarx);
|
|
#endif
|
|
|
|
BSP_INT_EXIT();
|
|
}
|
|
#endif
|
|
|
|
#if (BSP_USING_UART3)
|
|
void USART3_IRQHandler(void)
|
|
{
|
|
BSP_INT_ENTER();
|
|
|
|
#if (BSP_USING_UART3_RE)
|
|
if (_uart3_alter == BSP_UART3)
|
|
_UART_IntHandler(&UART(3));
|
|
else
|
|
_UART_IntHandler(&UART(3_RE));
|
|
#else
|
|
_UART_IntHandler(&UART(3));
|
|
#endif
|
|
|
|
BSP_INT_EXIT();
|
|
}
|
|
|
|
void UART3_DMA_RX_IRQHandler(void)
|
|
{
|
|
BSP_INT_ENTER();
|
|
|
|
if (UART(3).rx_init)
|
|
{
|
|
#if (BSP_USING_UART3_RE)
|
|
if (_uart3_alter == BSP_UART3)
|
|
HAL_DMA_IRQHandler(UART(3).handle.hdmarx);
|
|
else
|
|
HAL_DMA_IRQHandler(UART(3_RE).handle.hdmarx);
|
|
#else
|
|
HAL_DMA_IRQHandler(UART(3).handle.hdmarx);
|
|
#endif
|
|
}
|
|
|
|
BSP_INT_EXIT();
|
|
}
|
|
|
|
void UART3_DMA_TX_IRQHandler(void)
|
|
{
|
|
BSP_INT_ENTER();
|
|
|
|
#if (BSP_USING_UART3_RE)
|
|
if (_uart3_alter == BSP_UART3)
|
|
HAL_DMA_IRQHandler(UART(3).handle.hdmarx);
|
|
else
|
|
HAL_DMA_IRQHandler(UART(3_RE).handle.hdmarx);
|
|
#else
|
|
HAL_DMA_IRQHandler(UART(3).handle.hdmarx);
|
|
#endif
|
|
|
|
BSP_INT_EXIT();
|
|
}
|
|
#endif
|
|
|
|
#if (BSP_USING_UART4)
|
|
void UART4_IRQHandler(void)
|
|
{
|
|
BSP_INT_ENTER();
|
|
|
|
_UART_IntHandler(&UART(4));
|
|
|
|
BSP_INT_EXIT();
|
|
}
|
|
|
|
void UART4_DMA_RX_IRQHandler(void)
|
|
{
|
|
BSP_INT_ENTER();
|
|
|
|
if (UART(4).rx_init)
|
|
{
|
|
HAL_DMA_IRQHandler(UART(4).handle.hdmarx);
|
|
}
|
|
|
|
BSP_INT_EXIT();
|
|
}
|
|
|
|
void UART4_DMA_TX_IRQHandler(void)
|
|
{
|
|
BSP_INT_ENTER();
|
|
|
|
HAL_DMA_IRQHandler(UART(4).handle.hdmatx);
|
|
|
|
BSP_INT_EXIT();
|
|
}
|
|
#endif
|
|
|
|
#if (BSP_USING_UART5)
|
|
void UART5_IRQHandler(void)
|
|
{
|
|
BSP_INT_ENTER();
|
|
|
|
_UART_IntHandler(&UART(5));
|
|
|
|
BSP_INT_EXIT();
|
|
}
|
|
|
|
void UART5_DMA_RX_IRQHandler(void)
|
|
{
|
|
BSP_INT_ENTER();
|
|
|
|
if (UART(5).rx_init)
|
|
{
|
|
HAL_DMA_IRQHandler(UART(5).handle.hdmarx);
|
|
}
|
|
|
|
BSP_INT_EXIT();
|
|
}
|
|
|
|
void UART5_DMA_TX_IRQHandler(void)
|
|
{
|
|
BSP_INT_ENTER();
|
|
|
|
HAL_DMA_IRQHandler(UART(5).handle.hdmatx);
|
|
|
|
BSP_INT_EXIT();
|
|
}
|
|
#endif
|
|
|
|
#if (BSP_USING_UART6)
|
|
void USART6_IRQHandler(void)
|
|
{
|
|
BSP_INT_ENTER();
|
|
|
|
_UART_IntHandler(&UART(6));
|
|
|
|
BSP_INT_EXIT();
|
|
}
|
|
|
|
void UART6_DMA_RX_IRQHandler(void)
|
|
{
|
|
BSP_INT_ENTER();
|
|
|
|
if (UART(6).rx_init)
|
|
{
|
|
HAL_DMA_IRQHandler(UART(6).handle.hdmarx);
|
|
}
|
|
|
|
BSP_INT_EXIT();
|
|
}
|
|
|
|
void UART6_DMA_TX_IRQHandler(void)
|
|
{
|
|
BSP_INT_ENTER();
|
|
|
|
HAL_DMA_IRQHandler(UART(6).handle.hdmatx);
|
|
|
|
BSP_INT_EXIT();
|
|
}
|
|
#endif
|
|
|
|
|
|
|
|
|