/** ************************************************************************** * @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 * @} */