- максимально убрана зависимость от HAL - можно использовать и без него, чисто на cmsis - документирован uart - документирован spi - добавлены примеры использования в general_periph - всякие фиксы документации
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
|
||
* @}
|
||
*/ |