/*********************************UART************************************** Данный файл содержит объявления базовых функции и дефайны для инициализации UART. ***************************************************************************/ #ifndef __UART_GENERAL_H_ #define __UART_GENERAL_H_ ////////////////////////////////////////////////////////////////////// /////////////////////////---USER SETTINGS---///////////////////////// #define HAL_UART_MODULE_ENABLED // need to uncomment these defines in stm32f4xx_hal_conf.h #define HAL_USART_MODULE_ENABLED // also need to add hal_uart.c (source code) //#define USE_USART1 //#define USE_USART2 //#define USE_USART3 //#define USE_UART4 //#define USE_UART5 //#define USE_USART6 /* note: used uart defines in modbus.h */ /////////////////////////---USER SETTINGS---///////////////////////// #include "modbus.h" ///////////////////////////////////////////////////////////////////// ////////////////////////////---DEFINES---//////////////////////////// #include "periph_general.h" /** * @brief Analog for HAL define. Remade with pointer to structure. * @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) ////////////////////////////---DEFINES---//////////////////////////// ///////////////////////////////////////////////////////////////////// ///////////////////////---STRUCTURES & ENUMS---////////////////////// typedef struct // struct with settings for custom function { UART_HandleTypeDef huart; GPIO_TypeDef *GPIOx; uint16_t GPIO_PIN_RX; uint16_t GPIO_PIN_TX; DMA_Stream_TypeDef *DMAChannel; // DMAChannel = 0 if doesnt need uint32_t DMA_CHANNEL_X; // DMAChannel = 0 if doesnt need }UART_SettingsTypeDef; ///////////////////////---STRUCTURES & ENUMS---////////////////////// ///////////////////////////////////////////////////////////////////// ///////////////////////////---FUNCTIONS---/////////////////////////// /** * @brief Initialize UART with UART_SettingsTypeDef structure. * @param suart - указатель на структуру с настройками UART. * @return HAL status. * @note Данная структура содержит хендл ЮАРТ и настройки перефирии (GPIO) */ HAL_StatusTypeDef UART_Base_Init(UART_SettingsTypeDef *suart); /** * @brief Initialize GPIO for UART. * @param GPIOx - порт для настройки. * @param GPIO_PIN_RX - пин для настройки на прием. * @param GPIO_PIN_TX - пин для настройки на передачу. */ void UART_GPIO_Init(GPIO_TypeDef *GPIOx, uint16_t GPIO_PIN_RX, uint16_t GPIO_PIN_TX); /** * @brief Initialize DMA for UART. * @param huart - указатель на хендл UART для настройки DMA. * @param hdma_rx - указатель на хендл DMA для линии приема UART. * @param DMAChannel - указатель на канал DMA/поток DMA в STM32F407. * @param DMA_CHANNEL_X - канал DMA. */ void UART_DMA_Init(UART_HandleTypeDef *huart, DMA_HandleTypeDef *hdma_rx, DMA_Stream_TypeDef *DMAChannel, uint32_t DMA_CHANNEL_X); /** * @brief Initialize UART & DMA clock and interrupt. * @param huart - указатель на хендл UART для инициализации. * @note Чтобы не генерировать функцию с иницилизацией неиспользуемых UART, дефайнами определяются используемые UART. */ void UART_MspInit(UART_HandleTypeDef *huart); /** * @brief Deinitialize UART & DMA clock and interrupt. * @param huart - указатель на хендл UART для деинициализации. * @note Чтобы не генерировать функцию с деиницилизацией неиспользуемых UART, дефайнами в rs_message.h определяются используемые UART. */ void UART_MspDeInit(UART_HandleTypeDef *huart); /** * @brief Check that uart init structure have correct values. * @param suart - указатель на структуру с настройками UART. * @return HAL status. */ HAL_StatusTypeDef Check_UART_Init_Struct(UART_SettingsTypeDef *suart); ///////////////////////////---FUNCTIONS---/////////////////////////// #endif // __UART_GENERAL_H_