работает слейв и мастер
This commit is contained in:
317
Core/Src/hw_uart.c
Normal file
317
Core/Src/hw_uart.c
Normal file
@@ -0,0 +1,317 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file Src/hw_uart.c
|
||||
* @author MCD Application Team
|
||||
* @brief HW UART source file for STM32WPAN Middleware.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2019-2023 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "app_common.h"
|
||||
#include "hw_conf.h"
|
||||
#if (CFG_HW_LPUART1_ENABLED == 1)
|
||||
extern UART_HandleTypeDef hlpuart1;
|
||||
#endif
|
||||
#if (CFG_HW_USART1_ENABLED == 1)
|
||||
extern UART_HandleTypeDef huart1;
|
||||
#endif
|
||||
|
||||
/* Macros --------------------------------------------------------------------*/
|
||||
#define HW_UART_RX_IT(__HANDLE__, __USART_BASE__) \
|
||||
do{ \
|
||||
HW_##__HANDLE__##RxCb = cb; \
|
||||
(__HANDLE__).Instance = (__USART_BASE__); \
|
||||
HAL_UART_Receive_IT(&(__HANDLE__), p_data, size); \
|
||||
} while(0)
|
||||
|
||||
#define HW_UART_TX_IT(__HANDLE__, __USART_BASE__) \
|
||||
do{ \
|
||||
HW_##__HANDLE__##TxCb = cb; \
|
||||
(__HANDLE__).Instance = (__USART_BASE__); \
|
||||
HAL_UART_Transmit_IT(&(__HANDLE__), p_data, size); \
|
||||
} while(0)
|
||||
|
||||
#define HW_UART_TX(__HANDLE__, __USART_BASE__) \
|
||||
do{ \
|
||||
(__HANDLE__).Instance = (__USART_BASE__); \
|
||||
hal_status = HAL_UART_Transmit(&(__HANDLE__), p_data, size, timeout); \
|
||||
} while(0)
|
||||
|
||||
/* Variables -----------------------------------------------------------------*/
|
||||
#if (CFG_HW_USART1_ENABLED == 1)
|
||||
#if (CFG_HW_USART1_DMA_TX_SUPPORTED == 1)
|
||||
DMA_HandleTypeDef HW_hdma_huart1_tx ={0};
|
||||
#endif
|
||||
void (*HW_huart1RxCb)(void);
|
||||
void (*HW_huart1TxCb)(void);
|
||||
#endif
|
||||
|
||||
#if (CFG_HW_LPUART1_ENABLED == 1)
|
||||
#if (CFG_HW_LPUART1_DMA_TX_SUPPORTED == 1)
|
||||
DMA_HandleTypeDef HW_hdma_hlpuart1_tx ={0};
|
||||
#endif
|
||||
void (*HW_hlpuart1RxCb)(void);
|
||||
void (*HW_hlpuart1TxCb)(void);
|
||||
#endif
|
||||
|
||||
void HW_UART_Receive_IT(hw_uart_id_t hw_uart_id, uint8_t *p_data, uint16_t size, void (*cb)(void))
|
||||
{
|
||||
switch (hw_uart_id)
|
||||
{
|
||||
#if (CFG_HW_USART1_ENABLED == 1)
|
||||
case hw_uart1:
|
||||
HW_UART_RX_IT(huart1, USART1);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if (CFG_HW_LPUART1_ENABLED == 1)
|
||||
case hw_lpuart1:
|
||||
HW_UART_RX_IT(hlpuart1, LPUART1);
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void HW_UART_Transmit_IT(hw_uart_id_t hw_uart_id, uint8_t *p_data, uint16_t size, void (*cb)(void))
|
||||
{
|
||||
switch (hw_uart_id)
|
||||
{
|
||||
#if (CFG_HW_USART1_ENABLED == 1)
|
||||
case hw_uart1:
|
||||
HW_UART_TX_IT(huart1, USART1);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if (CFG_HW_LPUART1_ENABLED == 1)
|
||||
case hw_lpuart1:
|
||||
HW_UART_TX_IT(hlpuart1, LPUART1);
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
hw_status_t HW_UART_Transmit(hw_uart_id_t hw_uart_id, uint8_t *p_data, uint16_t size, uint32_t timeout)
|
||||
{
|
||||
HAL_StatusTypeDef hal_status = HAL_OK;
|
||||
hw_status_t hw_status = hw_uart_ok;
|
||||
|
||||
switch (hw_uart_id)
|
||||
{
|
||||
#if (CFG_HW_USART1_ENABLED == 1)
|
||||
case hw_uart1:
|
||||
HW_UART_TX(huart1, USART1);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if (CFG_HW_LPUART1_ENABLED == 1)
|
||||
case hw_lpuart1:
|
||||
HW_UART_TX(hlpuart1, LPUART1);
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
switch (hal_status)
|
||||
{
|
||||
case HAL_OK:
|
||||
hw_status = hw_uart_ok;
|
||||
break;
|
||||
|
||||
case HAL_ERROR:
|
||||
hw_status = hw_uart_error;
|
||||
break;
|
||||
|
||||
case HAL_BUSY:
|
||||
hw_status = hw_uart_busy;
|
||||
break;
|
||||
|
||||
case HAL_TIMEOUT:
|
||||
hw_status = hw_uart_to;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return hw_status;
|
||||
}
|
||||
|
||||
hw_status_t HW_UART_Transmit_DMA(hw_uart_id_t hw_uart_id, uint8_t *p_data, uint16_t size, void (*cb)(void))
|
||||
{
|
||||
HAL_StatusTypeDef hal_status = HAL_OK;
|
||||
hw_status_t hw_status = hw_uart_ok;
|
||||
|
||||
switch (hw_uart_id)
|
||||
{
|
||||
#if (CFG_HW_USART1_ENABLED == 1)
|
||||
case hw_uart1:
|
||||
HW_huart1TxCb = cb;
|
||||
huart1.Instance = USART1;
|
||||
hal_status = HAL_UART_Transmit_DMA(&huart1, p_data, size);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if (CFG_HW_LPUART1_ENABLED == 1)
|
||||
case hw_lpuart1:
|
||||
HW_hlpuart1TxCb = cb;
|
||||
hlpuart1.Instance = LPUART1;
|
||||
hal_status = HAL_UART_Transmit_DMA(&hlpuart1, p_data, size);
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
switch (hal_status)
|
||||
{
|
||||
case HAL_OK:
|
||||
hw_status = hw_uart_ok;
|
||||
break;
|
||||
|
||||
case HAL_ERROR:
|
||||
hw_status = hw_uart_error;
|
||||
break;
|
||||
|
||||
case HAL_BUSY:
|
||||
hw_status = hw_uart_busy;
|
||||
break;
|
||||
|
||||
case HAL_TIMEOUT:
|
||||
hw_status = hw_uart_to;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return hw_status;
|
||||
}
|
||||
|
||||
void HW_UART_Interrupt_Handler(hw_uart_id_t hw_uart_id)
|
||||
{
|
||||
switch (hw_uart_id)
|
||||
{
|
||||
#if (CFG_HW_USART1_ENABLED == 1)
|
||||
case hw_uart1:
|
||||
HAL_UART_IRQHandler(&huart1);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if (CFG_HW_LPUART1_ENABLED == 1)
|
||||
case hw_lpuart1:
|
||||
HAL_UART_IRQHandler(&hlpuart1);
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void HW_UART_DMA_Interrupt_Handler(hw_uart_id_t hw_uart_id)
|
||||
{
|
||||
switch (hw_uart_id)
|
||||
{
|
||||
#if (CFG_HW_USART1_DMA_TX_SUPPORTED == 1)
|
||||
case hw_uart1:
|
||||
HAL_DMA_IRQHandler(huart1.hdmatx);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if (CFG_HW_LPUART1_DMA_TX_SUPPORTED == 1)
|
||||
case hw_lpuart1:
|
||||
HAL_DMA_IRQHandler(hlpuart1.hdmatx);
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
|
||||
{
|
||||
switch ((uint32_t)huart->Instance)
|
||||
{
|
||||
#if (CFG_HW_USART1_ENABLED == 1)
|
||||
case (uint32_t)USART1:
|
||||
if(HW_huart1RxCb)
|
||||
{
|
||||
HW_huart1RxCb();
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if (CFG_HW_LPUART1_ENABLED == 1)
|
||||
case (uint32_t)LPUART1:
|
||||
if(HW_hlpuart1RxCb)
|
||||
{
|
||||
HW_hlpuart1RxCb();
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
|
||||
{
|
||||
switch ((uint32_t)huart->Instance)
|
||||
{
|
||||
#if (CFG_HW_USART1_ENABLED == 1)
|
||||
case (uint32_t)USART1:
|
||||
if(HW_huart1TxCb)
|
||||
{
|
||||
HW_huart1TxCb();
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if (CFG_HW_LPUART1_ENABLED == 1)
|
||||
case (uint32_t)LPUART1:
|
||||
if(HW_hlpuart1TxCb)
|
||||
{
|
||||
HW_hlpuart1TxCb();
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
Reference in New Issue
Block a user