/_01_STM32F4/_05_FSK通信/_05_Drive/Drive_Exti.c

https://github.com/WittXie/STM32 · C · 320 lines · 182 code · 78 blank · 60 comment · 39 complexity · d1c4e386376e62487c42fd556e61434d MD5 · raw file

  1. /*******************************(C) COPYRIGHT 2016 Wind£¨Ð»ÓñÉ죩*********************************/
  2. /**============================================================================
  3. * @FileName : Drive_Exti.c
  4. * @Description : None
  5. * @Date : 2016/7/10
  6. * @By : Wind£¨Ð»ÓñÉ죩
  7. * @Email : 1659567673@ qq.com
  8. * @Platform : Keil uVision5 v5.15 (STM32F407ZG)
  9. * @Explain : None
  10. *=============================================================================*/
  11. /* Í·Îļþ°üº¬ ----------------------------------------------------------------*/
  12. #include "Drive_Exti.h"
  13. /* ˽Óк궨Òå ----------------------------------------------------------------*/
  14. /* ˽ÓУ¨¾²Ì¬£©º¯ÊýÉùÃ÷ ------------------------------------------------------*/
  15. /* È«¾Ö±äÁ¿¶¨Òå --------------------------------------------------------------*/
  16. /* È«¾Öº¯Êý±àд --------------------------------------------------------------*/
  17. /**----------------------------------------------------------------------------
  18. * @FunctionName : Exti0_Init()
  19. * @Description : None
  20. * @Data : 2016/7/11
  21. * @Explain : None
  22. ------------------------------------------------------------------------------*/
  23. void Exti0_Init(void)
  24. {
  25. NVIC_InitTypeDef NVIC_InitStructure;
  26. EXTI_InitTypeDef EXTI_InitStructure;
  27. GPIO_InitTypeDef GPIO_InitStructure;
  28. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//ʹÄÜGPIOA,GPIOEʱÖÓ
  29. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  30. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//ÆÕͨÊäÈëģʽ
  31. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
  32. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ­
  33. GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯GPIOE0,2
  34. RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//ʹÄÜSYSCFGʱÖÓ
  35. SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);//PE0 Á¬½Óµ½ÖжÏÏß0
  36. /* ÅäÖÃEXTI_Line0 */
  37. EXTI_InitStructure.EXTI_Line = EXTI_Line0;
  38. EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//ÖжÏʼþ
  39. EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //ϽµÑØ´¥·¢
  40. EXTI_InitStructure.EXTI_LineCmd = ENABLE;//ÖжÏÏßʹÄÜ
  41. EXTI_Init(&EXTI_InitStructure);//ÅäÖÃ
  42. NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//ÍⲿÖжÏ0
  43. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;//ÇÀÕ¼ÓÅÏȼ¶0
  44. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;//×ÓÓÅÏȼ¶2
  45. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//ʹÄÜÍⲿÖжÏͨµÀ
  46. NVIC_Init(&NVIC_InitStructure);//ÅäÖÃ
  47. EXTI_ClearITPendingBit(EXTI_Line0); //Çå³ýLINE0ÉϵÄÖжϱê־λ
  48. }
  49. /**----------------------------------------------------------------------------
  50. * @FunctionName : Exti1_Init()
  51. * @Description : None
  52. * @Data : 2016/7/11
  53. * @Explain : None
  54. ------------------------------------------------------------------------------*/
  55. void Exti1_Init(void)
  56. {
  57. NVIC_InitTypeDef NVIC_InitStructure;
  58. EXTI_InitTypeDef EXTI_InitStructure;
  59. GPIO_InitTypeDef GPIO_InitStructure;
  60. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//ʹÄÜGPIOA,GPIOEʱÖÓ
  61. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
  62. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//ÆÕͨÊäÈëģʽ
  63. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
  64. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ­
  65. GPIO_Init(GPIOC, &GPIO_InitStructure);//³õʼ»¯GPIOE0,2
  66. RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//ʹÄÜSYSCFGʱÖÓ
  67. SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource1);//PE0 Á¬½Óµ½ÖжÏÏß0
  68. /* ÅäÖÃEXTI_Line0 */
  69. EXTI_InitStructure.EXTI_Line = EXTI_Line1;
  70. EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//ÖжÏʼþ
  71. EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //ϽµÑØ´¥·¢
  72. EXTI_InitStructure.EXTI_LineCmd = ENABLE;//ÖжÏÏßʹÄÜ
  73. EXTI_Init(&EXTI_InitStructure);//ÅäÖÃ
  74. NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;//ÍⲿÖжÏ0
  75. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;//ÇÀÕ¼ÓÅÏȼ¶0
  76. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;//×ÓÓÅÏȼ¶2
  77. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//ʹÄÜÍⲿÖжÏͨµÀ
  78. NVIC_Init(&NVIC_InitStructure);//ÅäÖÃ
  79. EXTI_ClearITPendingBit(EXTI_Line1); //Çå³ýLINE0ÉϵÄÖжϱê־λ
  80. }
  81. /**----------------------------------------------------------------------------
  82. * @FunctionName : Exti2_Init()
  83. * @Description : None
  84. * @Data : 2016/7/11
  85. * @Explain : None
  86. ------------------------------------------------------------------------------*/
  87. void Exti2_Init(void)
  88. {
  89. NVIC_InitTypeDef NVIC_InitStructure;
  90. EXTI_InitTypeDef EXTI_InitStructure;
  91. GPIO_InitTypeDef GPIO_InitStructure;
  92. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//ʹÄÜGPIOA,GPIOEʱÖÓ
  93. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  94. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//ÆÕͨÊäÈëģʽ
  95. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
  96. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ­
  97. GPIO_Init(GPIOC, &GPIO_InitStructure);//³õʼ»¯GPIOE0,2
  98. RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//ʹÄÜSYSCFGʱÖÓ
  99. SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource2);//PE0 Á¬½Óµ½ÖжÏÏß0
  100. /* ÅäÖÃEXTI_Line0 */
  101. EXTI_InitStructure.EXTI_Line = EXTI_Line2;
  102. EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//ÖжÏʼþ
  103. EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //ϽµÑØ´¥·¢
  104. EXTI_InitStructure.EXTI_LineCmd = ENABLE;//ÖжÏÏßʹÄÜ
  105. EXTI_Init(&EXTI_InitStructure);//ÅäÖÃ
  106. NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;//ÍⲿÖжÏ0
  107. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;//ÇÀÕ¼ÓÅÏȼ¶0
  108. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;//×ÓÓÅÏȼ¶2
  109. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//ʹÄÜÍⲿÖжÏͨµÀ
  110. NVIC_Init(&NVIC_InitStructure);//ÅäÖÃ
  111. EXTI_ClearITPendingBit(EXTI_Line2); //Çå³ýLINE0ÉϵÄÖжϱê־λ
  112. }
  113. /**----------------------------------------------------------------------------
  114. * @FunctionName : Exti3_Init()
  115. * @Description : None
  116. * @Data : 2016/7/11
  117. * @Explain : None
  118. ------------------------------------------------------------------------------*/
  119. void Exti3_Init(void)
  120. {
  121. NVIC_InitTypeDef NVIC_InitStructure;
  122. EXTI_InitTypeDef EXTI_InitStructure;
  123. GPIO_InitTypeDef GPIO_InitStructure;
  124. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//ʹÄÜGPIOA,GPIOEʱÖÓ
  125. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  126. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//ÆÕͨÊäÈëģʽ
  127. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
  128. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ­
  129. GPIO_Init(GPIOC, &GPIO_InitStructure);//³õʼ»¯GPIOE0,2
  130. RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//ʹÄÜSYSCFGʱÖÓ
  131. SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource3);//PE0 Á¬½Óµ½ÖжÏÏß0
  132. /* ÅäÖÃEXTI_Line0 */
  133. EXTI_InitStructure.EXTI_Line = EXTI_Line3;
  134. EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//ÖжÏʼþ
  135. EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //ϽµÑØ´¥·¢
  136. EXTI_InitStructure.EXTI_LineCmd = ENABLE;//ÖжÏÏßʹÄÜ
  137. EXTI_Init(&EXTI_InitStructure);//ÅäÖÃ
  138. NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;//ÍⲿÖжÏ0
  139. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;//ÇÀÕ¼ÓÅÏȼ¶0
  140. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;//×ÓÓÅÏȼ¶2
  141. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//ʹÄÜÍⲿÖжÏͨµÀ
  142. NVIC_Init(&NVIC_InitStructure);//ÅäÖÃ
  143. EXTI_ClearITPendingBit(EXTI_Line3); //Çå³ýLINE0ÉϵÄÖжϱê־λ
  144. }
  145. /**----------------------------------------------------------------------------
  146. * @FunctionName : Exti4_Init()
  147. * @Description : ²âƵ
  148. * @Data : 2016/7/11
  149. * @Explain : None
  150. ------------------------------------------------------------------------------*/
  151. void Exti4_Init(void)
  152. {
  153. NVIC_InitTypeDef NVIC_InitStructure;
  154. EXTI_InitTypeDef EXTI_InitStructure;
  155. GPIO_InitTypeDef GPIO_InitStructure;
  156. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);//ʹÄÜGPIOʱÖÓ
  157. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  158. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//ÆÕͨÊäÈëģʽ
  159. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
  160. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ­
  161. GPIO_Init(GPIOE, &GPIO_InitStructure);//³õʼ»¯GPIO
  162. RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//ʹÄÜSYSCFGʱÖÓ
  163. SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource4);// Á¬½Óµ½ÖжÏÏß
  164. /* ÅäÖÃEXTI_Line */
  165. EXTI_InitStructure.EXTI_Line = EXTI_Line4;
  166. EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//ÖжÏʼþ
  167. EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //ϽµÑØ´¥·¢
  168. EXTI_InitStructure.EXTI_LineCmd = ENABLE;//ÖжÏÏßʹÄÜ
  169. EXTI_Init(&EXTI_InitStructure);//ÅäÖÃ
  170. NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;//ÍⲿÖжÏ0
  171. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;//ÇÀÕ¼ÓÅÏȼ¶
  172. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;//×ÓÓÅÏȼ¶
  173. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//ʹÄÜÍⲿÖжÏͨµÀ
  174. NVIC_Init(&NVIC_InitStructure);//ÅäÖÃ
  175. EXTI_ClearITPendingBit(EXTI_Line4); //Çå³ýLINEÉϵÄÖжϱê־λ
  176. }
  177. void Exti_Enable(u8 Exti_Num)
  178. {
  179. EXTI_InitTypeDef EXTI_InitStructure;
  180. /* ÅäÖÃEXTI_Line */
  181. if(Exti_Num == 0) EXTI_InitStructure.EXTI_Line = EXTI_Line0;
  182. else if(Exti_Num == 1) EXTI_InitStructure.EXTI_Line = EXTI_Line1;
  183. else if(Exti_Num == 2) EXTI_InitStructure.EXTI_Line = EXTI_Line2;
  184. else if(Exti_Num == 3) EXTI_InitStructure.EXTI_Line = EXTI_Line3;
  185. else if(Exti_Num == 4) EXTI_InitStructure.EXTI_Line = EXTI_Line4;
  186. else if(Exti_Num == 5) EXTI_InitStructure.EXTI_Line = EXTI_Line5;
  187. else if(Exti_Num == 10) EXTI_InitStructure.EXTI_Line = EXTI_Line10;
  188. else return;
  189. EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//ÖжÏʼþ
  190. EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //ÉÏÉýÑØ´¥·¢
  191. EXTI_InitStructure.EXTI_LineCmd = ENABLE;//ÖжÏÏßʹÄÜ
  192. EXTI_Init(&EXTI_InitStructure);//ÅäÖÃ
  193. }
  194. void Exti_Disable(u8 Exti_Num)
  195. {
  196. EXTI_InitTypeDef EXTI_InitStructure;
  197. /* ÅäÖÃEXTI_Line */
  198. if(Exti_Num == 0) EXTI_InitStructure.EXTI_Line = EXTI_Line0;
  199. else if(Exti_Num == 1) EXTI_InitStructure.EXTI_Line = EXTI_Line1;
  200. else if(Exti_Num == 2) EXTI_InitStructure.EXTI_Line = EXTI_Line2;
  201. else if(Exti_Num == 3) EXTI_InitStructure.EXTI_Line = EXTI_Line3;
  202. else if(Exti_Num == 4) EXTI_InitStructure.EXTI_Line = EXTI_Line4;
  203. else if(Exti_Num == 10) EXTI_InitStructure.EXTI_Line = EXTI_Line10;
  204. else return;
  205. EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//ÖжÏʼþ
  206. EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //ÉÏÉýÑØ´¥·¢
  207. EXTI_InitStructure.EXTI_LineCmd = DISABLE;//ÖжÏÏßʹÄÜ
  208. EXTI_Init(&EXTI_InitStructure);//ÅäÖÃ
  209. }
  210. /**----------------------------------------------------------------------------
  211. * @FunctionName : Exti10_Init()
  212. * @Description : ÍⲿÖжÏ10
  213. * @Data : 2016/7/23
  214. * @Explain : ÓÃÓÚ¶ÌÐŽÓÊÕPF10
  215. ------------------------------------------------------------------------------*/
  216. void Exti10_Init(void)
  217. {
  218. NVIC_InitTypeDef NVIC_InitStructure;
  219. EXTI_InitTypeDef EXTI_InitStructure;
  220. GPIO_InitTypeDef GPIO_InitStructure;
  221. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//ʹÄÜGPIOA,GPIOEʱÖÓ
  222. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  223. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//ÆÕͨÊäÈëģʽ
  224. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
  225. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ­
  226. GPIO_Init(GPIOF, &GPIO_InitStructure);//³õʼ»¯GPIOE0,2
  227. RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//ʹÄÜSYSCFGʱÖÓ
  228. SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOF, EXTI_PinSource10);//PE0 Á¬½Óµ½ÖжÏÏß0
  229. /* ÅäÖÃEXTI_Line0 */
  230. EXTI_InitStructure.EXTI_Line = EXTI_Line10;
  231. EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//ÖжÏʼþ
  232. EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;//ÉÏÉýÑØ´¥·¢
  233. EXTI_InitStructure.EXTI_LineCmd = ENABLE;//ÖжÏÏßʹÄÜ
  234. EXTI_Init(&EXTI_InitStructure);//ÅäÖÃ
  235. NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;//ÍⲿÖжÏ0
  236. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;//ÇÀÕ¼ÓÅÏȼ¶
  237. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;//×ÓÓÅÏȼ¶
  238. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//ʹÄÜÍⲿÖжÏͨµÀ
  239. NVIC_Init(&NVIC_InitStructure);//ÅäÖÃ
  240. EXTI_ClearITPendingBit(EXTI_Line10); //Çå³ýLINE0ÉϵÄÖжϱê־λ
  241. }
  242. /*******************************(C) COPYRIGHT 2016 Wind£¨Ð»ÓñÉ죩*********************************/