usart.c 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876
  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 U1_485reFlag = 0;
  25. uint8_t U1_485recvBuff[BUFFER_SIZE];
  26. uint8_t U1_485recvLength = 0; //接收一帧数据的长度
  27. uint8_t U4_4GreFlag = 0;
  28. uint8_t U4_4GrecvBuff[BUFFER_SIZE];
  29. uint8_t U4_4GrecvLength = 0; //接收一帧数据的长度
  30. uint8_t BT_Rebuffer[20];
  31. uint8_t U5_BTreFlag = 0;
  32. uint8_t U5_BTrecvBuff[BUFFER_SIZE];
  33. uint8_t U5_BTrecvBuff1[BUFFER_SIZE];
  34. uint8_t U5_BTrecvLength = 0; //接收一帧数据的长度
  35. uint8_t DtuBtKey[16] = {0x4A, 0x49, 0x41, 0x4C, 0x4F, 0x4E, 0x47, 0x5F, 0x32, 0x40, 0x38, 0x21, 0x35, 0x23, 0x39, 0x32};//JIALONG_2@8!5#92
  36. uint8_t iv[16] = {0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31};//偏移
  37. /* USER CODE END 0 */
  38. UART_HandleTypeDef huart4;
  39. UART_HandleTypeDef huart5;
  40. UART_HandleTypeDef huart1;
  41. UART_HandleTypeDef huart2;
  42. UART_HandleTypeDef huart3;
  43. DMA_HandleTypeDef hdma_uart4_rx;
  44. DMA_HandleTypeDef hdma_uart4_tx;
  45. DMA_HandleTypeDef hdma_usart1_rx;
  46. DMA_HandleTypeDef hdma_usart1_tx;
  47. DMA_HandleTypeDef hdma_usart2_rx;
  48. DMA_HandleTypeDef hdma_usart2_tx;
  49. DMA_HandleTypeDef hdma_usart3_rx;
  50. DMA_HandleTypeDef hdma_usart3_tx;
  51. /* UART4 init function */
  52. void MX_UART4_Init(void)
  53. {
  54. /* USER CODE BEGIN UART4_Init 0 */
  55. /* USER CODE END UART4_Init 0 */
  56. /* USER CODE BEGIN UART4_Init 1 */
  57. /* USER CODE END UART4_Init 1 */
  58. huart4.Instance = UART4;
  59. huart4.Init.BaudRate = 115200;
  60. huart4.Init.WordLength = UART_WORDLENGTH_8B;
  61. huart4.Init.StopBits = UART_STOPBITS_1;
  62. huart4.Init.Parity = UART_PARITY_NONE;
  63. huart4.Init.Mode = UART_MODE_TX_RX;
  64. huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  65. huart4.Init.OverSampling = UART_OVERSAMPLING_16;
  66. if (HAL_UART_Init(&huart4) != HAL_OK)
  67. {
  68. Error_Handler();
  69. }
  70. /* USER CODE BEGIN UART4_Init 2 */
  71. /* USER CODE END UART4_Init 2 */
  72. }
  73. /* UART5 init function */
  74. void MX_UART5_Init(void)
  75. {
  76. /* USER CODE BEGIN UART5_Init 0 */
  77. /* USER CODE END UART5_Init 0 */
  78. /* USER CODE BEGIN UART5_Init 1 */
  79. /* USER CODE END UART5_Init 1 */
  80. huart5.Instance = UART5;
  81. huart5.Init.BaudRate = 115200;
  82. huart5.Init.WordLength = UART_WORDLENGTH_8B;
  83. huart5.Init.StopBits = UART_STOPBITS_1;
  84. huart5.Init.Parity = UART_PARITY_NONE;
  85. huart5.Init.Mode = UART_MODE_TX_RX;
  86. huart5.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  87. huart5.Init.OverSampling = UART_OVERSAMPLING_16;
  88. if (HAL_UART_Init(&huart5) != HAL_OK)
  89. {
  90. Error_Handler();
  91. }
  92. /* USER CODE BEGIN UART5_Init 2 */
  93. /* USER CODE END UART5_Init 2 */
  94. }
  95. /* USART1 init function */
  96. void MX_USART1_UART_Init(void)
  97. {
  98. /* USER CODE BEGIN USART1_Init 0 */
  99. /* USER CODE END USART1_Init 0 */
  100. /* USER CODE BEGIN USART1_Init 1 */
  101. /* USER CODE END USART1_Init 1 */
  102. huart1.Instance = USART1;
  103. huart1.Init.BaudRate = 115200;
  104. huart1.Init.WordLength = UART_WORDLENGTH_8B;
  105. huart1.Init.StopBits = UART_STOPBITS_1;
  106. huart1.Init.Parity = UART_PARITY_NONE;
  107. huart1.Init.Mode = UART_MODE_TX_RX;
  108. huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  109. huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  110. if (HAL_UART_Init(&huart1) != HAL_OK)
  111. {
  112. Error_Handler();
  113. }
  114. /* USER CODE BEGIN USART1_Init 2 */
  115. /* USER CODE END USART1_Init 2 */
  116. }
  117. /* USART2 init function */
  118. void MX_USART2_UART_Init(void)
  119. {
  120. /* USER CODE BEGIN USART2_Init 0 */
  121. /* USER CODE END USART2_Init 0 */
  122. /* USER CODE BEGIN USART2_Init 1 */
  123. /* USER CODE END USART2_Init 1 */
  124. huart2.Instance = USART2;
  125. huart2.Init.BaudRate = 115200;
  126. huart2.Init.WordLength = UART_WORDLENGTH_8B;
  127. huart2.Init.StopBits = UART_STOPBITS_1;
  128. huart2.Init.Parity = UART_PARITY_NONE;
  129. huart2.Init.Mode = UART_MODE_TX_RX;
  130. huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  131. huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  132. if (HAL_UART_Init(&huart2) != HAL_OK)
  133. {
  134. Error_Handler();
  135. }
  136. /* USER CODE BEGIN USART2_Init 2 */
  137. /* USER CODE END USART2_Init 2 */
  138. }
  139. /* USART3 init function */
  140. void MX_USART3_UART_Init(void)
  141. {
  142. /* USER CODE BEGIN USART3_Init 0 */
  143. /* USER CODE END USART3_Init 0 */
  144. /* USER CODE BEGIN USART3_Init 1 */
  145. /* USER CODE END USART3_Init 1 */
  146. huart3.Instance = USART3;
  147. huart3.Init.BaudRate = 115200;
  148. huart3.Init.WordLength = UART_WORDLENGTH_8B;
  149. huart3.Init.StopBits = UART_STOPBITS_1;
  150. huart3.Init.Parity = UART_PARITY_NONE;
  151. huart3.Init.Mode = UART_MODE_TX_RX;
  152. huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  153. huart3.Init.OverSampling = UART_OVERSAMPLING_16;
  154. if (HAL_UART_Init(&huart3) != HAL_OK)
  155. {
  156. Error_Handler();
  157. }
  158. /* USER CODE BEGIN USART3_Init 2 */
  159. /* USER CODE END USART3_Init 2 */
  160. }
  161. void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
  162. {
  163. GPIO_InitTypeDef GPIO_InitStruct = {0};
  164. if(uartHandle->Instance==UART4)
  165. {
  166. /* USER CODE BEGIN UART4_MspInit 0 */
  167. /* USER CODE END UART4_MspInit 0 */
  168. /* UART4 clock enable */
  169. __HAL_RCC_UART4_CLK_ENABLE();
  170. __HAL_RCC_GPIOC_CLK_ENABLE();
  171. /**UART4 GPIO Configuration
  172. PC10 ------> UART4_TX
  173. PC11 ------> UART4_RX
  174. */
  175. GPIO_InitStruct.Pin = GPIO_PIN_10;
  176. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  177. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  178. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  179. GPIO_InitStruct.Pin = GPIO_PIN_11;
  180. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  181. GPIO_InitStruct.Pull = GPIO_NOPULL;
  182. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  183. /* UART4 DMA Init */
  184. /* UART4_RX Init */
  185. hdma_uart4_rx.Instance = DMA2_Channel3;
  186. hdma_uart4_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
  187. hdma_uart4_rx.Init.PeriphInc = DMA_PINC_DISABLE;
  188. hdma_uart4_rx.Init.MemInc = DMA_MINC_ENABLE;
  189. hdma_uart4_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  190. hdma_uart4_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  191. hdma_uart4_rx.Init.Mode = DMA_NORMAL;
  192. hdma_uart4_rx.Init.Priority = DMA_PRIORITY_LOW;
  193. if (HAL_DMA_Init(&hdma_uart4_rx) != HAL_OK)
  194. {
  195. Error_Handler();
  196. }
  197. __HAL_LINKDMA(uartHandle,hdmarx,hdma_uart4_rx);
  198. /* UART4_TX Init */
  199. hdma_uart4_tx.Instance = DMA2_Channel5;
  200. hdma_uart4_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
  201. hdma_uart4_tx.Init.PeriphInc = DMA_PINC_DISABLE;
  202. hdma_uart4_tx.Init.MemInc = DMA_MINC_ENABLE;
  203. hdma_uart4_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  204. hdma_uart4_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  205. hdma_uart4_tx.Init.Mode = DMA_NORMAL;
  206. hdma_uart4_tx.Init.Priority = DMA_PRIORITY_LOW;
  207. if (HAL_DMA_Init(&hdma_uart4_tx) != HAL_OK)
  208. {
  209. Error_Handler();
  210. }
  211. __HAL_LINKDMA(uartHandle,hdmatx,hdma_uart4_tx);
  212. /* UART4 interrupt Init */
  213. HAL_NVIC_SetPriority(UART4_IRQn, 5, 0);
  214. HAL_NVIC_EnableIRQ(UART4_IRQn);
  215. /* USER CODE BEGIN UART4_MspInit 1 */
  216. /* USER CODE END UART4_MspInit 1 */
  217. }
  218. else if(uartHandle->Instance==UART5)
  219. {
  220. /* USER CODE BEGIN UART5_MspInit 0 */
  221. /* USER CODE END UART5_MspInit 0 */
  222. /* UART5 clock enable */
  223. __HAL_RCC_UART5_CLK_ENABLE();
  224. __HAL_RCC_GPIOC_CLK_ENABLE();
  225. __HAL_RCC_GPIOD_CLK_ENABLE();
  226. /**UART5 GPIO Configuration
  227. PC12 ------> UART5_TX
  228. PD2 ------> UART5_RX
  229. */
  230. GPIO_InitStruct.Pin = GPIO_PIN_12;
  231. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  232. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  233. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  234. GPIO_InitStruct.Pin = GPIO_PIN_2;
  235. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  236. GPIO_InitStruct.Pull = GPIO_NOPULL;
  237. HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  238. /* UART5 interrupt Init */
  239. HAL_NVIC_SetPriority(UART5_IRQn, 5, 0);
  240. HAL_NVIC_EnableIRQ(UART5_IRQn);
  241. /* USER CODE BEGIN UART5_MspInit 1 */
  242. /* USER CODE END UART5_MspInit 1 */
  243. }
  244. else if(uartHandle->Instance==USART1)
  245. {
  246. /* USER CODE BEGIN USART1_MspInit 0 */
  247. /* USER CODE END USART1_MspInit 0 */
  248. /* USART1 clock enable */
  249. __HAL_RCC_USART1_CLK_ENABLE();
  250. __HAL_RCC_GPIOA_CLK_ENABLE();
  251. /**USART1 GPIO Configuration
  252. PA9 ------> USART1_TX
  253. PA10 ------> USART1_RX
  254. */
  255. GPIO_InitStruct.Pin = GPIO_PIN_9;
  256. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  257. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  258. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  259. GPIO_InitStruct.Pin = GPIO_PIN_10;
  260. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  261. GPIO_InitStruct.Pull = GPIO_NOPULL;
  262. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  263. /* USART1 DMA Init */
  264. /* USART1_RX Init */
  265. hdma_usart1_rx.Instance = DMA1_Channel5;
  266. hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
  267. hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
  268. hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE;
  269. hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  270. hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  271. hdma_usart1_rx.Init.Mode = DMA_NORMAL;
  272. hdma_usart1_rx.Init.Priority = DMA_PRIORITY_LOW;
  273. if (HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK)
  274. {
  275. Error_Handler();
  276. }
  277. __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart1_rx);
  278. /* USART1_TX Init */
  279. hdma_usart1_tx.Instance = DMA1_Channel4;
  280. hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
  281. hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
  282. hdma_usart1_tx.Init.MemInc = DMA_MINC_ENABLE;
  283. hdma_usart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  284. hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  285. hdma_usart1_tx.Init.Mode = DMA_NORMAL;
  286. hdma_usart1_tx.Init.Priority = DMA_PRIORITY_LOW;
  287. if (HAL_DMA_Init(&hdma_usart1_tx) != HAL_OK)
  288. {
  289. Error_Handler();
  290. }
  291. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart1_tx);
  292. /* USART1 interrupt Init */
  293. HAL_NVIC_SetPriority(USART1_IRQn, 5, 0);
  294. HAL_NVIC_EnableIRQ(USART1_IRQn);
  295. /* USER CODE BEGIN USART1_MspInit 1 */
  296. /* USER CODE END USART1_MspInit 1 */
  297. }
  298. else if(uartHandle->Instance==USART2)
  299. {
  300. /* USER CODE BEGIN USART2_MspInit 0 */
  301. /* USER CODE END USART2_MspInit 0 */
  302. /* USART2 clock enable */
  303. __HAL_RCC_USART2_CLK_ENABLE();
  304. __HAL_RCC_GPIOA_CLK_ENABLE();
  305. /**USART2 GPIO Configuration
  306. PA2 ------> USART2_TX
  307. PA3 ------> USART2_RX
  308. */
  309. GPIO_InitStruct.Pin = GPIO_PIN_2;
  310. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  311. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  312. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  313. GPIO_InitStruct.Pin = GPIO_PIN_3;
  314. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  315. GPIO_InitStruct.Pull = GPIO_NOPULL;
  316. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  317. /* USART2 DMA Init */
  318. /* USART2_RX Init */
  319. hdma_usart2_rx.Instance = DMA1_Channel6;
  320. hdma_usart2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
  321. hdma_usart2_rx.Init.PeriphInc = DMA_PINC_DISABLE;
  322. hdma_usart2_rx.Init.MemInc = DMA_MINC_ENABLE;
  323. hdma_usart2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  324. hdma_usart2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  325. hdma_usart2_rx.Init.Mode = DMA_NORMAL;
  326. hdma_usart2_rx.Init.Priority = DMA_PRIORITY_LOW;
  327. if (HAL_DMA_Init(&hdma_usart2_rx) != HAL_OK)
  328. {
  329. Error_Handler();
  330. }
  331. __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart2_rx);
  332. /* USART2_TX Init */
  333. hdma_usart2_tx.Instance = DMA1_Channel7;
  334. hdma_usart2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
  335. hdma_usart2_tx.Init.PeriphInc = DMA_PINC_DISABLE;
  336. hdma_usart2_tx.Init.MemInc = DMA_MINC_ENABLE;
  337. hdma_usart2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  338. hdma_usart2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  339. hdma_usart2_tx.Init.Mode = DMA_NORMAL;
  340. hdma_usart2_tx.Init.Priority = DMA_PRIORITY_LOW;
  341. if (HAL_DMA_Init(&hdma_usart2_tx) != HAL_OK)
  342. {
  343. Error_Handler();
  344. }
  345. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
  346. /* USART2 interrupt Init */
  347. HAL_NVIC_SetPriority(USART2_IRQn, 5, 0);
  348. HAL_NVIC_EnableIRQ(USART2_IRQn);
  349. /* USER CODE BEGIN USART2_MspInit 1 */
  350. /* USER CODE END USART2_MspInit 1 */
  351. }
  352. else if(uartHandle->Instance==USART3)
  353. {
  354. /* USER CODE BEGIN USART3_MspInit 0 */
  355. /* USER CODE END USART3_MspInit 0 */
  356. /* USART3 clock enable */
  357. __HAL_RCC_USART3_CLK_ENABLE();
  358. __HAL_RCC_GPIOB_CLK_ENABLE();
  359. /**USART3 GPIO Configuration
  360. PB10 ------> USART3_TX
  361. PB11 ------> USART3_RX
  362. */
  363. GPIO_InitStruct.Pin = GPIO_PIN_10;
  364. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  365. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  366. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  367. GPIO_InitStruct.Pin = GPIO_PIN_11;
  368. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  369. GPIO_InitStruct.Pull = GPIO_NOPULL;
  370. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  371. /* USART3 DMA Init */
  372. /* USART3_RX Init */
  373. hdma_usart3_rx.Instance = DMA1_Channel3;
  374. hdma_usart3_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
  375. hdma_usart3_rx.Init.PeriphInc = DMA_PINC_DISABLE;
  376. hdma_usart3_rx.Init.MemInc = DMA_MINC_ENABLE;
  377. hdma_usart3_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  378. hdma_usart3_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  379. hdma_usart3_rx.Init.Mode = DMA_NORMAL;
  380. hdma_usart3_rx.Init.Priority = DMA_PRIORITY_LOW;
  381. if (HAL_DMA_Init(&hdma_usart3_rx) != HAL_OK)
  382. {
  383. Error_Handler();
  384. }
  385. __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart3_rx);
  386. /* USART3_TX Init */
  387. hdma_usart3_tx.Instance = DMA1_Channel2;
  388. hdma_usart3_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
  389. hdma_usart3_tx.Init.PeriphInc = DMA_PINC_DISABLE;
  390. hdma_usart3_tx.Init.MemInc = DMA_MINC_ENABLE;
  391. hdma_usart3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  392. hdma_usart3_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  393. hdma_usart3_tx.Init.Mode = DMA_NORMAL;
  394. hdma_usart3_tx.Init.Priority = DMA_PRIORITY_LOW;
  395. if (HAL_DMA_Init(&hdma_usart3_tx) != HAL_OK)
  396. {
  397. Error_Handler();
  398. }
  399. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart3_tx);
  400. /* USART3 interrupt Init */
  401. HAL_NVIC_SetPriority(USART3_IRQn, 5, 0);
  402. HAL_NVIC_EnableIRQ(USART3_IRQn);
  403. /* USER CODE BEGIN USART3_MspInit 1 */
  404. /* USER CODE END USART3_MspInit 1 */
  405. }
  406. }
  407. void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
  408. {
  409. if(uartHandle->Instance==UART4)
  410. {
  411. /* USER CODE BEGIN UART4_MspDeInit 0 */
  412. /* USER CODE END UART4_MspDeInit 0 */
  413. /* Peripheral clock disable */
  414. __HAL_RCC_UART4_CLK_DISABLE();
  415. /**UART4 GPIO Configuration
  416. PC10 ------> UART4_TX
  417. PC11 ------> UART4_RX
  418. */
  419. HAL_GPIO_DeInit(GPIOC, GPIO_PIN_10|GPIO_PIN_11);
  420. /* UART4 DMA DeInit */
  421. HAL_DMA_DeInit(uartHandle->hdmarx);
  422. HAL_DMA_DeInit(uartHandle->hdmatx);
  423. /* UART4 interrupt Deinit */
  424. HAL_NVIC_DisableIRQ(UART4_IRQn);
  425. /* USER CODE BEGIN UART4_MspDeInit 1 */
  426. /* USER CODE END UART4_MspDeInit 1 */
  427. }
  428. else if(uartHandle->Instance==UART5)
  429. {
  430. /* USER CODE BEGIN UART5_MspDeInit 0 */
  431. /* USER CODE END UART5_MspDeInit 0 */
  432. /* Peripheral clock disable */
  433. __HAL_RCC_UART5_CLK_DISABLE();
  434. /**UART5 GPIO Configuration
  435. PC12 ------> UART5_TX
  436. PD2 ------> UART5_RX
  437. */
  438. HAL_GPIO_DeInit(GPIOC, GPIO_PIN_12);
  439. HAL_GPIO_DeInit(GPIOD, GPIO_PIN_2);
  440. /* UART5 interrupt Deinit */
  441. HAL_NVIC_DisableIRQ(UART5_IRQn);
  442. /* USER CODE BEGIN UART5_MspDeInit 1 */
  443. /* USER CODE END UART5_MspDeInit 1 */
  444. }
  445. else if(uartHandle->Instance==USART1)
  446. {
  447. /* USER CODE BEGIN USART1_MspDeInit 0 */
  448. /* USER CODE END USART1_MspDeInit 0 */
  449. /* Peripheral clock disable */
  450. __HAL_RCC_USART1_CLK_DISABLE();
  451. /**USART1 GPIO Configuration
  452. PA9 ------> USART1_TX
  453. PA10 ------> USART1_RX
  454. */
  455. HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);
  456. /* USART1 DMA DeInit */
  457. HAL_DMA_DeInit(uartHandle->hdmarx);
  458. HAL_DMA_DeInit(uartHandle->hdmatx);
  459. /* USART1 interrupt Deinit */
  460. HAL_NVIC_DisableIRQ(USART1_IRQn);
  461. /* USER CODE BEGIN USART1_MspDeInit 1 */
  462. /* USER CODE END USART1_MspDeInit 1 */
  463. }
  464. else if(uartHandle->Instance==USART2)
  465. {
  466. /* USER CODE BEGIN USART2_MspDeInit 0 */
  467. /* USER CODE END USART2_MspDeInit 0 */
  468. /* Peripheral clock disable */
  469. __HAL_RCC_USART2_CLK_DISABLE();
  470. /**USART2 GPIO Configuration
  471. PA2 ------> USART2_TX
  472. PA3 ------> USART2_RX
  473. */
  474. HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3);
  475. /* USART2 DMA DeInit */
  476. HAL_DMA_DeInit(uartHandle->hdmarx);
  477. HAL_DMA_DeInit(uartHandle->hdmatx);
  478. /* USART2 interrupt Deinit */
  479. HAL_NVIC_DisableIRQ(USART2_IRQn);
  480. /* USER CODE BEGIN USART2_MspDeInit 1 */
  481. /* USER CODE END USART2_MspDeInit 1 */
  482. }
  483. else if(uartHandle->Instance==USART3)
  484. {
  485. /* USER CODE BEGIN USART3_MspDeInit 0 */
  486. /* USER CODE END USART3_MspDeInit 0 */
  487. /* Peripheral clock disable */
  488. __HAL_RCC_USART3_CLK_DISABLE();
  489. /**USART3 GPIO Configuration
  490. PB10 ------> USART3_TX
  491. PB11 ------> USART3_RX
  492. */
  493. HAL_GPIO_DeInit(GPIOB, GPIO_PIN_10|GPIO_PIN_11);
  494. /* USART3 DMA DeInit */
  495. HAL_DMA_DeInit(uartHandle->hdmarx);
  496. HAL_DMA_DeInit(uartHandle->hdmatx);
  497. /* USART3 interrupt Deinit */
  498. HAL_NVIC_DisableIRQ(USART3_IRQn);
  499. /* USER CODE BEGIN USART3_MspDeInit 1 */
  500. /* USER CODE END USART3_MspDeInit 1 */
  501. }
  502. }
  503. /* USER CODE BEGIN 1 */
  504. #ifdef __GNUC__
  505. /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
  506. set to 'Yes') calls __io_putchar() */
  507. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
  508. #else
  509. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
  510. #endif /* __GNUC__ */
  511. PUTCHAR_PROTOTYPE
  512. {
  513. HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);//485串口打印
  514. return ch;
  515. }
  516. //uint8_t Read_flash_6(uint32_t addr, uint8_t* data_ptr){
  517. // for (int i = 5; i > -1; i--) {
  518. //
  519. // data_ptr[5-i] = *(volatile uint8_t*)(addr + i);
  520. // }
  521. // uint8_t Lstatus = *(volatile uint8_t*)(addr + 7);
  522. // return Lstatus;
  523. //}
  524. void erase_flash(uint32_t ADDR_FLASH){ //进行擦除
  525. FLASH_EraseInitTypeDef erase_init;
  526. erase_init.TypeErase = FLASH_TYPEERASE_PAGES; // 擦除类型为页擦除
  527. erase_init.PageAddress = ADDR_FLASH;
  528. erase_init.NbPages = 1; // 擦除的页数
  529. uint32_t page_error = 0;
  530. HAL_FLASH_Unlock(); // 解锁Flash
  531. HAL_StatusTypeDef status = HAL_FLASHEx_Erase(&erase_init, &page_error); // 执行擦除操作
  532. HAL_FLASH_Lock(); // 上锁Flash
  533. }
  534. //void Write_Info64(uint32_t addr, uint64_t newValue) {//烧写mac号
  535. // erase_flash(addr);
  536. // HAL_FLASH_Unlock(); // 解锁Flash
  537. //
  538. // HAL_StatusTypeDef status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, addr, newValue);
  539. //
  540. // HAL_FLASH_Lock(); // 上锁Flash
  541. //}
  542. //void Write_Info08(uint32_t addr, uint8_t newValue) {
  543. // erase_flash(addr);
  544. // HAL_FLASH_Unlock(); // 解锁Flash
  545. // HAL_StatusTypeDef status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, addr, newValue);
  546. // HAL_FLASH_Lock(); // 上锁Flash
  547. //}
  548. //uint16_t read_flash_16(uint32_t addr){
  549. // uint16_t data = *(volatile uint16_t*)addr; // 从Flash中读取2个字节
  550. // return data;
  551. //}
  552. //void Write_Information(uint32_t addr, uint16_t newValue) {
  553. // erase_flash(addr);
  554. // HAL_FLASH_Unlock(); // 解锁Flash
  555. // if(addr== serialNum1Addr || addr== serialNum2Addr || addr== serialNum3Addr || addr== serialNum4Addr)
  556. // {
  557. // HAL_StatusTypeDef status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addr, newValue);
  558. // }
  559. // else
  560. // {
  561. // HAL_StatusTypeDef status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, addr, newValue);
  562. // }
  563. // HAL_FLASH_Lock(); // 上锁Flash
  564. //}
  565. void Flash_ReadBytes(uint16_t* sorBuf,uint32_t FlashAddr,uint16_t len)
  566. {
  567. uint16_t* p = sorBuf;
  568. uint8_t i = 0,j = 0;
  569. uint32_t addr = FlashAddr;
  570. while(len--)
  571. {
  572. i = *(uint32_t*)addr++;
  573. j = *(uint32_t*)addr++;
  574. *p++ = j<<8|i;
  575. }
  576. }
  577. void Flash_ReadBytes_mac(uint16_t* sorBuf,uint32_t FlashAddr,uint16_t len)
  578. {
  579. uint16_t* p = sorBuf;
  580. uint8_t i = 0,j = 0;
  581. uint32_t addr = FlashAddr;
  582. while(len--)
  583. {
  584. i = *(uint32_t*)addr++;
  585. j = *(uint32_t*)addr++;
  586. *p++ = i<<8|j;
  587. }
  588. }
  589. HAL_StatusTypeDef WriteSta;
  590. // 定义Flash缓冲区
  591. uint16_t Flashbuf[2048] __attribute__((at(0X20001000)));
  592. // Flash写入函数
  593. HAL_StatusTypeDef Flash_WriteBytes(uint16_t* sorBuf, uint32_t FlashAddr, uint16_t len)
  594. {
  595. uint32_t Offset_ADDR = 0, Page_StartAddr = 0, i = 0;
  596. // 计算偏移地址和起始地址
  597. Offset_ADDR = FlashAddr % FLASH_PAGE_SIZE;
  598. Page_StartAddr = FlashAddr - Offset_ADDR;
  599. // 设置PageError
  600. uint32_t PageError = 0;
  601. // 初始化擦除参数
  602. FLASH_EraseInitTypeDef f;
  603. f.TypeErase = FLASH_TYPEERASE_PAGES;
  604. f.PageAddress = Page_StartAddr;
  605. f.NbPages = 1;
  606. // 读取Flash缓冲区数据
  607. Flash_ReadBytes(Flashbuf, Page_StartAddr, 0x400);
  608. // 将源缓冲区数据写入Flash缓冲区
  609. for (i = 0; i < len; i++)
  610. Flashbuf[Offset_ADDR / 2 + i] = sorBuf[i];
  611. // 解锁FLASH
  612. HAL_FLASH_Unlock();
  613. // 擦除FLASH
  614. HAL_FLASHEx_Erase(&f, &PageError);
  615. // 写入Flash缓冲区数据到FLASH
  616. for (uint16_t i = 0; i < 0x400; i++)
  617. {
  618. WriteSta = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, Page_StartAddr + (i * 2), Flashbuf[i]);
  619. }
  620. HAL_Delay(100);
  621. // 锁住FLASH
  622. HAL_FLASH_Lock();
  623. return WriteSta;
  624. }
  625. void Printf_u4u5logbyU1(void)
  626. {
  627. if(U4_4GreFlag)
  628. {
  629. U4_4GreFlag=false;
  630. HAL_UART_Transmit(&huart1,U4_4GrecvBuff,U4_4GrecvLength,0xFFFF);//有信息就吐
  631. }
  632. if(U5_BTreFlag)
  633. {
  634. U5_BTreFlag=false;
  635. memcpy(autoRe,U5_BTrecvBuff,U5_BTrecvLength);
  636. HAL_UART_Transmit(&huart1,U5_BTrecvBuff,U5_BTrecvLength,0xFFFF);
  637. //memset(U5_BTrecvBuff,0,BUFFER_SIZE);
  638. }
  639. }
  640. uint8_t xorBytes(uint8_t arr[], int size) {
  641. uint8_t result = arr[0]; // 初始化结果为第一个元素
  642. for (int i = 1; i < size; i++) {
  643. result ^= arr[i]; // 将结果与当前元素进行异或操作
  644. }
  645. //printf("异或结果: %02X\n", result); // 打印异或结果
  646. return result;
  647. }
  648. uint16_t crc16(uint8_t *data, size_t len) {
  649. uint8_t flag;
  650. uint16_t wcrc = 0xffff;
  651. for (size_t i = 0; i < len; i++) {
  652. wcrc = wcrc ^ (data[i] & 0xff);
  653. for (size_t j = 0; j < 8; j++) {
  654. flag = wcrc & 0x0001;
  655. wcrc = wcrc >> 1;
  656. if (flag == 1) {
  657. wcrc ^= 0xa001;
  658. }
  659. wcrc = wcrc & 0xffff;
  660. }
  661. }
  662. return wcrc;
  663. }
  664. void USART_SendHexArray(UART_HandleTypeDef *huart, uint8_t *data, int length)
  665. {
  666. HAL_UART_Transmit(huart,data, length, 0xFFFF);
  667. HAL_UART_Transmit(&huart1, data, length, 0xFFFF);//485
  668. }
  669. struct AES_ctx ctx;
  670. void sendCombinedArray(uint8_t *header, size_t headerLength, uint8_t *command, size_t commandLength, bool encryption) {
  671. // 创建一个长度为20的数组
  672. uint8_t combinedArray[20] = {0};
  673. // 将header复制到combinedArray的前两个字节
  674. combinedArray[0] = header[0];//0x66
  675. combinedArray[1] = header[1];//0x01(加密)
  676. // 计算command的异或校验和
  677. uint8_t result_xor = xorBytes(command, commandLength);
  678. // 创建一个长度为16的数组来存储command和result_xor
  679. uint8_t cmd_array[16] = {0};
  680. // 将command复制到cmd_array中
  681. for (int i = 0; i < commandLength; i++) {
  682. cmd_array[i] = command[i];
  683. }
  684. cmd_array[commandLength] = result_xor;
  685. /* 加密 */
  686. if(encryption)
  687. {
  688. AES_init_ctx_iv(&ctx, DtuBtKey, iv);
  689. AES_CBC_encrypt_buffer(&ctx, cmd_array, 16);
  690. }
  691. // 将cmd_array添加到combinedArray
  692. for (int i = 0; i < 16; i++) {
  693. combinedArray[i + headerLength] = cmd_array[i];
  694. }
  695. // 计算combinedArray的CRC校验和
  696. uint16_t result_frame = crc16(combinedArray, sizeof(combinedArray) - 2);
  697. // 将result_frame添加到combinedArray
  698. combinedArray[18] = result_frame & 0xFF; //低字节在前
  699. combinedArray[19] = (result_frame >> 8) & 0xFF;
  700. // 发送combinedArray
  701. USART_SendHexArray(&huart5, combinedArray, sizeof(combinedArray));
  702. }
  703. uint32_t convertGPS(double temp) {
  704. //*WGS-84坐标
  705. if(temp > 40)
  706. {
  707. temp = temp/100;
  708. double latDeg = floor(temp);//向下取整 纬度
  709. double latMin = fmod(temp, 1);
  710. temp = latDeg + (latMin / 60.0)*100;
  711. double dlat = temp;
  712. uint32_t latMicrodegree = (uint32_t)(dlat * 1000000);
  713. return latMicrodegree;
  714. }
  715. else
  716. {
  717. temp = temp/100;
  718. double lonDeg = floor(temp);//向下取整
  719. double lonMin = fmod(temp, 1);
  720. temp = lonDeg + (lonMin / 60.0)*100;
  721. double dlng = temp;
  722. uint32_t lngMicrodegree = (uint32_t)(dlng * 1000000);
  723. return lngMicrodegree;
  724. }
  725. }
  726. /* USER CODE END 1 */