stm32f10x_it.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473
  1. /**
  2. ******************************************************************************
  3. * @file GPIO/IOToggle/stm32f10x_it.c
  4. * @author MCD Application Team
  5. * @version V3.5.0
  6. * @date 08-April-2011
  7. * @brief Main Interrupt Service Routines.
  8. * This file provides template for all exceptions handler and peripherals
  9. * interrupt service routine.
  10. ******************************************************************************
  11. * @attention
  12. *
  13. * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  14. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  15. * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  16. * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  17. * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  18. * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  19. *
  20. * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  21. ******************************************************************************
  22. */
  23. /* Includes ------------------------------------------------------------------*/
  24. #include "stm32f10x_it.h"
  25. volatile uint8_t rfIntRequest = 0;
  26. irqCallback_ts *irqCallback_extiLine0;
  27. irqCallback_ts *firstIrqCallback_extiLine0;
  28. irqCallback_ts *irqCallback_tim1;
  29. irqCallback_ts *firstIrqCallback_tim1;
  30. irqCallback_ts *irqCallback_tim2cc2;
  31. irqCallback_ts *firstIrqCallback_tim2cc2;
  32. irqCallback_ts *irqCallback_tim2cc3;
  33. irqCallback_ts *firstIrqCallback_tim2cc3;
  34. irqCallback_ts *irqCallback_tim3cc4;
  35. irqCallback_ts *firstIrqCallback_tim3cc4;
  36. irqCallback_ts *irqCallback_tim3;
  37. irqCallback_ts *firstIrqCallback_tim3;
  38. irqCallback_ts *irqCallback_uart1;
  39. irqCallback_ts *firstIrqCallback_uart1;
  40. irqCallback_ts *irqCallback_uart3;
  41. irqCallback_ts *firstIrqCallback_uart3;
  42. irqCallback_ts *irqCallback_extiLine1;
  43. irqCallback_ts *firstIrqCallback_extiLine1;
  44. irqCallback_ts *irqCallback_extiLine2;
  45. irqCallback_ts *firstIrqCallback_extiLine2;
  46. irqCallback_ts *irqCallback_extiLine5;
  47. irqCallback_ts *firstIrqCallback_extiLine5;
  48. void NMI_Handler(void)
  49. {
  50. }
  51. void HardFault_Handler(void)
  52. {
  53. /* Go to infinite loop when Hard Fault exception occurs */
  54. while (1)
  55. {
  56. }
  57. }
  58. // void EXTI3_IRQHandler(void)
  59. // {
  60. // //rfIntRequest=1;
  61. // EXTI_ClearITPendingBit(EXTI_Line3); //清除EXTI0线路挂起位
  62. // }
  63. void MemManage_Handler(void)
  64. {
  65. /* Go to infinite loop when Memory Manage exception occurs */
  66. while (1)
  67. {
  68. }
  69. }
  70. void EXTILINE0_callbackRegiste(irqCallback_ts *cbStruct)
  71. {
  72. if (irqCallback_extiLine0 == 0)
  73. {
  74. irqCallback_extiLine0 = cbStruct;
  75. firstIrqCallback_extiLine0 = irqCallback_extiLine0;
  76. }
  77. else
  78. {
  79. if (irqCallback_extiLine0 != cbStruct)
  80. {
  81. irqCallback_extiLine0->nextStruct = cbStruct;
  82. irqCallback_extiLine0 = cbStruct;
  83. }
  84. }
  85. }
  86. void EXTI0_IRQHandler(void)
  87. {
  88. if(EXTI_GetITStatus(EXTI_Line0) != RESET)
  89. {
  90. /* Clear the EXTI line 1 pending bit */
  91. EXTI_ClearITPendingBit(EXTI_Line0);
  92. irqCallback_ts *irqCallbackTemp;
  93. irqCallbackTemp = firstIrqCallback_extiLine0;
  94. while (irqCallbackTemp)
  95. {
  96. irqCallbackTemp->thisCb(0, 0);
  97. irqCallbackTemp = irqCallbackTemp->nextStruct;
  98. }
  99. }
  100. }
  101. void EXTILINE1_callbackRegiste(irqCallback_ts *cbStruct)
  102. {
  103. if (irqCallback_extiLine1 == 0)
  104. {
  105. irqCallback_extiLine1 = cbStruct;
  106. firstIrqCallback_extiLine1 = irqCallback_extiLine1;
  107. }
  108. else
  109. {
  110. if (irqCallback_extiLine1 != cbStruct)
  111. {
  112. irqCallback_extiLine1->nextStruct = cbStruct;
  113. irqCallback_extiLine1 = cbStruct;
  114. }
  115. }
  116. }
  117. void EXTI1_IRQHandler(void)
  118. {
  119. if(EXTI_GetITStatus(EXTI_Line1) != RESET)
  120. {
  121. /* Clear the EXTI line 1 pending bit */
  122. EXTI_ClearITPendingBit(EXTI_Line1);
  123. irqCallback_ts *irqCallbackTemp;
  124. irqCallbackTemp = firstIrqCallback_extiLine1;
  125. while (irqCallbackTemp)
  126. {
  127. irqCallbackTemp->thisCb(0, 0);
  128. irqCallbackTemp = irqCallbackTemp->nextStruct;
  129. }
  130. }
  131. }
  132. void EXTILINE2_callbackRegiste(irqCallback_ts *cbStruct)
  133. {
  134. if (irqCallback_extiLine2 == 0)
  135. {
  136. irqCallback_extiLine2 = cbStruct;
  137. firstIrqCallback_extiLine2 = irqCallback_extiLine2;
  138. }
  139. else
  140. {
  141. if (irqCallback_extiLine2 != cbStruct)
  142. {
  143. irqCallback_extiLine2->nextStruct = cbStruct;
  144. irqCallback_extiLine2 = cbStruct;
  145. }
  146. }
  147. }
  148. void EXTI2_IRQHandler(void)
  149. {
  150. if(EXTI_GetITStatus(EXTI_Line2) != RESET)
  151. {
  152. /* Clear the EXTI line 2 pending bit */
  153. EXTI_ClearITPendingBit(EXTI_Line2);
  154. irqCallback_ts *irqCallbackTemp;
  155. irqCallbackTemp = firstIrqCallback_extiLine2;
  156. while (irqCallbackTemp)
  157. {
  158. irqCallbackTemp->thisCb(0, 0);
  159. irqCallbackTemp = irqCallbackTemp->nextStruct;
  160. }
  161. }
  162. }
  163. void EXTILINE5_callbackRegiste(irqCallback_ts *cbStruct)
  164. {
  165. if (irqCallback_extiLine5 == 0)
  166. {
  167. irqCallback_extiLine5 = cbStruct;
  168. firstIrqCallback_extiLine5 = irqCallback_extiLine5;
  169. }
  170. else
  171. {
  172. if (irqCallback_extiLine5 != cbStruct)
  173. {
  174. irqCallback_extiLine5->nextStruct = cbStruct;
  175. irqCallback_extiLine5 = cbStruct;
  176. }
  177. }
  178. }
  179. void EXTI9_5_IRQHandler(void)
  180. {
  181. if(EXTI_GetITStatus(EXTI_Line5) != RESET)
  182. {
  183. /* Clear the EXTI line 1 pending bit */
  184. EXTI_ClearITPendingBit(EXTI_Line5);
  185. irqCallback_ts *irqCallbackTemp;
  186. irqCallbackTemp = firstIrqCallback_extiLine5;
  187. while (irqCallbackTemp)
  188. {
  189. irqCallbackTemp->thisCb(0, 0);
  190. irqCallbackTemp = irqCallbackTemp->nextStruct;
  191. }
  192. }
  193. }
  194. void USART1_callbackRegiste(irqCallback_ts *cbStruct)
  195. {
  196. if (irqCallback_uart1 == 0)
  197. {
  198. irqCallback_uart1 = cbStruct;
  199. firstIrqCallback_uart1 = irqCallback_uart1;
  200. }
  201. else
  202. {
  203. if (irqCallback_uart1 != cbStruct)
  204. {
  205. irqCallback_uart1->nextStruct = cbStruct;
  206. irqCallback_uart1 = cbStruct;
  207. }
  208. }
  209. }
  210. void USART1_IRQHandler(void) //串口1中断服务程序
  211. {
  212. uint16_t recvData;
  213. irqCallback_ts *irqCallbackTemp;
  214. irqCallbackTemp = firstIrqCallback_uart1;
  215. if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)
  216. {
  217. recvData = USART_ReceiveData(USART1);
  218. while (irqCallbackTemp)
  219. {
  220. irqCallbackTemp->thisCb(0, recvData);
  221. irqCallbackTemp = irqCallbackTemp->nextStruct;
  222. }
  223. }
  224. if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //
  225. {
  226. recvData = USART_ReceiveData(USART1);
  227. while (irqCallbackTemp)
  228. {
  229. irqCallbackTemp->thisCb(1, recvData);
  230. irqCallbackTemp = irqCallbackTemp->nextStruct;
  231. }
  232. }
  233. }
  234. void USART3_callbackRegiste(irqCallback_ts *cbStruct)
  235. {
  236. if (irqCallback_uart3 == 0)
  237. {
  238. irqCallback_uart3 = cbStruct;
  239. firstIrqCallback_uart3 = irqCallback_uart3;
  240. }
  241. else
  242. {
  243. if (irqCallback_uart3 != cbStruct)
  244. {
  245. irqCallback_uart3->nextStruct = cbStruct;
  246. irqCallback_uart3 = cbStruct;
  247. }
  248. }
  249. }
  250. void USART3_IRQHandler(void) //串口1中断服务程序
  251. {
  252. uint16_t recvData;
  253. irqCallback_ts *irqCallbackTemp;
  254. irqCallbackTemp = firstIrqCallback_uart3;
  255. if(USART_GetITStatus(USART3, USART_IT_IDLE) != RESET)
  256. {
  257. recvData = USART_ReceiveData(USART3);
  258. while (irqCallbackTemp)
  259. {
  260. irqCallbackTemp->thisCb(0, recvData);
  261. irqCallbackTemp = irqCallbackTemp->nextStruct;
  262. }
  263. }
  264. if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
  265. {
  266. recvData = USART_ReceiveData(USART3);
  267. while (irqCallbackTemp)
  268. {
  269. irqCallbackTemp->thisCb(1, recvData);
  270. irqCallbackTemp = irqCallbackTemp->nextStruct;
  271. }
  272. }
  273. }
  274. void TIM1_callbackRegiste(irqCallback_ts *cbStruct)
  275. {
  276. if (irqCallback_tim1 == 0)
  277. {
  278. irqCallback_tim1 = cbStruct;
  279. firstIrqCallback_tim1 = irqCallback_tim1;
  280. }
  281. else
  282. {
  283. if (irqCallback_tim1 != cbStruct)
  284. {
  285. irqCallback_tim1->nextStruct = cbStruct;
  286. irqCallback_tim1 = cbStruct;
  287. }
  288. }
  289. }
  290. void TIM1_UP_IRQHandler(void) //TIM1中断
  291. {
  292. if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否
  293. {
  294. TIM_ClearITPendingBit(TIM1, TIM_IT_Update ); //清除TIMx更新中断标志
  295. irqCallback_ts *irqCallbackTemp;
  296. irqCallbackTemp = firstIrqCallback_tim1;
  297. while (irqCallbackTemp)
  298. {
  299. irqCallbackTemp->thisCb(0, 0);
  300. irqCallbackTemp = irqCallbackTemp->nextStruct;
  301. }
  302. }
  303. }
  304. void TIM2CC2_callbackRegiste(irqCallback_ts *cbStruct)
  305. {
  306. if (irqCallback_tim2cc2 == 0)
  307. {
  308. irqCallback_tim2cc2 = cbStruct;
  309. firstIrqCallback_tim2cc2 = irqCallback_tim2cc2;
  310. }
  311. else
  312. {
  313. if (irqCallback_tim2cc2 != cbStruct)
  314. {
  315. irqCallback_tim2cc2->nextStruct = cbStruct;
  316. irqCallback_tim2cc2 = cbStruct;
  317. }
  318. }
  319. }
  320. void TIM2CC3_callbackRegiste(irqCallback_ts *cbStruct)
  321. {
  322. if (irqCallback_tim2cc3 == 0)
  323. {
  324. irqCallback_tim2cc3 = cbStruct;
  325. firstIrqCallback_tim2cc3 = irqCallback_tim2cc3;
  326. }
  327. else
  328. {
  329. if (irqCallback_tim2cc3 != cbStruct)
  330. {
  331. irqCallback_tim2cc3->nextStruct = cbStruct;
  332. irqCallback_tim2cc3 = cbStruct;
  333. }
  334. }
  335. }
  336. void TIM2_IRQHandler(void)
  337. {
  338. if(TIM_GetITStatus(TIM2, TIM_IT_CC3) == SET)
  339. {
  340. /* Clear TIM2 Capture compare interrupt pending bit */
  341. TIM_ClearITPendingBit(TIM2, TIM_IT_CC3);
  342. irqCallback_ts *irqCallbackTemp;
  343. irqCallbackTemp = firstIrqCallback_tim2cc3;
  344. while (irqCallbackTemp)
  345. {
  346. irqCallbackTemp->thisCb(0, 0);
  347. irqCallbackTemp = irqCallbackTemp->nextStruct;
  348. }
  349. }
  350. if(TIM_GetITStatus(TIM2, TIM_IT_CC2) == SET)
  351. {
  352. /* Clear TIM2 Capture compare interrupt pending bit */
  353. TIM_ClearITPendingBit(TIM2, TIM_IT_CC2);
  354. irqCallback_ts *irqCallbackTemp;
  355. irqCallbackTemp = firstIrqCallback_tim2cc2;
  356. while (irqCallbackTemp)
  357. {
  358. irqCallbackTemp->thisCb(0, 0);
  359. irqCallbackTemp = irqCallbackTemp->nextStruct;
  360. }
  361. }
  362. }
  363. void TIM3_callbackRegiste(irqCallback_ts *cbStruct)
  364. {
  365. if (irqCallback_tim3 == 0)
  366. {
  367. irqCallback_tim3 = cbStruct;
  368. firstIrqCallback_tim3 = irqCallback_tim3;
  369. }
  370. else
  371. {
  372. if (irqCallback_tim3 != cbStruct)
  373. {
  374. irqCallback_tim3->nextStruct = cbStruct;
  375. irqCallback_tim3 = cbStruct;
  376. }
  377. }
  378. }
  379. void TIM3CC4_callbackRegiste(irqCallback_ts *cbStruct)
  380. {
  381. if (irqCallback_tim3cc4 == 0)
  382. {
  383. irqCallback_tim3cc4 = cbStruct;
  384. firstIrqCallback_tim3cc4 = irqCallback_tim3cc4;
  385. }
  386. else
  387. {
  388. if (irqCallback_tim3cc4 != cbStruct)
  389. {
  390. irqCallback_tim3cc4->nextStruct = cbStruct;
  391. irqCallback_tim3cc4 = cbStruct;
  392. }
  393. }
  394. }
  395. void TIM3_IRQHandler(void) //TIM3中断
  396. {
  397. if(TIM_GetITStatus(TIM3, TIM_IT_CC4) == SET)
  398. {
  399. /* Clear TIM3 Capture compare interrupt pending bit */
  400. TIM_ClearITPendingBit(TIM3, TIM_IT_CC4);
  401. irqCallback_ts *irqCallbackTemp;
  402. irqCallbackTemp = firstIrqCallback_tim3cc4;
  403. while (irqCallbackTemp)
  404. {
  405. irqCallbackTemp->thisCb(0, 0);
  406. irqCallbackTemp = irqCallbackTemp->nextStruct;
  407. }
  408. }
  409. if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否
  410. {
  411. TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新中断标志
  412. irqCallback_ts *irqCallbackTemp;
  413. irqCallbackTemp = firstIrqCallback_tim3;
  414. while (irqCallbackTemp)
  415. {
  416. irqCallbackTemp->thisCb(0, 0);
  417. irqCallbackTemp = irqCallbackTemp->nextStruct;
  418. }
  419. }
  420. }
  421. void BusFault_Handler(void)
  422. {
  423. /* Go to infinite loop when Bus Fault exception occurs */
  424. while (1)
  425. {
  426. }
  427. }
  428. void UsageFault_Handler(void)
  429. {
  430. /* Go to infinite loop when Usage Fault exception occurs */
  431. while (1)
  432. {
  433. }
  434. }
  435. void SVC_Handler(void)
  436. {
  437. }
  438. void DebugMon_Handler(void)
  439. {
  440. }
  441. void PendSV_Handler(void)
  442. {
  443. }
  444. void SysTick_Handler(void)
  445. {
  446. }
  447. /******************************************************************************/
  448. /* STM32F10x Peripherals Interrupt Handlers */
  449. /* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */
  450. /* available peripheral interrupt handler's name please refer to the startup */
  451. /* file (startup_stm32f10x_xx.s). */
  452. /******************************************************************************/