usart.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747
  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) 2024 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. #include "dtuaes.h"
  24. uint8_t recvLength = 0; //接收一帧数据的长度
  25. uint8_t U1recvLength = 0; //接收一帧数据的长度
  26. uint8_t U1recvBuff[2048];
  27. uint8_t U4recvBuff[2048];
  28. uint8_t recvBuff[2048];
  29. uint8_t U1reFlag = 0;
  30. extern Menu_table menu;
  31. /* USER CODE END 0 */
  32. UART_HandleTypeDef huart4;
  33. UART_HandleTypeDef huart5;
  34. UART_HandleTypeDef huart1;
  35. UART_HandleTypeDef huart2;
  36. UART_HandleTypeDef huart3;
  37. DMA_HandleTypeDef hdma_uart4_rx;
  38. DMA_HandleTypeDef hdma_uart4_tx;
  39. DMA_HandleTypeDef hdma_usart1_rx;
  40. DMA_HandleTypeDef hdma_usart1_tx;
  41. DMA_HandleTypeDef hdma_usart2_rx;
  42. DMA_HandleTypeDef hdma_usart2_tx;
  43. DMA_HandleTypeDef hdma_usart3_rx;
  44. DMA_HandleTypeDef hdma_usart3_tx;
  45. /* UART4 init function */
  46. void MX_UART4_Init(void)
  47. {
  48. /* USER CODE BEGIN UART4_Init 0 */
  49. /* USER CODE END UART4_Init 0 */
  50. /* USER CODE BEGIN UART4_Init 1 */
  51. /* USER CODE END UART4_Init 1 */
  52. huart4.Instance = UART4;
  53. huart4.Init.BaudRate = 115200;
  54. huart4.Init.WordLength = UART_WORDLENGTH_8B;
  55. huart4.Init.StopBits = UART_STOPBITS_1;
  56. huart4.Init.Parity = UART_PARITY_NONE;
  57. huart4.Init.Mode = UART_MODE_TX_RX;
  58. huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  59. huart4.Init.OverSampling = UART_OVERSAMPLING_16;
  60. if (HAL_UART_Init(&huart4) != HAL_OK)
  61. {
  62. Error_Handler();
  63. }
  64. /* USER CODE BEGIN UART4_Init 2 */
  65. /* USER CODE END UART4_Init 2 */
  66. }
  67. /* UART5 init function */
  68. void MX_UART5_Init(void)
  69. {
  70. /* USER CODE BEGIN UART5_Init 0 */
  71. /* USER CODE END UART5_Init 0 */
  72. /* USER CODE BEGIN UART5_Init 1 */
  73. /* USER CODE END UART5_Init 1 */
  74. huart5.Instance = UART5;
  75. huart5.Init.BaudRate = 115200;
  76. huart5.Init.WordLength = UART_WORDLENGTH_8B;
  77. huart5.Init.StopBits = UART_STOPBITS_1;
  78. huart5.Init.Parity = UART_PARITY_NONE;
  79. huart5.Init.Mode = UART_MODE_TX_RX;
  80. huart5.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  81. huart5.Init.OverSampling = UART_OVERSAMPLING_16;
  82. if (HAL_UART_Init(&huart5) != HAL_OK)
  83. {
  84. Error_Handler();
  85. }
  86. /* USER CODE BEGIN UART5_Init 2 */
  87. /* USER CODE END UART5_Init 2 */
  88. }
  89. /* USART1 init function */
  90. void MX_USART1_UART_Init(void)
  91. {
  92. /* USER CODE BEGIN USART1_Init 0 */
  93. /* USER CODE END USART1_Init 0 */
  94. /* USER CODE BEGIN USART1_Init 1 */
  95. /* USER CODE END USART1_Init 1 */
  96. huart1.Instance = USART1;
  97. huart1.Init.BaudRate = 115200;
  98. huart1.Init.WordLength = UART_WORDLENGTH_8B;
  99. huart1.Init.StopBits = UART_STOPBITS_1;
  100. huart1.Init.Parity = UART_PARITY_NONE;
  101. huart1.Init.Mode = UART_MODE_TX_RX;
  102. huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  103. huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  104. if (HAL_UART_Init(&huart1) != HAL_OK)
  105. {
  106. Error_Handler();
  107. }
  108. /* USER CODE BEGIN USART1_Init 2 */
  109. /* USER CODE END USART1_Init 2 */
  110. }
  111. /* USART2 init function */
  112. void MX_USART2_UART_Init(void)
  113. {
  114. /* USER CODE BEGIN USART2_Init 0 */
  115. /* USER CODE END USART2_Init 0 */
  116. /* USER CODE BEGIN USART2_Init 1 */
  117. /* USER CODE END USART2_Init 1 */
  118. huart2.Instance = USART2;
  119. huart2.Init.BaudRate = 115200;
  120. huart2.Init.WordLength = UART_WORDLENGTH_8B;
  121. huart2.Init.StopBits = UART_STOPBITS_1;
  122. huart2.Init.Parity = UART_PARITY_NONE;
  123. huart2.Init.Mode = UART_MODE_TX_RX;
  124. huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  125. huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  126. if (HAL_UART_Init(&huart2) != HAL_OK)
  127. {
  128. Error_Handler();
  129. }
  130. /* USER CODE BEGIN USART2_Init 2 */
  131. /* USER CODE END USART2_Init 2 */
  132. }
  133. /* USART3 init function */
  134. void MX_USART3_UART_Init(void)
  135. {
  136. /* USER CODE BEGIN USART3_Init 0 */
  137. /* USER CODE END USART3_Init 0 */
  138. /* USER CODE BEGIN USART3_Init 1 */
  139. /* USER CODE END USART3_Init 1 */
  140. huart3.Instance = USART3;
  141. huart3.Init.BaudRate = 115200;
  142. huart3.Init.WordLength = UART_WORDLENGTH_8B;
  143. huart3.Init.StopBits = UART_STOPBITS_1;
  144. huart3.Init.Parity = UART_PARITY_NONE;
  145. huart3.Init.Mode = UART_MODE_TX_RX;
  146. huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  147. huart3.Init.OverSampling = UART_OVERSAMPLING_16;
  148. if (HAL_UART_Init(&huart3) != HAL_OK)
  149. {
  150. Error_Handler();
  151. }
  152. /* USER CODE BEGIN USART3_Init 2 */
  153. /* USER CODE END USART3_Init 2 */
  154. }
  155. void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
  156. {
  157. GPIO_InitTypeDef GPIO_InitStruct = {0};
  158. if(uartHandle->Instance==UART4)
  159. {
  160. /* USER CODE BEGIN UART4_MspInit 0 */
  161. /* USER CODE END UART4_MspInit 0 */
  162. /* UART4 clock enable */
  163. __HAL_RCC_UART4_CLK_ENABLE();
  164. __HAL_RCC_GPIOC_CLK_ENABLE();
  165. /**UART4 GPIO Configuration
  166. PC10 ------> UART4_TX
  167. PC11 ------> UART4_RX
  168. */
  169. GPIO_InitStruct.Pin = GPIO_PIN_10;
  170. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  171. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  172. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  173. GPIO_InitStruct.Pin = GPIO_PIN_11;
  174. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  175. GPIO_InitStruct.Pull = GPIO_NOPULL;
  176. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  177. /* UART4 DMA Init */
  178. /* UART4_RX Init */
  179. hdma_uart4_rx.Instance = DMA2_Channel3;
  180. hdma_uart4_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
  181. hdma_uart4_rx.Init.PeriphInc = DMA_PINC_DISABLE;
  182. hdma_uart4_rx.Init.MemInc = DMA_MINC_ENABLE;
  183. hdma_uart4_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  184. hdma_uart4_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  185. hdma_uart4_rx.Init.Mode = DMA_NORMAL;
  186. hdma_uart4_rx.Init.Priority = DMA_PRIORITY_LOW;
  187. if (HAL_DMA_Init(&hdma_uart4_rx) != HAL_OK)
  188. {
  189. Error_Handler();
  190. }
  191. __HAL_LINKDMA(uartHandle,hdmarx,hdma_uart4_rx);
  192. /* UART4_TX Init */
  193. hdma_uart4_tx.Instance = DMA2_Channel5;
  194. hdma_uart4_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
  195. hdma_uart4_tx.Init.PeriphInc = DMA_PINC_DISABLE;
  196. hdma_uart4_tx.Init.MemInc = DMA_MINC_ENABLE;
  197. hdma_uart4_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  198. hdma_uart4_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  199. hdma_uart4_tx.Init.Mode = DMA_NORMAL;
  200. hdma_uart4_tx.Init.Priority = DMA_PRIORITY_LOW;
  201. if (HAL_DMA_Init(&hdma_uart4_tx) != HAL_OK)
  202. {
  203. Error_Handler();
  204. }
  205. __HAL_LINKDMA(uartHandle,hdmatx,hdma_uart4_tx);
  206. /* UART4 interrupt Init */
  207. HAL_NVIC_SetPriority(UART4_IRQn, 5, 0);
  208. HAL_NVIC_EnableIRQ(UART4_IRQn);
  209. /* USER CODE BEGIN UART4_MspInit 1 */
  210. /* USER CODE END UART4_MspInit 1 */
  211. }
  212. else if(uartHandle->Instance==UART5)
  213. {
  214. /* USER CODE BEGIN UART5_MspInit 0 */
  215. /* USER CODE END UART5_MspInit 0 */
  216. /* UART5 clock enable */
  217. __HAL_RCC_UART5_CLK_ENABLE();
  218. __HAL_RCC_GPIOC_CLK_ENABLE();
  219. __HAL_RCC_GPIOD_CLK_ENABLE();
  220. /**UART5 GPIO Configuration
  221. PC12 ------> UART5_TX
  222. PD2 ------> UART5_RX
  223. */
  224. GPIO_InitStruct.Pin = GPIO_PIN_12;
  225. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  226. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  227. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  228. GPIO_InitStruct.Pin = GPIO_PIN_2;
  229. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  230. GPIO_InitStruct.Pull = GPIO_NOPULL;
  231. HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  232. /* UART5 interrupt Init */
  233. HAL_NVIC_SetPriority(UART5_IRQn, 5, 0);
  234. HAL_NVIC_EnableIRQ(UART5_IRQn);
  235. /* USER CODE BEGIN UART5_MspInit 1 */
  236. /* USER CODE END UART5_MspInit 1 */
  237. }
  238. else if(uartHandle->Instance==USART1)
  239. {
  240. /* USER CODE BEGIN USART1_MspInit 0 */
  241. /* USER CODE END USART1_MspInit 0 */
  242. /* USART1 clock enable */
  243. __HAL_RCC_USART1_CLK_ENABLE();
  244. __HAL_RCC_GPIOA_CLK_ENABLE();
  245. /**USART1 GPIO Configuration
  246. PA9 ------> USART1_TX
  247. PA10 ------> USART1_RX
  248. */
  249. GPIO_InitStruct.Pin = GPIO_PIN_9;
  250. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  251. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  252. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  253. GPIO_InitStruct.Pin = GPIO_PIN_10;
  254. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  255. GPIO_InitStruct.Pull = GPIO_NOPULL;
  256. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  257. /* USART1 DMA Init */
  258. /* USART1_RX Init */
  259. hdma_usart1_rx.Instance = DMA1_Channel5;
  260. hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
  261. hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
  262. hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE;
  263. hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  264. hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  265. hdma_usart1_rx.Init.Mode = DMA_NORMAL;
  266. hdma_usart1_rx.Init.Priority = DMA_PRIORITY_LOW;
  267. if (HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK)
  268. {
  269. Error_Handler();
  270. }
  271. __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart1_rx);
  272. /* USART1_TX Init */
  273. hdma_usart1_tx.Instance = DMA1_Channel4;
  274. hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
  275. hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
  276. hdma_usart1_tx.Init.MemInc = DMA_MINC_ENABLE;
  277. hdma_usart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  278. hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  279. hdma_usart1_tx.Init.Mode = DMA_NORMAL;
  280. hdma_usart1_tx.Init.Priority = DMA_PRIORITY_LOW;
  281. if (HAL_DMA_Init(&hdma_usart1_tx) != HAL_OK)
  282. {
  283. Error_Handler();
  284. }
  285. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart1_tx);
  286. /* USART1 interrupt Init */
  287. HAL_NVIC_SetPriority(USART1_IRQn, 5, 0);
  288. HAL_NVIC_EnableIRQ(USART1_IRQn);
  289. /* USER CODE BEGIN USART1_MspInit 1 */
  290. /* USER CODE END USART1_MspInit 1 */
  291. }
  292. else if(uartHandle->Instance==USART2)
  293. {
  294. /* USER CODE BEGIN USART2_MspInit 0 */
  295. /* USER CODE END USART2_MspInit 0 */
  296. /* USART2 clock enable */
  297. __HAL_RCC_USART2_CLK_ENABLE();
  298. __HAL_RCC_GPIOA_CLK_ENABLE();
  299. /**USART2 GPIO Configuration
  300. PA2 ------> USART2_TX
  301. PA3 ------> USART2_RX
  302. */
  303. GPIO_InitStruct.Pin = GPIO_PIN_2;
  304. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  305. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  306. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  307. GPIO_InitStruct.Pin = GPIO_PIN_3;
  308. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  309. GPIO_InitStruct.Pull = GPIO_NOPULL;
  310. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  311. /* USART2 DMA Init */
  312. /* USART2_RX Init */
  313. hdma_usart2_rx.Instance = DMA1_Channel6;
  314. hdma_usart2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
  315. hdma_usart2_rx.Init.PeriphInc = DMA_PINC_DISABLE;
  316. hdma_usart2_rx.Init.MemInc = DMA_MINC_ENABLE;
  317. hdma_usart2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  318. hdma_usart2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  319. hdma_usart2_rx.Init.Mode = DMA_NORMAL;
  320. hdma_usart2_rx.Init.Priority = DMA_PRIORITY_LOW;
  321. if (HAL_DMA_Init(&hdma_usart2_rx) != HAL_OK)
  322. {
  323. Error_Handler();
  324. }
  325. __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart2_rx);
  326. /* USART2_TX Init */
  327. hdma_usart2_tx.Instance = DMA1_Channel7;
  328. hdma_usart2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
  329. hdma_usart2_tx.Init.PeriphInc = DMA_PINC_DISABLE;
  330. hdma_usart2_tx.Init.MemInc = DMA_MINC_ENABLE;
  331. hdma_usart2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  332. hdma_usart2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  333. hdma_usart2_tx.Init.Mode = DMA_NORMAL;
  334. hdma_usart2_tx.Init.Priority = DMA_PRIORITY_LOW;
  335. if (HAL_DMA_Init(&hdma_usart2_tx) != HAL_OK)
  336. {
  337. Error_Handler();
  338. }
  339. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
  340. /* USART2 interrupt Init */
  341. HAL_NVIC_SetPriority(USART2_IRQn, 5, 0);
  342. HAL_NVIC_EnableIRQ(USART2_IRQn);
  343. /* USER CODE BEGIN USART2_MspInit 1 */
  344. /* USER CODE END USART2_MspInit 1 */
  345. }
  346. else if(uartHandle->Instance==USART3)
  347. {
  348. /* USER CODE BEGIN USART3_MspInit 0 */
  349. /* USER CODE END USART3_MspInit 0 */
  350. /* USART3 clock enable */
  351. __HAL_RCC_USART3_CLK_ENABLE();
  352. __HAL_RCC_GPIOB_CLK_ENABLE();
  353. /**USART3 GPIO Configuration
  354. PB10 ------> USART3_TX
  355. PB11 ------> USART3_RX
  356. */
  357. GPIO_InitStruct.Pin = GPIO_PIN_10;
  358. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  359. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  360. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  361. GPIO_InitStruct.Pin = GPIO_PIN_11;
  362. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  363. GPIO_InitStruct.Pull = GPIO_NOPULL;
  364. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  365. /* USART3 DMA Init */
  366. /* USART3_RX Init */
  367. hdma_usart3_rx.Instance = DMA1_Channel3;
  368. hdma_usart3_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
  369. hdma_usart3_rx.Init.PeriphInc = DMA_PINC_DISABLE;
  370. hdma_usart3_rx.Init.MemInc = DMA_MINC_ENABLE;
  371. hdma_usart3_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  372. hdma_usart3_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  373. hdma_usart3_rx.Init.Mode = DMA_NORMAL;
  374. hdma_usart3_rx.Init.Priority = DMA_PRIORITY_LOW;
  375. if (HAL_DMA_Init(&hdma_usart3_rx) != HAL_OK)
  376. {
  377. Error_Handler();
  378. }
  379. __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart3_rx);
  380. /* USART3_TX Init */
  381. hdma_usart3_tx.Instance = DMA1_Channel2;
  382. hdma_usart3_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
  383. hdma_usart3_tx.Init.PeriphInc = DMA_PINC_DISABLE;
  384. hdma_usart3_tx.Init.MemInc = DMA_MINC_ENABLE;
  385. hdma_usart3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  386. hdma_usart3_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  387. hdma_usart3_tx.Init.Mode = DMA_NORMAL;
  388. hdma_usart3_tx.Init.Priority = DMA_PRIORITY_LOW;
  389. if (HAL_DMA_Init(&hdma_usart3_tx) != HAL_OK)
  390. {
  391. Error_Handler();
  392. }
  393. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart3_tx);
  394. /* USART3 interrupt Init */
  395. HAL_NVIC_SetPriority(USART3_IRQn, 5, 0);
  396. HAL_NVIC_EnableIRQ(USART3_IRQn);
  397. /* USER CODE BEGIN USART3_MspInit 1 */
  398. /* USER CODE END USART3_MspInit 1 */
  399. }
  400. }
  401. void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
  402. {
  403. if(uartHandle->Instance==UART4)
  404. {
  405. /* USER CODE BEGIN UART4_MspDeInit 0 */
  406. /* USER CODE END UART4_MspDeInit 0 */
  407. /* Peripheral clock disable */
  408. __HAL_RCC_UART4_CLK_DISABLE();
  409. /**UART4 GPIO Configuration
  410. PC10 ------> UART4_TX
  411. PC11 ------> UART4_RX
  412. */
  413. HAL_GPIO_DeInit(GPIOC, GPIO_PIN_10|GPIO_PIN_11);
  414. /* UART4 DMA DeInit */
  415. HAL_DMA_DeInit(uartHandle->hdmarx);
  416. HAL_DMA_DeInit(uartHandle->hdmatx);
  417. /* UART4 interrupt Deinit */
  418. HAL_NVIC_DisableIRQ(UART4_IRQn);
  419. /* USER CODE BEGIN UART4_MspDeInit 1 */
  420. /* USER CODE END UART4_MspDeInit 1 */
  421. }
  422. else if(uartHandle->Instance==UART5)
  423. {
  424. /* USER CODE BEGIN UART5_MspDeInit 0 */
  425. /* USER CODE END UART5_MspDeInit 0 */
  426. /* Peripheral clock disable */
  427. __HAL_RCC_UART5_CLK_DISABLE();
  428. /**UART5 GPIO Configuration
  429. PC12 ------> UART5_TX
  430. PD2 ------> UART5_RX
  431. */
  432. HAL_GPIO_DeInit(GPIOC, GPIO_PIN_12);
  433. HAL_GPIO_DeInit(GPIOD, GPIO_PIN_2);
  434. /* UART5 interrupt Deinit */
  435. HAL_NVIC_DisableIRQ(UART5_IRQn);
  436. /* USER CODE BEGIN UART5_MspDeInit 1 */
  437. /* USER CODE END UART5_MspDeInit 1 */
  438. }
  439. else if(uartHandle->Instance==USART1)
  440. {
  441. /* USER CODE BEGIN USART1_MspDeInit 0 */
  442. /* USER CODE END USART1_MspDeInit 0 */
  443. /* Peripheral clock disable */
  444. __HAL_RCC_USART1_CLK_DISABLE();
  445. /**USART1 GPIO Configuration
  446. PA9 ------> USART1_TX
  447. PA10 ------> USART1_RX
  448. */
  449. HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);
  450. /* USART1 DMA DeInit */
  451. HAL_DMA_DeInit(uartHandle->hdmarx);
  452. HAL_DMA_DeInit(uartHandle->hdmatx);
  453. /* USART1 interrupt Deinit */
  454. HAL_NVIC_DisableIRQ(USART1_IRQn);
  455. /* USER CODE BEGIN USART1_MspDeInit 1 */
  456. /* USER CODE END USART1_MspDeInit 1 */
  457. }
  458. else if(uartHandle->Instance==USART2)
  459. {
  460. /* USER CODE BEGIN USART2_MspDeInit 0 */
  461. /* USER CODE END USART2_MspDeInit 0 */
  462. /* Peripheral clock disable */
  463. __HAL_RCC_USART2_CLK_DISABLE();
  464. /**USART2 GPIO Configuration
  465. PA2 ------> USART2_TX
  466. PA3 ------> USART2_RX
  467. */
  468. HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3);
  469. /* USART2 DMA DeInit */
  470. HAL_DMA_DeInit(uartHandle->hdmarx);
  471. HAL_DMA_DeInit(uartHandle->hdmatx);
  472. /* USART2 interrupt Deinit */
  473. HAL_NVIC_DisableIRQ(USART2_IRQn);
  474. /* USER CODE BEGIN USART2_MspDeInit 1 */
  475. /* USER CODE END USART2_MspDeInit 1 */
  476. }
  477. else if(uartHandle->Instance==USART3)
  478. {
  479. /* USER CODE BEGIN USART3_MspDeInit 0 */
  480. /* USER CODE END USART3_MspDeInit 0 */
  481. /* Peripheral clock disable */
  482. __HAL_RCC_USART3_CLK_DISABLE();
  483. /**USART3 GPIO Configuration
  484. PB10 ------> USART3_TX
  485. PB11 ------> USART3_RX
  486. */
  487. HAL_GPIO_DeInit(GPIOB, GPIO_PIN_10|GPIO_PIN_11);
  488. /* USART3 DMA DeInit */
  489. HAL_DMA_DeInit(uartHandle->hdmarx);
  490. HAL_DMA_DeInit(uartHandle->hdmatx);
  491. /* USART3 interrupt Deinit */
  492. HAL_NVIC_DisableIRQ(USART3_IRQn);
  493. /* USER CODE BEGIN USART3_MspDeInit 1 */
  494. /* USER CODE END USART3_MspDeInit 1 */
  495. }
  496. }
  497. /* USER CODE BEGIN 1 */
  498. #ifdef __GNUC__
  499. /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
  500. set to 'Yes') calls __io_putchar() */
  501. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
  502. #else
  503. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
  504. #endif /* __GNUC__ */
  505. /**
  506. * @brief Retargets the C library printf function to the USART.
  507. * @param None
  508. * @retval None
  509. */
  510. PUTCHAR_PROTOTYPE
  511. {
  512. /* Place your implementation of fputc here */
  513. /* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
  514. /**
  515. * @brief printf全局打印
  516. */
  517. HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);//485串口打印
  518. //HAL_UART_Transmit(&huart3, (uint8_t *)&ch, 1, 0xFFFF);//TTL测试打印
  519. return ch;
  520. }
  521. uint16_t read_flash_16(uint32_t addr){
  522. uint16_t data = *(volatile uint16_t*)addr; // 从Flash中读取2个字节
  523. return data;
  524. }
  525. uint32_t read_flash_32(uint32_t addr){
  526. uint32_t data = *(volatile uint32_t*)addr; // 从Flash中读取4个字节
  527. return data;
  528. }
  529. void erase_flash(uint32_t ADDR_FLASH){ //进行擦除
  530. FLASH_EraseInitTypeDef erase_init;
  531. erase_init.TypeErase = FLASH_TYPEERASE_PAGES; // 擦除类型为页擦除
  532. erase_init.PageAddress = ADDR_FLASH;
  533. erase_init.NbPages = 1; // 擦除的页数
  534. uint32_t page_error = 0;
  535. HAL_FLASH_Unlock(); // 解锁Flash
  536. HAL_StatusTypeDef status = HAL_FLASHEx_Erase(&erase_init, &page_error); // 执行擦除操作
  537. HAL_FLASH_Lock(); // 上锁Flash
  538. HAL_Delay(10);
  539. }
  540. void Write_Information(uint32_t addr, uint16_t newValue) {
  541. erase_flash(addr);
  542. HAL_FLASH_Unlock(); // 解锁Flash
  543. if(addr== serialNum1Addr || addr== serialNum2Addr || addr== serialNum3Addr || addr== serialNum4Addr)
  544. {
  545. HAL_StatusTypeDef status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addr, newValue);
  546. }
  547. else
  548. {
  549. HAL_StatusTypeDef status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, addr, newValue);
  550. }
  551. HAL_FLASH_Lock(); // 上锁Flash
  552. }
  553. uint8_t xorBytes(uint8_t arr[], int size) {
  554. uint8_t result = arr[0]; // 初始化结果为第一个元素
  555. for (int i = 1; i < size; i++) {
  556. result ^= arr[i]; // 将结果与当前元素进行异或操作
  557. }
  558. //printf("异或结果: %02X\n", result); // 打印异或结果
  559. return result;
  560. }
  561. uint16_t crc16(uint8_t *data, size_t len) {
  562. uint8_t flag;
  563. uint16_t wcrc = 0xffff;
  564. for (size_t i = 0; i < len; i++) {
  565. wcrc = wcrc ^ (data[i] & 0xff);
  566. for (size_t j = 0; j < 8; j++) {
  567. flag = wcrc & 0x0001;
  568. wcrc = wcrc >> 1;
  569. if (flag == 1) {
  570. wcrc ^= 0xa001;
  571. }
  572. wcrc = wcrc & 0xffff;
  573. }
  574. }
  575. return wcrc;
  576. }
  577. void USART_SendHexArray(UART_HandleTypeDef *huart, uint8_t *data, int length)
  578. {
  579. HAL_UART_Transmit(huart,data, length, 0xFFFF);
  580. HAL_UART_Transmit(&huart3, data, length, 0xFFFF);//ttl
  581. }
  582. struct AES_ctx ctx;
  583. void sendCombinedArray(uint8_t *header, size_t headerLength, uint8_t *command, size_t commandLength, bool JM) {
  584. // 创建一个长度为20的数组
  585. uint8_t combinedArray[20] = {0};
  586. // 将header复制到combinedArray的前两个字节
  587. combinedArray[0] = header[0];//0x66
  588. combinedArray[1] = header[1];//0x01(加密)
  589. // 计算command的异或校验和
  590. uint8_t result_xor = xorBytes(command, commandLength);
  591. // 创建一个长度为16的数组来存储command和result_xor
  592. uint8_t cmd_array[16] = {0};
  593. // 将command复制到cmd_array中
  594. for (int i = 0; i < commandLength; i++) {
  595. cmd_array[i] = command[i];
  596. }
  597. cmd_array[commandLength] = result_xor;
  598. /* 加密 */
  599. if(JM)
  600. {
  601. AES_init_ctx_iv(&ctx, DtuBtKey, iv);
  602. AES_CBC_encrypt_buffer(&ctx, cmd_array, 16);
  603. }
  604. // 将cmd_array添加到combinedArray
  605. for (int i = 0; i < 16; i++) {
  606. combinedArray[i + headerLength] = cmd_array[i];
  607. }
  608. // 计算combinedArray的CRC校验和
  609. uint16_t result_frame = crc16(combinedArray, sizeof(combinedArray) - 2);
  610. // 将result_frame添加到combinedArray
  611. combinedArray[18] = result_frame & 0xFF; //低字节在前
  612. combinedArray[19] = (result_frame >> 8) & 0xFF;
  613. // 发送combinedArray
  614. USART_SendHexArray(&huart5, combinedArray, sizeof(combinedArray));
  615. }
  616. /* USER CODE END 1 */