stm32f1xx_it.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521
  1. /* USER CODE BEGIN Header */
  2. /**
  3. ******************************************************************************
  4. * @file stm32f1xx_it.c
  5. * @brief Interrupt Service Routines.
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * Copyright (c) 2024 STMicroelectronics.
  10. * All rights reserved.
  11. *
  12. * This software is licensed under terms that can be found in the LICENSE file
  13. * in the root directory of this software component.
  14. * If no LICENSE file comes with this software, it is provided AS-IS.
  15. *
  16. ******************************************************************************
  17. */
  18. /* USER CODE END Header */
  19. /* Includes ------------------------------------------------------------------*/
  20. #include "main.h"
  21. #include "stm32f1xx_it.h"
  22. /* Private includes ----------------------------------------------------------*/
  23. /* USER CODE BEGIN Includes */
  24. #include "usart.h"
  25. /* USER CODE END Includes */
  26. /* Private typedef -----------------------------------------------------------*/
  27. /* USER CODE BEGIN TD */
  28. /* USER CODE END TD */
  29. /* Private define ------------------------------------------------------------*/
  30. /* USER CODE BEGIN PD */
  31. /* USER CODE END PD */
  32. /* Private macro -------------------------------------------------------------*/
  33. /* USER CODE BEGIN PM */
  34. /* USER CODE END PM */
  35. /* Private variables ---------------------------------------------------------*/
  36. /* USER CODE BEGIN PV */
  37. extern uint16_t u5length;
  38. /* USER CODE END PV */
  39. /* Private function prototypes -----------------------------------------------*/
  40. /* USER CODE BEGIN PFP */
  41. /* USER CODE END PFP */
  42. /* Private user code ---------------------------------------------------------*/
  43. /* USER CODE BEGIN 0 */
  44. /* USER CODE END 0 */
  45. /* External variables --------------------------------------------------------*/
  46. extern CAN_HandleTypeDef hcan;
  47. extern RTC_HandleTypeDef hrtc;
  48. extern TIM_HandleTypeDef htim2;
  49. extern TIM_HandleTypeDef htim3;
  50. extern DMA_HandleTypeDef hdma_uart4_rx;
  51. extern DMA_HandleTypeDef hdma_uart4_tx;
  52. extern DMA_HandleTypeDef hdma_usart1_rx;
  53. extern DMA_HandleTypeDef hdma_usart1_tx;
  54. extern DMA_HandleTypeDef hdma_usart2_rx;
  55. extern DMA_HandleTypeDef hdma_usart2_tx;
  56. extern DMA_HandleTypeDef hdma_usart3_rx;
  57. extern DMA_HandleTypeDef hdma_usart3_tx;
  58. extern UART_HandleTypeDef huart4;
  59. extern UART_HandleTypeDef huart5;
  60. extern UART_HandleTypeDef huart1;
  61. extern UART_HandleTypeDef huart2;
  62. extern UART_HandleTypeDef huart3;
  63. extern TIM_HandleTypeDef htim1;
  64. /* USER CODE BEGIN EV */
  65. /* USER CODE END EV */
  66. /******************************************************************************/
  67. /* Cortex-M3 Processor Interruption and Exception Handlers */
  68. /******************************************************************************/
  69. /**
  70. * @brief This function handles Non maskable interrupt.
  71. */
  72. void NMI_Handler(void)
  73. {
  74. /* USER CODE BEGIN NonMaskableInt_IRQn 0 */
  75. /* USER CODE END NonMaskableInt_IRQn 0 */
  76. /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
  77. while (1)
  78. {
  79. }
  80. /* USER CODE END NonMaskableInt_IRQn 1 */
  81. }
  82. /**
  83. * @brief This function handles Hard fault interrupt.
  84. */
  85. void HardFault_Handler(void)
  86. {
  87. /* USER CODE BEGIN HardFault_IRQn 0 */
  88. /* USER CODE END HardFault_IRQn 0 */
  89. while (1)
  90. {
  91. /* USER CODE BEGIN W1_HardFault_IRQn 0 */
  92. /* USER CODE END W1_HardFault_IRQn 0 */
  93. }
  94. }
  95. /**
  96. * @brief This function handles Memory management fault.
  97. */
  98. void MemManage_Handler(void)
  99. {
  100. /* USER CODE BEGIN MemoryManagement_IRQn 0 */
  101. /* USER CODE END MemoryManagement_IRQn 0 */
  102. while (1)
  103. {
  104. /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */
  105. /* USER CODE END W1_MemoryManagement_IRQn 0 */
  106. }
  107. }
  108. /**
  109. * @brief This function handles Prefetch fault, memory access fault.
  110. */
  111. void BusFault_Handler(void)
  112. {
  113. /* USER CODE BEGIN BusFault_IRQn 0 */
  114. /* USER CODE END BusFault_IRQn 0 */
  115. while (1)
  116. {
  117. /* USER CODE BEGIN W1_BusFault_IRQn 0 */
  118. /* USER CODE END W1_BusFault_IRQn 0 */
  119. }
  120. }
  121. /**
  122. * @brief This function handles Undefined instruction or illegal state.
  123. */
  124. void UsageFault_Handler(void)
  125. {
  126. /* USER CODE BEGIN UsageFault_IRQn 0 */
  127. /* USER CODE END UsageFault_IRQn 0 */
  128. while (1)
  129. {
  130. /* USER CODE BEGIN W1_UsageFault_IRQn 0 */
  131. /* USER CODE END W1_UsageFault_IRQn 0 */
  132. }
  133. }
  134. /**
  135. * @brief This function handles Debug monitor.
  136. */
  137. void DebugMon_Handler(void)
  138. {
  139. /* USER CODE BEGIN DebugMonitor_IRQn 0 */
  140. /* USER CODE END DebugMonitor_IRQn 0 */
  141. /* USER CODE BEGIN DebugMonitor_IRQn 1 */
  142. /* USER CODE END DebugMonitor_IRQn 1 */
  143. }
  144. /******************************************************************************/
  145. /* STM32F1xx Peripheral Interrupt Handlers */
  146. /* Add here the Interrupt Handlers for the used peripherals. */
  147. /* For the available peripheral interrupt handler names, */
  148. /* please refer to the startup file (startup_stm32f1xx.s). */
  149. /******************************************************************************/
  150. /**
  151. * @brief This function handles RTC global interrupt.
  152. */
  153. void RTC_IRQHandler(void)
  154. {
  155. /* USER CODE BEGIN RTC_IRQn 0 */
  156. /* USER CODE END RTC_IRQn 0 */
  157. HAL_RTCEx_RTCIRQHandler(&hrtc);
  158. /* USER CODE BEGIN RTC_IRQn 1 */
  159. /* USER CODE END RTC_IRQn 1 */
  160. }
  161. /**
  162. * @brief This function handles DMA1 channel2 global interrupt.
  163. */
  164. void DMA1_Channel2_IRQHandler(void)
  165. {
  166. /* USER CODE BEGIN DMA1_Channel2_IRQn 0 */
  167. /* USER CODE END DMA1_Channel2_IRQn 0 */
  168. HAL_DMA_IRQHandler(&hdma_usart3_tx);
  169. /* USER CODE BEGIN DMA1_Channel2_IRQn 1 */
  170. /* USER CODE END DMA1_Channel2_IRQn 1 */
  171. }
  172. /**
  173. * @brief This function handles DMA1 channel3 global interrupt.
  174. */
  175. void DMA1_Channel3_IRQHandler(void)
  176. {
  177. /* USER CODE BEGIN DMA1_Channel3_IRQn 0 */
  178. /* USER CODE END DMA1_Channel3_IRQn 0 */
  179. HAL_DMA_IRQHandler(&hdma_usart3_rx);
  180. /* USER CODE BEGIN DMA1_Channel3_IRQn 1 */
  181. /* USER CODE END DMA1_Channel3_IRQn 1 */
  182. }
  183. /**
  184. * @brief This function handles DMA1 channel4 global interrupt.
  185. */
  186. void DMA1_Channel4_IRQHandler(void)
  187. {
  188. /* USER CODE BEGIN DMA1_Channel4_IRQn 0 */
  189. /* USER CODE END DMA1_Channel4_IRQn 0 */
  190. HAL_DMA_IRQHandler(&hdma_usart1_tx);
  191. /* USER CODE BEGIN DMA1_Channel4_IRQn 1 */
  192. /* USER CODE END DMA1_Channel4_IRQn 1 */
  193. }
  194. /**
  195. * @brief This function handles DMA1 channel5 global interrupt.
  196. */
  197. void DMA1_Channel5_IRQHandler(void)
  198. {
  199. /* USER CODE BEGIN DMA1_Channel5_IRQn 0 */
  200. /* USER CODE END DMA1_Channel5_IRQn 0 */
  201. HAL_DMA_IRQHandler(&hdma_usart1_rx);
  202. /* USER CODE BEGIN DMA1_Channel5_IRQn 1 */
  203. /* USER CODE END DMA1_Channel5_IRQn 1 */
  204. }
  205. /**
  206. * @brief This function handles DMA1 channel6 global interrupt.
  207. */
  208. void DMA1_Channel6_IRQHandler(void)
  209. {
  210. /* USER CODE BEGIN DMA1_Channel6_IRQn 0 */
  211. /* USER CODE END DMA1_Channel6_IRQn 0 */
  212. HAL_DMA_IRQHandler(&hdma_usart2_rx);
  213. /* USER CODE BEGIN DMA1_Channel6_IRQn 1 */
  214. /* USER CODE END DMA1_Channel6_IRQn 1 */
  215. }
  216. /**
  217. * @brief This function handles DMA1 channel7 global interrupt.
  218. */
  219. void DMA1_Channel7_IRQHandler(void)
  220. {
  221. /* USER CODE BEGIN DMA1_Channel7_IRQn 0 */
  222. /* USER CODE END DMA1_Channel7_IRQn 0 */
  223. HAL_DMA_IRQHandler(&hdma_usart2_tx);
  224. /* USER CODE BEGIN DMA1_Channel7_IRQn 1 */
  225. /* USER CODE END DMA1_Channel7_IRQn 1 */
  226. }
  227. /**
  228. * @brief This function handles USB high priority or CAN TX interrupts.
  229. */
  230. void USB_HP_CAN1_TX_IRQHandler(void)
  231. {
  232. /* USER CODE BEGIN USB_HP_CAN1_TX_IRQn 0 */
  233. /* USER CODE END USB_HP_CAN1_TX_IRQn 0 */
  234. HAL_CAN_IRQHandler(&hcan);
  235. /* USER CODE BEGIN USB_HP_CAN1_TX_IRQn 1 */
  236. /* USER CODE END USB_HP_CAN1_TX_IRQn 1 */
  237. }
  238. /**
  239. * @brief This function handles USB low priority or CAN RX0 interrupts.
  240. */
  241. void USB_LP_CAN1_RX0_IRQHandler(void)
  242. {
  243. /* USER CODE BEGIN USB_LP_CAN1_RX0_IRQn 0 */
  244. /* USER CODE END USB_LP_CAN1_RX0_IRQn 0 */
  245. HAL_CAN_IRQHandler(&hcan);
  246. /* USER CODE BEGIN USB_LP_CAN1_RX0_IRQn 1 */
  247. /* USER CODE END USB_LP_CAN1_RX0_IRQn 1 */
  248. }
  249. /**
  250. * @brief This function handles CAN RX1 interrupt.
  251. */
  252. void CAN1_RX1_IRQHandler(void)
  253. {
  254. /* USER CODE BEGIN CAN1_RX1_IRQn 0 */
  255. /* USER CODE END CAN1_RX1_IRQn 0 */
  256. HAL_CAN_IRQHandler(&hcan);
  257. /* USER CODE BEGIN CAN1_RX1_IRQn 1 */
  258. /* USER CODE END CAN1_RX1_IRQn 1 */
  259. }
  260. /**
  261. * @brief This function handles CAN SCE interrupt.
  262. */
  263. void CAN1_SCE_IRQHandler(void)
  264. {
  265. /* USER CODE BEGIN CAN1_SCE_IRQn 0 */
  266. /* USER CODE END CAN1_SCE_IRQn 0 */
  267. HAL_CAN_IRQHandler(&hcan);
  268. /* USER CODE BEGIN CAN1_SCE_IRQn 1 */
  269. /* USER CODE END CAN1_SCE_IRQn 1 */
  270. }
  271. /**
  272. * @brief This function handles TIM1 update interrupt.
  273. */
  274. void TIM1_UP_IRQHandler(void)
  275. {
  276. /* USER CODE BEGIN TIM1_UP_IRQn 0 */
  277. /* USER CODE END TIM1_UP_IRQn 0 */
  278. HAL_TIM_IRQHandler(&htim1);
  279. /* USER CODE BEGIN TIM1_UP_IRQn 1 */
  280. /* USER CODE END TIM1_UP_IRQn 1 */
  281. }
  282. /**
  283. * @brief This function handles TIM2 global interrupt.
  284. */
  285. void TIM2_IRQHandler(void)
  286. {
  287. /* USER CODE BEGIN TIM2_IRQn 0 */
  288. /* USER CODE END TIM2_IRQn 0 */
  289. HAL_TIM_IRQHandler(&htim2);
  290. /* USER CODE BEGIN TIM2_IRQn 1 */
  291. /* USER CODE END TIM2_IRQn 1 */
  292. }
  293. /**
  294. * @brief This function handles TIM3 global interrupt.
  295. */
  296. void TIM3_IRQHandler(void)
  297. {
  298. /* USER CODE BEGIN TIM3_IRQn 0 */
  299. /* 运行指示灯 */
  300. LED_TOGGLE(GPIO_PIN_9);
  301. /* USER CODE END TIM3_IRQn 0 */
  302. HAL_TIM_IRQHandler(&htim3);
  303. /* USER CODE BEGIN TIM3_IRQn 1 */
  304. /* USER CODE END TIM3_IRQn 1 */
  305. }
  306. /**
  307. * @brief This function handles USART1 global interrupt.
  308. */
  309. void USART1_IRQHandler(void)
  310. {
  311. /* USER CODE BEGIN USART1_IRQn 0 */
  312. /* USER CODE END USART1_IRQn 0 */
  313. HAL_UART_IRQHandler(&huart1);
  314. /* USER CODE BEGIN USART1_IRQn 1 */
  315. /* USER CODE END USART1_IRQn 1 */
  316. }
  317. /**
  318. * @brief This function handles USART2 global interrupt.
  319. */
  320. void USART2_IRQHandler(void)
  321. {
  322. /* USER CODE BEGIN USART2_IRQn 0 */
  323. /* USER CODE END USART2_IRQn 0 */
  324. HAL_UART_IRQHandler(&huart2);
  325. /* USER CODE BEGIN USART2_IRQn 1 */
  326. /* USER CODE END USART2_IRQn 1 */
  327. }
  328. /**
  329. * @brief This function handles USART3 global interrupt.
  330. */
  331. void USART3_IRQHandler(void)
  332. {
  333. /* USER CODE BEGIN USART3_IRQn 0 */
  334. /* USER CODE END USART3_IRQn 0 */
  335. HAL_UART_IRQHandler(&huart3);
  336. /* USER CODE BEGIN USART3_IRQn 1 */
  337. /* USER CODE END USART3_IRQn 1 */
  338. }
  339. /**
  340. * @brief This function handles UART4 global interrupt.
  341. */
  342. void UART4_IRQHandler(void)
  343. {
  344. /* USER CODE BEGIN UART4_IRQn 0 */
  345. uint32_t tmpFlag = 0;
  346. uint32_t temp;
  347. tmpFlag =__HAL_UART_GET_FLAG(&huart4,UART_FLAG_IDLE); //获取IDLE标志位
  348. if((tmpFlag != RESET))//idle标志被置位
  349. {
  350. __HAL_UART_CLEAR_IDLEFLAG(&huart4); //清除标志位
  351. HAL_UART_DMAStop(&huart4);
  352. temp = __HAL_DMA_GET_COUNTER(&hdma_uart4_rx); // 获取DMA中未传输的数据个数
  353. recvLength = 2048 - temp - 2; //-2>去掉\r\n //总计数减去未传输的数据个数,得到已经接收的数据个数
  354. u4length = recvLength;
  355. memcpy(g_ML307A_8buf, &recvBuff[2], recvLength);
  356. u4RecvFlag = true;
  357. HAL_UART_Receive_DMA(&huart4, recvBuff, 2048); //重新打开DMA接收,不然只能接收一次数据
  358. }
  359. /* USER CODE END UART4_IRQn 0 */
  360. HAL_UART_IRQHandler(&huart4);
  361. /* USER CODE BEGIN UART4_IRQn 1 */
  362. /* USER CODE END UART4_IRQn 1 */
  363. }
  364. /**
  365. * @brief This function handles UART5 global interrupt.
  366. */
  367. void UART5_IRQHandler(void)
  368. {
  369. /* USER CODE BEGIN UART5_IRQn 0 */
  370. static int index = 0; // 用于记录存储到数组中的位置
  371. uint8_t data;
  372. if (index > 0 && __HAL_UART_GET_FLAG(&huart5, UART_FLAG_IDLE) == SET)
  373. {
  374. index = 0; // 将记录位置的变量重新置为0
  375. }
  376. if (__HAL_UART_GET_FLAG(&huart5, UART_FLAG_RXNE) == SET) // 检查是否接收到数据
  377. {
  378. data = huart5.Instance->DR; // 从接收寄存器中读取数据
  379. g_MBA32A_8buf[index] = data; // 将数据存入数组中
  380. if (index < sizeof(g_MBA32A_8buf) - 1) // 如果还没有接收到数组最大长度的字节
  381. {
  382. index++; // 将记录位置的变量加1
  383. }
  384. u5length = index;
  385. memset(g_MBA32A_8buf_Down,0,index);
  386. // 将剩余数据转移到g_MBA32A_8buf_Down中去处理
  387. for (int i = 0; i < index; i++)
  388. {
  389. g_MBA32A_8buf_Down[i] = g_MBA32A_8buf[i];
  390. }
  391. }
  392. /* USER CODE END UART5_IRQn 0 */
  393. HAL_UART_IRQHandler(&huart5);
  394. /* USER CODE BEGIN UART5_IRQn 1 */
  395. /* USER CODE END UART5_IRQn 1 */
  396. }
  397. /**
  398. * @brief This function handles DMA2 channel3 global interrupt.
  399. */
  400. void DMA2_Channel3_IRQHandler(void)
  401. {
  402. /* USER CODE BEGIN DMA2_Channel3_IRQn 0 */
  403. /* USER CODE END DMA2_Channel3_IRQn 0 */
  404. HAL_DMA_IRQHandler(&hdma_uart4_rx);
  405. /* USER CODE BEGIN DMA2_Channel3_IRQn 1 */
  406. /* USER CODE END DMA2_Channel3_IRQn 1 */
  407. }
  408. /**
  409. * @brief This function handles DMA2 channel4 and channel5 global interrupts.
  410. */
  411. void DMA2_Channel4_5_IRQHandler(void)
  412. {
  413. /* USER CODE BEGIN DMA2_Channel4_5_IRQn 0 */
  414. /* USER CODE END DMA2_Channel4_5_IRQn 0 */
  415. HAL_DMA_IRQHandler(&hdma_uart4_tx);
  416. /* USER CODE BEGIN DMA2_Channel4_5_IRQn 1 */
  417. /* USER CODE END DMA2_Channel4_5_IRQn 1 */
  418. }
  419. /* USER CODE BEGIN 1 */
  420. /* USER CODE END 1 */