usart.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. /* USER CODE BEGIN Header */
  2. /**
  3. ******************************************************************************
  4. * @file usart.c
  5. * @brief This file provides code for the configuration
  6. * of the USART instances.
  7. ******************************************************************************
  8. * @attention
  9. *
  10. * Copyright (c) 2026 STMicroelectronics.
  11. * All rights reserved.
  12. *
  13. * This software is licensed under terms that can be found in the LICENSE file
  14. * in the root directory of this software component.
  15. * If no LICENSE file comes with this software, it is provided AS-IS.
  16. *
  17. ******************************************************************************
  18. */
  19. /* USER CODE END Header */
  20. /* Includes ------------------------------------------------------------------*/
  21. #include "usart.h"
  22. /* USER CODE BEGIN 0 */
  23. /* USER CODE END 0 */
  24. UART_HandleTypeDef huart4;
  25. UART_HandleTypeDef huart1;
  26. UART_HandleTypeDef huart2;
  27. DMA_HandleTypeDef hdma_uart4_rx;
  28. DMA_HandleTypeDef hdma_uart4_tx;
  29. DMA_HandleTypeDef hdma_usart1_rx;
  30. DMA_HandleTypeDef hdma_usart1_tx;
  31. DMA_HandleTypeDef hdma_usart2_rx;
  32. DMA_HandleTypeDef hdma_usart2_tx;
  33. /* UART4 init function */
  34. void MX_UART4_Init(void)
  35. {
  36. /* USER CODE BEGIN UART4_Init 0 */
  37. /* USER CODE END UART4_Init 0 */
  38. /* USER CODE BEGIN UART4_Init 1 */
  39. /* USER CODE END UART4_Init 1 */
  40. huart4.Instance = UART4;
  41. huart4.Init.BaudRate = 115200;
  42. huart4.Init.WordLength = UART_WORDLENGTH_8B;
  43. huart4.Init.StopBits = UART_STOPBITS_1;
  44. huart4.Init.Parity = UART_PARITY_NONE;
  45. huart4.Init.Mode = UART_MODE_TX_RX;
  46. huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  47. huart4.Init.OverSampling = UART_OVERSAMPLING_16;
  48. if (HAL_UART_Init(&huart4) != HAL_OK)
  49. {
  50. Error_Handler();
  51. }
  52. /* USER CODE BEGIN UART4_Init 2 */
  53. /* USER CODE END UART4_Init 2 */
  54. }
  55. /* USART1 init function */
  56. void MX_USART1_UART_Init(void)
  57. {
  58. /* USER CODE BEGIN USART1_Init 0 */
  59. /* USER CODE END USART1_Init 0 */
  60. /* USER CODE BEGIN USART1_Init 1 */
  61. /* USER CODE END USART1_Init 1 */
  62. huart1.Instance = USART1;
  63. huart1.Init.BaudRate = 115200;
  64. huart1.Init.WordLength = UART_WORDLENGTH_8B;
  65. huart1.Init.StopBits = UART_STOPBITS_1;
  66. huart1.Init.Parity = UART_PARITY_NONE;
  67. huart1.Init.Mode = UART_MODE_TX_RX;
  68. huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  69. huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  70. if (HAL_UART_Init(&huart1) != HAL_OK)
  71. {
  72. Error_Handler();
  73. }
  74. /* USER CODE BEGIN USART1_Init 2 */
  75. /* USER CODE END USART1_Init 2 */
  76. }
  77. /* USART2 init function */
  78. void MX_USART2_UART_Init(void)
  79. {
  80. /* USER CODE BEGIN USART2_Init 0 */
  81. /* USER CODE END USART2_Init 0 */
  82. /* USER CODE BEGIN USART2_Init 1 */
  83. /* USER CODE END USART2_Init 1 */
  84. huart2.Instance = USART2;
  85. huart2.Init.BaudRate = 115200;
  86. huart2.Init.WordLength = UART_WORDLENGTH_8B;
  87. huart2.Init.StopBits = UART_STOPBITS_1;
  88. huart2.Init.Parity = UART_PARITY_NONE;
  89. huart2.Init.Mode = UART_MODE_TX_RX;
  90. huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  91. huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  92. if (HAL_UART_Init(&huart2) != HAL_OK)
  93. {
  94. Error_Handler();
  95. }
  96. /* USER CODE BEGIN USART2_Init 2 */
  97. /* USER CODE END USART2_Init 2 */
  98. }
  99. void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
  100. {
  101. GPIO_InitTypeDef GPIO_InitStruct = {0};
  102. if(uartHandle->Instance==UART4)
  103. {
  104. /* USER CODE BEGIN UART4_MspInit 0 */
  105. /* USER CODE END UART4_MspInit 0 */
  106. /* UART4 clock enable */
  107. __HAL_RCC_UART4_CLK_ENABLE();
  108. __HAL_RCC_GPIOC_CLK_ENABLE();
  109. /**UART4 GPIO Configuration
  110. PC10 ------> UART4_TX
  111. PC11 ------> UART4_RX
  112. */
  113. GPIO_InitStruct.Pin = GPIO_PIN_10;
  114. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  115. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  116. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  117. GPIO_InitStruct.Pin = GPIO_PIN_11;
  118. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  119. GPIO_InitStruct.Pull = GPIO_NOPULL;
  120. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  121. /* UART4 DMA Init */
  122. /* UART4_RX Init */
  123. hdma_uart4_rx.Instance = DMA2_Channel3;
  124. hdma_uart4_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
  125. hdma_uart4_rx.Init.PeriphInc = DMA_PINC_DISABLE;
  126. hdma_uart4_rx.Init.MemInc = DMA_MINC_ENABLE;
  127. hdma_uart4_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  128. hdma_uart4_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  129. hdma_uart4_rx.Init.Mode = DMA_NORMAL;
  130. hdma_uart4_rx.Init.Priority = DMA_PRIORITY_LOW;
  131. if (HAL_DMA_Init(&hdma_uart4_rx) != HAL_OK)
  132. {
  133. Error_Handler();
  134. }
  135. __HAL_LINKDMA(uartHandle,hdmarx,hdma_uart4_rx);
  136. /* UART4_TX Init */
  137. hdma_uart4_tx.Instance = DMA2_Channel5;
  138. hdma_uart4_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
  139. hdma_uart4_tx.Init.PeriphInc = DMA_PINC_DISABLE;
  140. hdma_uart4_tx.Init.MemInc = DMA_MINC_ENABLE;
  141. hdma_uart4_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  142. hdma_uart4_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  143. hdma_uart4_tx.Init.Mode = DMA_NORMAL;
  144. hdma_uart4_tx.Init.Priority = DMA_PRIORITY_LOW;
  145. if (HAL_DMA_Init(&hdma_uart4_tx) != HAL_OK)
  146. {
  147. Error_Handler();
  148. }
  149. __HAL_LINKDMA(uartHandle,hdmatx,hdma_uart4_tx);
  150. /* UART4 interrupt Init */
  151. HAL_NVIC_SetPriority(UART4_IRQn, 0, 0);
  152. HAL_NVIC_EnableIRQ(UART4_IRQn);
  153. /* USER CODE BEGIN UART4_MspInit 1 */
  154. /* USER CODE END UART4_MspInit 1 */
  155. }
  156. else if(uartHandle->Instance==USART1)
  157. {
  158. /* USER CODE BEGIN USART1_MspInit 0 */
  159. /* USER CODE END USART1_MspInit 0 */
  160. /* USART1 clock enable */
  161. __HAL_RCC_USART1_CLK_ENABLE();
  162. __HAL_RCC_GPIOA_CLK_ENABLE();
  163. /**USART1 GPIO Configuration
  164. PA9 ------> USART1_TX
  165. PA10 ------> USART1_RX
  166. */
  167. GPIO_InitStruct.Pin = GPIO_PIN_9;
  168. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  169. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  170. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  171. GPIO_InitStruct.Pin = GPIO_PIN_10;
  172. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  173. GPIO_InitStruct.Pull = GPIO_NOPULL;
  174. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  175. /* USART1 DMA Init */
  176. /* USART1_RX Init */
  177. hdma_usart1_rx.Instance = DMA1_Channel5;
  178. hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
  179. hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
  180. hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE;
  181. hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  182. hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  183. hdma_usart1_rx.Init.Mode = DMA_NORMAL;
  184. hdma_usart1_rx.Init.Priority = DMA_PRIORITY_LOW;
  185. if (HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK)
  186. {
  187. Error_Handler();
  188. }
  189. __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart1_rx);
  190. /* USART1_TX Init */
  191. hdma_usart1_tx.Instance = DMA1_Channel4;
  192. hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
  193. hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
  194. hdma_usart1_tx.Init.MemInc = DMA_MINC_ENABLE;
  195. hdma_usart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  196. hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  197. hdma_usart1_tx.Init.Mode = DMA_NORMAL;
  198. hdma_usart1_tx.Init.Priority = DMA_PRIORITY_LOW;
  199. if (HAL_DMA_Init(&hdma_usart1_tx) != HAL_OK)
  200. {
  201. Error_Handler();
  202. }
  203. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart1_tx);
  204. /* USART1 interrupt Init */
  205. HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
  206. HAL_NVIC_EnableIRQ(USART1_IRQn);
  207. /* USER CODE BEGIN USART1_MspInit 1 */
  208. /* USER CODE END USART1_MspInit 1 */
  209. }
  210. else if(uartHandle->Instance==USART2)
  211. {
  212. /* USER CODE BEGIN USART2_MspInit 0 */
  213. /* USER CODE END USART2_MspInit 0 */
  214. /* USART2 clock enable */
  215. __HAL_RCC_USART2_CLK_ENABLE();
  216. __HAL_RCC_GPIOA_CLK_ENABLE();
  217. /**USART2 GPIO Configuration
  218. PA2 ------> USART2_TX
  219. PA3 ------> USART2_RX
  220. */
  221. GPIO_InitStruct.Pin = GPIO_PIN_2;
  222. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  223. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  224. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  225. GPIO_InitStruct.Pin = GPIO_PIN_3;
  226. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  227. GPIO_InitStruct.Pull = GPIO_NOPULL;
  228. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  229. /* USART2 DMA Init */
  230. /* USART2_RX Init */
  231. hdma_usart2_rx.Instance = DMA1_Channel6;
  232. hdma_usart2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
  233. hdma_usart2_rx.Init.PeriphInc = DMA_PINC_DISABLE;
  234. hdma_usart2_rx.Init.MemInc = DMA_MINC_ENABLE;
  235. hdma_usart2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  236. hdma_usart2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  237. hdma_usart2_rx.Init.Mode = DMA_NORMAL;
  238. hdma_usart2_rx.Init.Priority = DMA_PRIORITY_LOW;
  239. if (HAL_DMA_Init(&hdma_usart2_rx) != HAL_OK)
  240. {
  241. Error_Handler();
  242. }
  243. __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart2_rx);
  244. /* USART2_TX Init */
  245. hdma_usart2_tx.Instance = DMA1_Channel7;
  246. hdma_usart2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
  247. hdma_usart2_tx.Init.PeriphInc = DMA_PINC_DISABLE;
  248. hdma_usart2_tx.Init.MemInc = DMA_MINC_ENABLE;
  249. hdma_usart2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  250. hdma_usart2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  251. hdma_usart2_tx.Init.Mode = DMA_NORMAL;
  252. hdma_usart2_tx.Init.Priority = DMA_PRIORITY_LOW;
  253. if (HAL_DMA_Init(&hdma_usart2_tx) != HAL_OK)
  254. {
  255. Error_Handler();
  256. }
  257. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
  258. /* USART2 interrupt Init */
  259. HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
  260. HAL_NVIC_EnableIRQ(USART2_IRQn);
  261. /* USER CODE BEGIN USART2_MspInit 1 */
  262. /* USER CODE END USART2_MspInit 1 */
  263. }
  264. }
  265. void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
  266. {
  267. if(uartHandle->Instance==UART4)
  268. {
  269. /* USER CODE BEGIN UART4_MspDeInit 0 */
  270. /* USER CODE END UART4_MspDeInit 0 */
  271. /* Peripheral clock disable */
  272. __HAL_RCC_UART4_CLK_DISABLE();
  273. /**UART4 GPIO Configuration
  274. PC10 ------> UART4_TX
  275. PC11 ------> UART4_RX
  276. */
  277. HAL_GPIO_DeInit(GPIOC, GPIO_PIN_10|GPIO_PIN_11);
  278. /* UART4 DMA DeInit */
  279. HAL_DMA_DeInit(uartHandle->hdmarx);
  280. HAL_DMA_DeInit(uartHandle->hdmatx);
  281. /* UART4 interrupt Deinit */
  282. HAL_NVIC_DisableIRQ(UART4_IRQn);
  283. /* USER CODE BEGIN UART4_MspDeInit 1 */
  284. /* USER CODE END UART4_MspDeInit 1 */
  285. }
  286. else if(uartHandle->Instance==USART1)
  287. {
  288. /* USER CODE BEGIN USART1_MspDeInit 0 */
  289. /* USER CODE END USART1_MspDeInit 0 */
  290. /* Peripheral clock disable */
  291. __HAL_RCC_USART1_CLK_DISABLE();
  292. /**USART1 GPIO Configuration
  293. PA9 ------> USART1_TX
  294. PA10 ------> USART1_RX
  295. */
  296. HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);
  297. /* USART1 DMA DeInit */
  298. HAL_DMA_DeInit(uartHandle->hdmarx);
  299. HAL_DMA_DeInit(uartHandle->hdmatx);
  300. /* USART1 interrupt Deinit */
  301. HAL_NVIC_DisableIRQ(USART1_IRQn);
  302. /* USER CODE BEGIN USART1_MspDeInit 1 */
  303. /* USER CODE END USART1_MspDeInit 1 */
  304. }
  305. else if(uartHandle->Instance==USART2)
  306. {
  307. /* USER CODE BEGIN USART2_MspDeInit 0 */
  308. /* USER CODE END USART2_MspDeInit 0 */
  309. /* Peripheral clock disable */
  310. __HAL_RCC_USART2_CLK_DISABLE();
  311. /**USART2 GPIO Configuration
  312. PA2 ------> USART2_TX
  313. PA3 ------> USART2_RX
  314. */
  315. HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3);
  316. /* USART2 DMA DeInit */
  317. HAL_DMA_DeInit(uartHandle->hdmarx);
  318. HAL_DMA_DeInit(uartHandle->hdmatx);
  319. /* USART2 interrupt Deinit */
  320. HAL_NVIC_DisableIRQ(USART2_IRQn);
  321. /* USER CODE BEGIN USART2_MspDeInit 1 */
  322. /* USER CODE END USART2_MspDeInit 1 */
  323. }
  324. }
  325. /* USER CODE BEGIN 1 */
  326. /* USER CODE END 1 */