stm32f10x_it.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440
  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_tim1;
  27. irqCallback_ts *firstIrqCallback_tim1;
  28. irqCallback_ts *irqCallback_tim2cc2;
  29. irqCallback_ts *firstIrqCallback_tim2cc2;
  30. irqCallback_ts *irqCallback_tim2cc3;
  31. irqCallback_ts *firstIrqCallback_tim2cc3;
  32. irqCallback_ts *irqCallback_tim3cc4;
  33. irqCallback_ts *firstIrqCallback_tim3cc4;
  34. irqCallback_ts *irqCallback_tim3;
  35. irqCallback_ts *firstIrqCallback_tim3;
  36. irqCallback_ts *irqCallback_uart1;
  37. irqCallback_ts *firstIrqCallback_uart1;
  38. irqCallback_ts *irqCallback_uart3;
  39. irqCallback_ts *firstIrqCallback_uart3;
  40. irqCallback_ts *irqCallback_extiLine1;
  41. irqCallback_ts *firstIrqCallback_extiLine1;
  42. irqCallback_ts *irqCallback_extiLine2;
  43. irqCallback_ts *firstIrqCallback_extiLine2;
  44. irqCallback_ts *irqCallback_extiLine5;
  45. irqCallback_ts *firstIrqCallback_extiLine5;
  46. void NMI_Handler(void)
  47. {
  48. }
  49. void HardFault_Handler(void)
  50. {
  51. /* Go to infinite loop when Hard Fault exception occurs */
  52. while (1)
  53. {
  54. }
  55. }
  56. // void EXTI3_IRQHandler(void)
  57. // {
  58. // //rfIntRequest=1;
  59. // EXTI_ClearITPendingBit(EXTI_Line3); //清除EXTI0线路挂起位
  60. // }
  61. void MemManage_Handler(void)
  62. {
  63. /* Go to infinite loop when Memory Manage exception occurs */
  64. while (1)
  65. {
  66. }
  67. }
  68. void EXTILINE1_callbackRegiste(irqCallback_ts *cbStruct)
  69. {
  70. if (irqCallback_extiLine1 == 0)
  71. {
  72. irqCallback_extiLine1 = cbStruct;
  73. firstIrqCallback_extiLine1 = irqCallback_extiLine1;
  74. }
  75. else
  76. {
  77. if (irqCallback_extiLine1 != cbStruct)
  78. {
  79. irqCallback_extiLine1->nextStruct = cbStruct;
  80. irqCallback_extiLine1 = cbStruct;
  81. }
  82. }
  83. }
  84. void EXTI1_IRQHandler(void)
  85. {
  86. if(EXTI_GetITStatus(EXTI_Line1) != RESET)
  87. {
  88. /* Clear the EXTI line 1 pending bit */
  89. EXTI_ClearITPendingBit(EXTI_Line1);
  90. irqCallback_ts *irqCallbackTemp;
  91. irqCallbackTemp = firstIrqCallback_extiLine1;
  92. while (irqCallbackTemp)
  93. {
  94. irqCallbackTemp->thisCb(0, 0);
  95. irqCallbackTemp = irqCallbackTemp->nextStruct;
  96. }
  97. }
  98. }
  99. void EXTILINE2_callbackRegiste(irqCallback_ts *cbStruct)
  100. {
  101. if (irqCallback_extiLine2 == 0)
  102. {
  103. irqCallback_extiLine2 = cbStruct;
  104. firstIrqCallback_extiLine2 = irqCallback_extiLine2;
  105. }
  106. else
  107. {
  108. if (irqCallback_extiLine2 != cbStruct)
  109. {
  110. irqCallback_extiLine2->nextStruct = cbStruct;
  111. irqCallback_extiLine2 = cbStruct;
  112. }
  113. }
  114. }
  115. void EXTI2_IRQHandler(void)
  116. {
  117. if(EXTI_GetITStatus(EXTI_Line2) != RESET)
  118. {
  119. /* Clear the EXTI line 2 pending bit */
  120. EXTI_ClearITPendingBit(EXTI_Line2);
  121. irqCallback_ts *irqCallbackTemp;
  122. irqCallbackTemp = firstIrqCallback_extiLine2;
  123. while (irqCallbackTemp)
  124. {
  125. irqCallbackTemp->thisCb(0, 0);
  126. irqCallbackTemp = irqCallbackTemp->nextStruct;
  127. }
  128. }
  129. }
  130. void EXTILINE5_callbackRegiste(irqCallback_ts *cbStruct)
  131. {
  132. if (irqCallback_extiLine5 == 0)
  133. {
  134. irqCallback_extiLine5 = cbStruct;
  135. firstIrqCallback_extiLine5 = irqCallback_extiLine5;
  136. }
  137. else
  138. {
  139. if (irqCallback_extiLine5 != cbStruct)
  140. {
  141. irqCallback_extiLine5->nextStruct = cbStruct;
  142. irqCallback_extiLine5 = cbStruct;
  143. }
  144. }
  145. }
  146. void EXTI9_5_IRQHandler(void)
  147. {
  148. if(EXTI_GetITStatus(EXTI_Line5) != RESET)
  149. {
  150. /* Clear the EXTI line 1 pending bit */
  151. EXTI_ClearITPendingBit(EXTI_Line5);
  152. irqCallback_ts *irqCallbackTemp;
  153. irqCallbackTemp = firstIrqCallback_extiLine5;
  154. while (irqCallbackTemp)
  155. {
  156. irqCallbackTemp->thisCb(0, 0);
  157. irqCallbackTemp = irqCallbackTemp->nextStruct;
  158. }
  159. }
  160. }
  161. void USART1_callbackRegiste(irqCallback_ts *cbStruct)
  162. {
  163. if (irqCallback_uart1 == 0)
  164. {
  165. irqCallback_uart1 = cbStruct;
  166. firstIrqCallback_uart1 = irqCallback_uart1;
  167. }
  168. else
  169. {
  170. if (irqCallback_uart1 != cbStruct)
  171. {
  172. irqCallback_uart1->nextStruct = cbStruct;
  173. irqCallback_uart1 = cbStruct;
  174. }
  175. }
  176. }
  177. void USART1_IRQHandler(void) //串口1中断服务程序
  178. {
  179. uint16_t recvData;
  180. irqCallback_ts *irqCallbackTemp;
  181. irqCallbackTemp = firstIrqCallback_uart1;
  182. if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)
  183. {
  184. recvData = USART_ReceiveData(USART3);
  185. while (irqCallbackTemp)
  186. {
  187. irqCallbackTemp->thisCb(0, recvData);
  188. irqCallbackTemp = irqCallbackTemp->nextStruct;
  189. }
  190. }
  191. if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //
  192. {
  193. recvData = USART_ReceiveData(USART3);
  194. while (irqCallbackTemp)
  195. {
  196. irqCallbackTemp->thisCb(1, recvData);
  197. irqCallbackTemp = irqCallbackTemp->nextStruct;
  198. }
  199. }
  200. }
  201. void USART3_callbackRegiste(irqCallback_ts *cbStruct)
  202. {
  203. if (irqCallback_uart3 == 0)
  204. {
  205. irqCallback_uart3 = cbStruct;
  206. firstIrqCallback_uart3 = irqCallback_uart3;
  207. }
  208. else
  209. {
  210. if (irqCallback_uart3 != cbStruct)
  211. {
  212. irqCallback_uart3->nextStruct = cbStruct;
  213. irqCallback_uart3 = cbStruct;
  214. }
  215. }
  216. }
  217. void USART3_IRQHandler(void) //串口1中断服务程序
  218. {
  219. uint16_t recvData;
  220. irqCallback_ts *irqCallbackTemp;
  221. irqCallbackTemp = firstIrqCallback_uart3;
  222. if(USART_GetITStatus(USART3, USART_IT_IDLE) != RESET)
  223. {
  224. recvData = USART_ReceiveData(USART3);
  225. while (irqCallbackTemp)
  226. {
  227. irqCallbackTemp->thisCb(0, recvData);
  228. irqCallbackTemp = irqCallbackTemp->nextStruct;
  229. }
  230. }
  231. if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
  232. {
  233. recvData = USART_ReceiveData(USART3);
  234. while (irqCallbackTemp)
  235. {
  236. irqCallbackTemp->thisCb(1, recvData);
  237. irqCallbackTemp = irqCallbackTemp->nextStruct;
  238. }
  239. }
  240. }
  241. void TIM1_callbackRegiste(irqCallback_ts *cbStruct)
  242. {
  243. if (irqCallback_tim1 == 0)
  244. {
  245. irqCallback_tim1 = cbStruct;
  246. firstIrqCallback_tim1 = irqCallback_tim1;
  247. }
  248. else
  249. {
  250. if (irqCallback_tim1 != cbStruct)
  251. {
  252. irqCallback_tim1->nextStruct = cbStruct;
  253. irqCallback_tim1 = cbStruct;
  254. }
  255. }
  256. }
  257. void TIM1_UP_IRQHandler(void) //TIM1中断
  258. {
  259. if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否
  260. {
  261. TIM_ClearITPendingBit(TIM1, TIM_IT_Update ); //清除TIMx更新中断标志
  262. irqCallback_ts *irqCallbackTemp;
  263. irqCallbackTemp = firstIrqCallback_tim1;
  264. while (irqCallbackTemp)
  265. {
  266. irqCallbackTemp->thisCb(0, 0);
  267. irqCallbackTemp = irqCallbackTemp->nextStruct;
  268. }
  269. }
  270. }
  271. void TIM2CC2_callbackRegiste(irqCallback_ts *cbStruct)
  272. {
  273. if (irqCallback_tim2cc2 == 0)
  274. {
  275. irqCallback_tim2cc2 = cbStruct;
  276. firstIrqCallback_tim2cc2 = irqCallback_tim2cc2;
  277. }
  278. else
  279. {
  280. if (irqCallback_tim2cc2 != cbStruct)
  281. {
  282. irqCallback_tim2cc2->nextStruct = cbStruct;
  283. irqCallback_tim2cc2 = cbStruct;
  284. }
  285. }
  286. }
  287. void TIM2CC3_callbackRegiste(irqCallback_ts *cbStruct)
  288. {
  289. if (irqCallback_tim2cc3 == 0)
  290. {
  291. irqCallback_tim2cc3 = cbStruct;
  292. firstIrqCallback_tim2cc3 = irqCallback_tim2cc3;
  293. }
  294. else
  295. {
  296. if (irqCallback_tim2cc3 != cbStruct)
  297. {
  298. irqCallback_tim2cc3->nextStruct = cbStruct;
  299. irqCallback_tim2cc3 = cbStruct;
  300. }
  301. }
  302. }
  303. void TIM2_IRQHandler(void)
  304. {
  305. if(TIM_GetITStatus(TIM2, TIM_IT_CC3) == SET)
  306. {
  307. /* Clear TIM2 Capture compare interrupt pending bit */
  308. TIM_ClearITPendingBit(TIM2, TIM_IT_CC3);
  309. irqCallback_ts *irqCallbackTemp;
  310. irqCallbackTemp = firstIrqCallback_tim2cc3;
  311. while (irqCallbackTemp)
  312. {
  313. irqCallbackTemp->thisCb(0, 0);
  314. irqCallbackTemp = irqCallbackTemp->nextStruct;
  315. }
  316. }
  317. if(TIM_GetITStatus(TIM2, TIM_IT_CC2) == SET)
  318. {
  319. /* Clear TIM2 Capture compare interrupt pending bit */
  320. TIM_ClearITPendingBit(TIM2, TIM_IT_CC2);
  321. irqCallback_ts *irqCallbackTemp;
  322. irqCallbackTemp = firstIrqCallback_tim2cc2;
  323. while (irqCallbackTemp)
  324. {
  325. irqCallbackTemp->thisCb(0, 0);
  326. irqCallbackTemp = irqCallbackTemp->nextStruct;
  327. }
  328. }
  329. }
  330. void TIM3_callbackRegiste(irqCallback_ts *cbStruct)
  331. {
  332. if (irqCallback_tim3 == 0)
  333. {
  334. irqCallback_tim3 = cbStruct;
  335. firstIrqCallback_tim3 = irqCallback_tim3;
  336. }
  337. else
  338. {
  339. if (irqCallback_tim3 != cbStruct)
  340. {
  341. irqCallback_tim3->nextStruct = cbStruct;
  342. irqCallback_tim3 = cbStruct;
  343. }
  344. }
  345. }
  346. void TIM3CC4_callbackRegiste(irqCallback_ts *cbStruct)
  347. {
  348. if (irqCallback_tim3cc4 == 0)
  349. {
  350. irqCallback_tim3cc4 = cbStruct;
  351. firstIrqCallback_tim3cc4 = irqCallback_tim3cc4;
  352. }
  353. else
  354. {
  355. if (irqCallback_tim3cc4 != cbStruct)
  356. {
  357. irqCallback_tim3cc4->nextStruct = cbStruct;
  358. irqCallback_tim3cc4 = cbStruct;
  359. }
  360. }
  361. }
  362. void TIM3_IRQHandler(void) //TIM3中断
  363. {
  364. if(TIM_GetITStatus(TIM3, TIM_IT_CC4) == SET)
  365. {
  366. /* Clear TIM3 Capture compare interrupt pending bit */
  367. TIM_ClearITPendingBit(TIM3, TIM_IT_CC4);
  368. irqCallback_ts *irqCallbackTemp;
  369. irqCallbackTemp = firstIrqCallback_tim3cc4;
  370. while (irqCallbackTemp)
  371. {
  372. irqCallbackTemp->thisCb(0, 0);
  373. irqCallbackTemp = irqCallbackTemp->nextStruct;
  374. }
  375. }
  376. if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否
  377. {
  378. TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新中断标志
  379. irqCallback_ts *irqCallbackTemp;
  380. irqCallbackTemp = firstIrqCallback_tim3;
  381. while (irqCallbackTemp)
  382. {
  383. irqCallbackTemp->thisCb(0, 0);
  384. irqCallbackTemp = irqCallbackTemp->nextStruct;
  385. }
  386. }
  387. }
  388. void BusFault_Handler(void)
  389. {
  390. /* Go to infinite loop when Bus Fault exception occurs */
  391. while (1)
  392. {
  393. }
  394. }
  395. void UsageFault_Handler(void)
  396. {
  397. /* Go to infinite loop when Usage Fault exception occurs */
  398. while (1)
  399. {
  400. }
  401. }
  402. void SVC_Handler(void)
  403. {
  404. }
  405. void DebugMon_Handler(void)
  406. {
  407. }
  408. void PendSV_Handler(void)
  409. {
  410. }
  411. void SysTick_Handler(void)
  412. {
  413. }
  414. /******************************************************************************/
  415. /* STM32F10x Peripherals Interrupt Handlers */
  416. /* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */
  417. /* available peripheral interrupt handler's name please refer to the startup */
  418. /* file (startup_stm32f10x_xx.s). */
  419. /******************************************************************************/