69void UART_GPIO_Init(GPIO_TypeDef *GPIOx, uint16_t GPIO_PIN_RX, uint16_t GPIO_PIN_TX)
71 GPIO_InitTypeDef GPIO_InitStruct = {0};
81 GPIO_InitStruct.Pin = GPIO_PIN_TX|GPIO_PIN_RX;
82 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
83 GPIO_InitStruct.Pull = GPIO_NOPULL;
84 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
85 GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
86 HAL_GPIO_Init(GPIOx, &GPIO_InitStruct);
87#elif defined(STM32F1xx)
89 GPIO_InitStruct.Pin = GPIO_PIN_TX;
90 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
91 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
92 HAL_GPIO_Init(GPIOx, &GPIO_InitStruct);
95 GPIO_InitStruct.Pin = GPIO_PIN_RX;
96 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
97 GPIO_InitStruct.Pull = GPIO_NOPULL;
98 HAL_GPIO_Init(GPIOx, &GPIO_InitStruct);
109void UART_DMA_Init(UART_HandleTypeDef *huart, DMA_HandleTypeDef *hdma_rx, DMA_Stream_TypeDef *DMAChannel, uint32_t DMA_CHANNEL_X)
117 hdma_rx->Instance = DMAChannel;
118#if defined(STM32F4xx)
119 hdma_rx->Init.Channel = DMA_CHANNEL_X;
121 hdma_rx->Init.Direction = DMA_PERIPH_TO_MEMORY;
122 hdma_rx->Init.PeriphInc = DMA_PINC_DISABLE;
123 hdma_rx->Init.MemInc = DMA_MINC_ENABLE;
124 hdma_rx->Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
125 hdma_rx->Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
126 hdma_rx->Init.Mode = DMA_CIRCULAR;
127 hdma_rx->Init.Priority = DMA_PRIORITY_LOW;
128 if (HAL_DMA_Init(hdma_rx) != HAL_OK)
133 __USER_LINKDMA(huart,hdmarx,hdma_rx);
158 else if(huart->Instance==USART1)
162 __HAL_RCC_DMA2_CLK_ENABLE();
164 HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 0, 0);
165 HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);
168 __HAL_RCC_USART1_CLK_ENABLE();
171 HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
172 HAL_NVIC_EnableIRQ(USART1_IRQn);
176 else if(huart->Instance==USART2)
179 __HAL_RCC_DMA1_CLK_ENABLE();
181 HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 0, 0);
182 HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn);
185 __HAL_RCC_USART2_CLK_ENABLE();
188 HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
189 HAL_NVIC_EnableIRQ(USART2_IRQn);
193 else if(huart->Instance==USART3)
196 __HAL_RCC_DMA1_CLK_ENABLE();
198 HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 0, 0);
199 HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
202 __HAL_RCC_USART3_CLK_ENABLE();
204 HAL_NVIC_SetPriority(USART3_IRQn, 0, 0);
205 HAL_NVIC_EnableIRQ(USART3_IRQn);
209 else if(huart->Instance==UART4)
212 __HAL_RCC_DMA1_CLK_ENABLE();
214 HAL_NVIC_SetPriority(DMA1_Stream2_IRQn, 0, 0);
215 HAL_NVIC_EnableIRQ(DMA1_Stream2_IRQn);
218 __HAL_RCC_UART4_CLK_ENABLE();
221 HAL_NVIC_SetPriority(UART4_IRQn, 0, 0);
222 HAL_NVIC_EnableIRQ(UART4_IRQn);
226 else if(huart->Instance==UART5)
229 __HAL_RCC_DMA1_CLK_ENABLE();
231 HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 0, 0);
232 HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);
235 __HAL_RCC_DMA1_CLK_ENABLE();
238 HAL_NVIC_SetPriority(UART5_IRQn, 0, 0);
239 HAL_NVIC_EnableIRQ(UART5_IRQn);
243 else if(huart->Instance==USART6)
246 __HAL_RCC_DMA2_CLK_ENABLE();
248 HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 0, 0);
249 HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn);
252 __HAL_RCC_USART6_CLK_ENABLE();
255 HAL_NVIC_SetPriority(USART6_IRQn, 0, 0);
256 HAL_NVIC_EnableIRQ(USART6_IRQn);
273 else if(huart->Instance==USART1)
283 __HAL_RCC_USART1_FORCE_RESET();
284 __HAL_RCC_USART1_RELEASE_RESET();
288 else if(huart->Instance==USART2)
297 __HAL_RCC_USART2_FORCE_RESET();
298 __HAL_RCC_USART2_RELEASE_RESET();
302 else if(huart->Instance==USART3)
311 __HAL_RCC_USART3_FORCE_RESET();
312 __HAL_RCC_USART3_RELEASE_RESET();
316 else if(huart->Instance==UART4)
325 __HAL_RCC_UART4_FORCE_RESET();
326 __HAL_RCC_UART4_RELEASE_RESET();
330 else if(huart->Instance==UART5)
339 __HAL_RCC_UART5_FORCE_RESET();
340 __HAL_RCC_UART5_RELEASE_RESET();
344 else if(huart->Instance==USART6)
353 __HAL_RCC_USART6_FORCE_RESET();
354 __HAL_RCC_USART6_RELEASE_RESET();