18#include "general_uart.h"
33 if(Check_UART_Init_Struct(suart) != HAL_OK)
36 suart->huart.Init.Mode = UART_MODE_TX_RX;
38 UART_MspInit(&suart->huart);
41 if (HAL_UART_Init(&suart->huart) != HAL_OK)
48 UART_GPIO_Init(suart->GPIOx, suart->GPIO_PIN_RX, suart->GPIO_PIN_TX);
50 __HAL_UART_ENABLE_IT(&suart->huart, UART_IT_IDLE);
52 if (suart->DMAChannel != 0)
53 UART_DMA_Init(&suart->huart, suart->huart.hdmarx, suart->DMAChannel, suart->DMA_CHANNEL_X);
66void UART_GPIO_Init(GPIO_TypeDef *GPIOx, uint16_t GPIO_PIN_RX, uint16_t GPIO_PIN_TX)
68 GPIO_InitTypeDef GPIO_InitStruct = {0};
77#if defined(STM32F407xx)
78 GPIO_InitStruct.Pin = GPIO_PIN_TX|GPIO_PIN_RX;
79 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
80 GPIO_InitStruct.Pull = GPIO_NOPULL;
81 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
82 GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
83 HAL_GPIO_Init(GPIOx, &GPIO_InitStruct);
84#elif defined(STM32F103xG)
86 GPIO_InitStruct.Pin = GPIO_PIN_TX;
87 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
88 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
89 HAL_GPIO_Init(GPIOx, &GPIO_InitStruct);
92 GPIO_InitStruct.Pin = GPIO_PIN_RX;
93 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
94 GPIO_InitStruct.Pull = GPIO_NOPULL;
95 HAL_GPIO_Init(GPIOx, &GPIO_InitStruct);
106void UART_DMA_Init(UART_HandleTypeDef *huart, DMA_HandleTypeDef *hdma_rx, DMA_Stream_TypeDef *DMAChannel, uint32_t DMA_CHANNEL_X)
114 hdma_rx->Instance = DMAChannel;
115#if defined(STM32F407xx)
116 hdma_rx->Init.Channel = DMA_CHANNEL_X;
118 hdma_rx->Init.Direction = DMA_PERIPH_TO_MEMORY;
119 hdma_rx->Init.PeriphInc = DMA_PINC_DISABLE;
120 hdma_rx->Init.MemInc = DMA_MINC_ENABLE;
121 hdma_rx->Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
122 hdma_rx->Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
123 hdma_rx->Init.Mode = DMA_CIRCULAR;
124 hdma_rx->Init.Priority = DMA_PRIORITY_LOW;
125 if (HAL_DMA_Init(hdma_rx) != HAL_OK)
130 __USER_LINKDMA(huart,hdmarx,hdma_rx);
143void UART_MspInit(UART_HandleTypeDef *huart)
155 else if(huart->Instance==USART1)
159 __HAL_RCC_DMA2_CLK_ENABLE();
161 HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 0, 0);
162 HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);
165 __HAL_RCC_USART1_CLK_ENABLE();
168 HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
169 HAL_NVIC_EnableIRQ(USART1_IRQn);
173 else if(huart->Instance==USART2)
176 __HAL_RCC_DMA1_CLK_ENABLE();
178 HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 0, 0);
179 HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn);
182 __HAL_RCC_USART2_CLK_ENABLE();
185 HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
186 HAL_NVIC_EnableIRQ(USART2_IRQn);
190 else if(huart->Instance==USART3)
193 __HAL_RCC_DMA1_CLK_ENABLE();
195 HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 0, 0);
196 HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
199 __HAL_RCC_USART3_CLK_ENABLE();
201 HAL_NVIC_SetPriority(USART3_IRQn, 0, 0);
202 HAL_NVIC_EnableIRQ(USART3_IRQn);
206 else if(huart->Instance==UART4)
209 __HAL_RCC_DMA1_CLK_ENABLE();
211 HAL_NVIC_SetPriority(DMA1_Stream2_IRQn, 0, 0);
212 HAL_NVIC_EnableIRQ(DMA1_Stream2_IRQn);
215 __HAL_RCC_UART4_CLK_ENABLE();
218 HAL_NVIC_SetPriority(UART4_IRQn, 0, 0);
219 HAL_NVIC_EnableIRQ(UART4_IRQn);
223 else if(huart->Instance==UART5)
226 __HAL_RCC_DMA1_CLK_ENABLE();
228 HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 0, 0);
229 HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);
232 __HAL_RCC_DMA1_CLK_ENABLE();
235 HAL_NVIC_SetPriority(UART5_IRQn, 0, 0);
236 HAL_NVIC_EnableIRQ(UART5_IRQn);
240 else if(huart->Instance==USART6)
243 __HAL_RCC_DMA2_CLK_ENABLE();
245 HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 0, 0);
246 HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn);
249 __HAL_RCC_USART6_CLK_ENABLE();
252 HAL_NVIC_SetPriority(USART6_IRQn, 0, 0);
253 HAL_NVIC_EnableIRQ(USART6_IRQn);
264void UART_MspDeInit(UART_HandleTypeDef *huart)
270 else if(huart->Instance==USART1)
280 __HAL_RCC_USART1_FORCE_RESET();
281 __HAL_RCC_USART1_RELEASE_RESET();
285 else if(huart->Instance==USART2)
294 __HAL_RCC_USART2_FORCE_RESET();
295 __HAL_RCC_USART2_RELEASE_RESET();
299 else if(huart->Instance==USART3)
308 __HAL_RCC_USART3_FORCE_RESET();
309 __HAL_RCC_USART3_RELEASE_RESET();
313 else if(huart->Instance==UART4)
322 __HAL_RCC_UART4_FORCE_RESET();
323 __HAL_RCC_UART4_RELEASE_RESET();
327 else if(huart->Instance==UART5)
336 __HAL_RCC_UART5_FORCE_RESET();
337 __HAL_RCC_UART5_RELEASE_RESET();
341 else if(huart->Instance==USART6)
350 __HAL_RCC_USART6_FORCE_RESET();
351 __HAL_RCC_USART6_RELEASE_RESET();
364 if (!IS_UART_INSTANCE(suart->huart.Instance))
367 if (!IS_UART_BAUDRATE(suart->huart.Init.BaudRate) || (suart->huart.Init.BaudRate == NULL))
370 if (!IS_GPIO_ALL_INSTANCE(suart->GPIOx))
373 if (!IS_GPIO_PIN(suart->GPIO_PIN_RX) && !IS_GPIO_PIN(suart->GPIO_PIN_TX))
Заголовочный файл для модуля инициализации портов и работы с ними.
#define MyLibs_Error_Handler(params)
Error_Handler который будет вызыватся в библиотеке
HAL_StatusTypeDef GPIO_Clock_Enable(GPIO_TypeDef *GPIOx)
Включить тактирование порта GPIO.