- MyLibs - максимально платформонезависимые библиотеки (кроме разве что RTT) - RTT - STM32_General - библиотеки для периферии stm32
		
			
				
	
	
		
			156 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			156 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** 
 | 
						||
**************************************************************************
 | 
						||
* @file general_uart.h
 | 
						||
* @brief Заголовочный файл для модуля инициализации UART.
 | 
						||
**************************************************************************
 | 
						||
* @defgroup MY_LIBS_UART      UART Tools
 | 
						||
* @ingroup  MYLIBS_PERIPHERAL
 | 
						||
* @brief    Функции и макросы для удобной работы с UART.
 | 
						||
* @details
 | 
						||
Модуль предоставляет функции для базовой инициализации UART
 | 
						||
 | 
						||
 | 
						||
@par Пример использования:
 | 
						||
@code
 | 
						||
// Структура настроек UART
 | 
						||
UART_SettingsTypeDef uart2Settings;
 | 
						||
 | 
						||
void UART2_Init(void)
 | 
						||
{
 | 
						||
    // Настройка UART2 с 115200 бод, 8 бит, 1 стоп-бит, без паритета
 | 
						||
    uart2Settings.huart.Instance = USART2;
 | 
						||
    uart2Settings.huart.Init.BaudRate = 115200;
 | 
						||
    uart2Settings.huart.Init.WordLength = UART_WORDLENGTH_8B;
 | 
						||
    uart2Settings.huart.Init.StopBits = UART_STOPBITS_1;
 | 
						||
    uart2Settings.huart.Init.Parity = UART_PARITY_NONE;
 | 
						||
    uart2Settings.huart.Init.Mode = UART_MODE_TX_RX;
 | 
						||
    uart2Settings.huart.Init.HwFlowCtl = UART_HWCONTROL_NONE;
 | 
						||
    uart2Settings.huart.Init.OverSampling = UART_OVERSAMPLING_16;
 | 
						||
 | 
						||
    // Настройка GPIO
 | 
						||
    uart2Settings.GPIOx = GPIOA;
 | 
						||
    uart2Settings.GPIO_PIN_TX = GPIO_PIN_2;
 | 
						||
    uart2Settings.GPIO_PIN_RX = GPIO_PIN_3;
 | 
						||
 | 
						||
    // DMA не используется в этом примере
 | 
						||
    uart2Settings.DMAChannel = NULL;
 | 
						||
    uart2Settings.DMA_CHANNEL_X = 0;
 | 
						||
 | 
						||
    // Инициализация UART
 | 
						||
    if(UART_Base_Init(&uart2Settings) != HAL_OK)
 | 
						||
    {
 | 
						||
        // Обработка ошибки
 | 
						||
        Error_Handler();
 | 
						||
    }
 | 
						||
}
 | 
						||
@endcode
 | 
						||
 | 
						||
*  @note Требуется подключение модуля UART в библиотеке HAL 
 | 
						||
@code 
 | 
						||
#define HAL_UART_MODULE_ENABLED
 | 
						||
@endcode
 | 
						||
* @{
 | 
						||
*************************************************************************/
 | 
						||
#ifndef __UART_GENERAL_H_
 | 
						||
#define __UART_GENERAL_H_
 | 
						||
 | 
						||
/////////////////////////////////////////////////////////////////////
 | 
						||
/////////////////////////---USER SETTINGS---/////////////////////////
 | 
						||
/** 
 | 
						||
  * @addtogroup UART_INIT Init defines
 | 
						||
  * @ingroup    MY_LIBS_UART
 | 
						||
  * @brief      Настройка UART
 | 
						||
  * @{
 | 
						||
  */
 | 
						||
#define HAL_UART_MODULE_ENABLED   ///< Включение HAL UART
 | 
						||
 | 
						||
#define USE_USART1    ///< Включить USART1 в @ref UART_MspInit
 | 
						||
#define USE_USART2    ///< Включить USART2 в @ref UART_MspInit
 | 
						||
#define USE_USART3    ///< Включить USART3 в @ref UART_MspInit
 | 
						||
#define USE_UART4     ///< Включить UART4 в @ref UART_MspInit
 | 
						||
#define USE_UART5     ///< Включить UART5 в @ref UART_MspInit
 | 
						||
#define USE_USART6    ///< Включить USART6 в @ref UART_MspInit
 | 
						||
/** UART_INIT
 | 
						||
  * @}
 | 
						||
  */
 | 
						||
/////////////////////////---USER SETTINGS---/////////////////////////
 | 
						||
#include "mylibs_defs.h"
 | 
						||
 | 
						||
 | 
						||
 | 
						||
/////////////////////////////////////////////////////////////////////
 | 
						||
////////////////////////////---DEFINES---////////////////////////////
 | 
						||
 | 
						||
 | 
						||
                              
 | 
						||
////////////////////////////---DEFINES---////////////////////////////
 | 
						||
 | 
						||
 | 
						||
/////////////////////////////////////////////////////////////////////
 | 
						||
///////////////////////---STRUCTURES & ENUMS---//////////////////////
 | 
						||
/**
 | 
						||
  * @brief Структура настроек UART
 | 
						||
  * @details Содержит все необходимые параметры для инициализации UART,
 | 
						||
  * включая GPIO и DMA.
 | 
						||
  */
 | 
						||
typedef struct
 | 
						||
{
 | 
						||
  UART_HandleTypeDef huart;               ///< HAL handle UART
 | 
						||
  
 | 
						||
  GPIO_TypeDef *GPIOx;                    ///< Порт для UART
 | 
						||
  uint16_t GPIO_PIN_RX;                   ///< Пин приема
 | 
						||
  uint16_t GPIO_PIN_TX;                   ///< Пин передачи
 | 
						||
  
 | 
						||
  DMA_Stream_TypeDef *DMAChannel;         ///< Канал DMA (NULL если не нужен)
 | 
						||
  uint32_t DMA_CHANNEL_X;                 ///< Номер канала DMA (0 если не нужен)
 | 
						||
  
 | 
						||
} UART_SettingsTypeDef;
 | 
						||
 | 
						||
///////////////////////---STRUCTURES & ENUMS---//////////////////////
 | 
						||
 | 
						||
 | 
						||
/////////////////////////////////////////////////////////////////////
 | 
						||
///////////////////////////---FUNCTIONS---///////////////////////////
 | 
						||
 | 
						||
/* Инициализация UART с использованием структуры настроек */
 | 
						||
HAL_StatusTypeDef UART_Base_Init(UART_SettingsTypeDef *suart);
 | 
						||
 | 
						||
/* Проверка корректности структуры настроек UART */
 | 
						||
HAL_StatusTypeDef UART_Check_Init_Struct(UART_SettingsTypeDef *suart);
 | 
						||
 | 
						||
/* Инициализация тактирования и прерываний для выбранного UART */
 | 
						||
void UART_MspInit(UART_HandleTypeDef *huart);
 | 
						||
 | 
						||
/* Деинициализация тактирования и прерываний для выбранного UART */
 | 
						||
void UART_MspDeInit(UART_HandleTypeDef *huart);
 | 
						||
 | 
						||
  
 | 
						||
/** 
 | 
						||
 * @cond UART_INTERNAL
 | 
						||
 */
 | 
						||
 | 
						||
/* Настройка GPIO для UART */
 | 
						||
void UART_GPIO_Init(GPIO_TypeDef *GPIOx, uint16_t GPIO_PIN_RX, uint16_t GPIO_PIN_TX);
 | 
						||
 | 
						||
/* Настройка DMA для UART */
 | 
						||
void UART_DMA_Init(UART_HandleTypeDef *huart, DMA_HandleTypeDef *hdma_rx, DMA_Stream_TypeDef *DMAChannel, uint32_t DMA_CHANNEL_X);
 | 
						||
 | 
						||
#ifndef __USER_LINKDMA
 | 
						||
/**  
 | 
						||
  * @brief  Аналог HAL макроса для привязки DMA к UART.
 | 
						||
  * @note   @ref __HAL_LINKDMA.
 | 
						||
  */
 | 
						||
#define __USER_LINKDMA(__HANDLE__, __PPP_DMA_FIELD__, __DMA_HANDLE__)   \
 | 
						||
do{                                                                     \
 | 
						||
(__HANDLE__)->__PPP_DMA_FIELD__ = (__DMA_HANDLE__);                     \
 | 
						||
(__DMA_HANDLE__)->Parent = (__HANDLE__);} while(0U)
 | 
						||
#endif
 | 
						||
 
 | 
						||
/** @endcond */
 | 
						||
///////////////////////////---FUNCTIONS---///////////////////////////
 | 
						||
 | 
						||
#endif // __UART_GENERAL_H_
 | 
						||
 | 
						||
/** MY_LIBS_UART
 | 
						||
  * @}
 | 
						||
  */ |