/_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
- /*******************************(C) COPYRIGHT 2016 Wind£¨Ð»ÓñÉ죩*********************************/
- /**============================================================================
- * @FileName : Drive_Exti.c
- * @Description : None
- * @Date : 2016/7/10
- * @By : Wind£¨Ð»ÓñÉ죩
- * @Email : 1659567673@ qq.com
- * @Platform : Keil uVision5 v5.15 (STM32F407ZG)
- * @Explain : None
- *=============================================================================*/
- /* Í·Îļþ°üº¬ ----------------------------------------------------------------*/
- #include "Drive_Exti.h"
- /* ˽Óк궨Òå ----------------------------------------------------------------*/
- /* ˽ÓУ¨¾²Ì¬£©º¯ÊýÉùÃ÷ ------------------------------------------------------*/
- /* È«¾Ö±äÁ¿¶¨Òå --------------------------------------------------------------*/
-
- /* È«¾Öº¯Êý±àд --------------------------------------------------------------*/
- /**----------------------------------------------------------------------------
- * @FunctionName : Exti0_Init()
- * @Description : None
- * @Data : 2016/7/11
- * @Explain : None
- ------------------------------------------------------------------------------*/
- void Exti0_Init(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- EXTI_InitTypeDef EXTI_InitStructure;
-
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//ʹÄÜGPIOA,GPIOEʱÖÓ
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//ÆÕͨÊäÈëģʽ
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ
- GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯GPIOE0,2
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//ʹÄÜSYSCFGʱÖÓ
-
- SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);//PE0 Á¬½Óµ½ÖжÏÏß0
-
- /* ÅäÖÃEXTI_Line0 */
- EXTI_InitStructure.EXTI_Line = EXTI_Line0;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//ÖжÏʼþ
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //ϽµÑØ´¥·¢
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;//ÖжÏÏßʹÄÜ
- EXTI_Init(&EXTI_InitStructure);//ÅäÖÃ
-
- NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//ÍⲿÖжÏ0
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;//ÇÀÕ¼ÓÅÏȼ¶0
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;//×ÓÓÅÏȼ¶2
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//ʹÄÜÍⲿÖжÏͨµÀ
-
- NVIC_Init(&NVIC_InitStructure);//ÅäÖÃ
- EXTI_ClearITPendingBit(EXTI_Line0); //Çå³ýLINE0ÉϵÄÖжϱê־λ
-
- }
- /**----------------------------------------------------------------------------
- * @FunctionName : Exti1_Init()
- * @Description : None
- * @Data : 2016/7/11
- * @Explain : None
- ------------------------------------------------------------------------------*/
- void Exti1_Init(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- EXTI_InitTypeDef EXTI_InitStructure;
-
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//ʹÄÜGPIOA,GPIOEʱÖÓ
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//ÆÕͨÊäÈëģʽ
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ
- GPIO_Init(GPIOC, &GPIO_InitStructure);//³õʼ»¯GPIOE0,2
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//ʹÄÜSYSCFGʱÖÓ
-
- SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource1);//PE0 Á¬½Óµ½ÖжÏÏß0
-
- /* ÅäÖÃEXTI_Line0 */
- EXTI_InitStructure.EXTI_Line = EXTI_Line1;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//ÖжÏʼþ
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //ϽµÑØ´¥·¢
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;//ÖжÏÏßʹÄÜ
- EXTI_Init(&EXTI_InitStructure);//ÅäÖÃ
-
- NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;//ÍⲿÖжÏ0
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;//ÇÀÕ¼ÓÅÏȼ¶0
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;//×ÓÓÅÏȼ¶2
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//ʹÄÜÍⲿÖжÏͨµÀ
-
- NVIC_Init(&NVIC_InitStructure);//ÅäÖÃ
- EXTI_ClearITPendingBit(EXTI_Line1); //Çå³ýLINE0ÉϵÄÖжϱê־λ
-
- }
- /**----------------------------------------------------------------------------
- * @FunctionName : Exti2_Init()
- * @Description : None
- * @Data : 2016/7/11
- * @Explain : None
- ------------------------------------------------------------------------------*/
- void Exti2_Init(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- EXTI_InitTypeDef EXTI_InitStructure;
-
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//ʹÄÜGPIOA,GPIOEʱÖÓ
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//ÆÕͨÊäÈëģʽ
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ
- GPIO_Init(GPIOC, &GPIO_InitStructure);//³õʼ»¯GPIOE0,2
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//ʹÄÜSYSCFGʱÖÓ
-
- SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource2);//PE0 Á¬½Óµ½ÖжÏÏß0
-
- /* ÅäÖÃEXTI_Line0 */
- EXTI_InitStructure.EXTI_Line = EXTI_Line2;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//ÖжÏʼþ
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //ϽµÑØ´¥·¢
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;//ÖжÏÏßʹÄÜ
- EXTI_Init(&EXTI_InitStructure);//ÅäÖÃ
-
- NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;//ÍⲿÖжÏ0
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;//ÇÀÕ¼ÓÅÏȼ¶0
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;//×ÓÓÅÏȼ¶2
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//ʹÄÜÍⲿÖжÏͨµÀ
-
- NVIC_Init(&NVIC_InitStructure);//ÅäÖÃ
- EXTI_ClearITPendingBit(EXTI_Line2); //Çå³ýLINE0ÉϵÄÖжϱê־λ
-
- }
- /**----------------------------------------------------------------------------
- * @FunctionName : Exti3_Init()
- * @Description : None
- * @Data : 2016/7/11
- * @Explain : None
- ------------------------------------------------------------------------------*/
- void Exti3_Init(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- EXTI_InitTypeDef EXTI_InitStructure;
-
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//ʹÄÜGPIOA,GPIOEʱÖÓ
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//ÆÕͨÊäÈëģʽ
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ
- GPIO_Init(GPIOC, &GPIO_InitStructure);//³õʼ»¯GPIOE0,2
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//ʹÄÜSYSCFGʱÖÓ
-
- SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource3);//PE0 Á¬½Óµ½ÖжÏÏß0
-
- /* ÅäÖÃEXTI_Line0 */
- EXTI_InitStructure.EXTI_Line = EXTI_Line3;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//ÖжÏʼþ
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //ϽµÑØ´¥·¢
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;//ÖжÏÏßʹÄÜ
- EXTI_Init(&EXTI_InitStructure);//ÅäÖÃ
-
- NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;//ÍⲿÖжÏ0
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;//ÇÀÕ¼ÓÅÏȼ¶0
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;//×ÓÓÅÏȼ¶2
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//ʹÄÜÍⲿÖжÏͨµÀ
-
- NVIC_Init(&NVIC_InitStructure);//ÅäÖÃ
- EXTI_ClearITPendingBit(EXTI_Line3); //Çå³ýLINE0ÉϵÄÖжϱê־λ
-
- }
- /**----------------------------------------------------------------------------
- * @FunctionName : Exti4_Init()
- * @Description : ²âƵ
- * @Data : 2016/7/11
- * @Explain : None
- ------------------------------------------------------------------------------*/
- void Exti4_Init(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- EXTI_InitTypeDef EXTI_InitStructure;
-
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);//ʹÄÜGPIOʱÖÓ
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//ÆÕͨÊäÈëģʽ
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ
- GPIO_Init(GPIOE, &GPIO_InitStructure);//³õʼ»¯GPIO
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//ʹÄÜSYSCFGʱÖÓ
-
- SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource4);// Á¬½Óµ½ÖжÏÏß
-
- /* ÅäÖÃEXTI_Line */
- EXTI_InitStructure.EXTI_Line = EXTI_Line4;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//ÖжÏʼþ
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //ϽµÑØ´¥·¢
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;//ÖжÏÏßʹÄÜ
- EXTI_Init(&EXTI_InitStructure);//ÅäÖÃ
-
- NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;//ÍⲿÖжÏ0
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;//ÇÀÕ¼ÓÅÏȼ¶
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;//×ÓÓÅÏȼ¶
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//ʹÄÜÍⲿÖжÏͨµÀ
-
- NVIC_Init(&NVIC_InitStructure);//ÅäÖÃ
- EXTI_ClearITPendingBit(EXTI_Line4); //Çå³ýLINEÉϵÄÖжϱê־λ
-
- }
- void Exti_Enable(u8 Exti_Num)
- {
- EXTI_InitTypeDef EXTI_InitStructure;
- /* ÅäÖÃEXTI_Line */
- if(Exti_Num == 0) EXTI_InitStructure.EXTI_Line = EXTI_Line0;
- else if(Exti_Num == 1) EXTI_InitStructure.EXTI_Line = EXTI_Line1;
- else if(Exti_Num == 2) EXTI_InitStructure.EXTI_Line = EXTI_Line2;
- else if(Exti_Num == 3) EXTI_InitStructure.EXTI_Line = EXTI_Line3;
- else if(Exti_Num == 4) EXTI_InitStructure.EXTI_Line = EXTI_Line4;
- else if(Exti_Num == 5) EXTI_InitStructure.EXTI_Line = EXTI_Line5;
- else if(Exti_Num == 10) EXTI_InitStructure.EXTI_Line = EXTI_Line10;
- else return;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//ÖжÏʼþ
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //ÉÏÉýÑØ´¥·¢
-
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;//ÖжÏÏßʹÄÜ
- EXTI_Init(&EXTI_InitStructure);//ÅäÖÃ
-
- }
- void Exti_Disable(u8 Exti_Num)
- {
- EXTI_InitTypeDef EXTI_InitStructure;
- /* ÅäÖÃEXTI_Line */
- if(Exti_Num == 0) EXTI_InitStructure.EXTI_Line = EXTI_Line0;
- else if(Exti_Num == 1) EXTI_InitStructure.EXTI_Line = EXTI_Line1;
- else if(Exti_Num == 2) EXTI_InitStructure.EXTI_Line = EXTI_Line2;
- else if(Exti_Num == 3) EXTI_InitStructure.EXTI_Line = EXTI_Line3;
- else if(Exti_Num == 4) EXTI_InitStructure.EXTI_Line = EXTI_Line4;
- else if(Exti_Num == 10) EXTI_InitStructure.EXTI_Line = EXTI_Line10;
- else return;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//ÖжÏʼþ
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //ÉÏÉýÑØ´¥·¢
-
- EXTI_InitStructure.EXTI_LineCmd = DISABLE;//ÖжÏÏßʹÄÜ
- EXTI_Init(&EXTI_InitStructure);//ÅäÖÃ
- }
- /**----------------------------------------------------------------------------
- * @FunctionName : Exti10_Init()
- * @Description : ÍⲿÖжÏ10
- * @Data : 2016/7/23
- * @Explain : ÓÃÓÚ¶ÌÐŽÓÊÕPF10
- ------------------------------------------------------------------------------*/
- void Exti10_Init(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- EXTI_InitTypeDef EXTI_InitStructure;
-
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//ʹÄÜGPIOA,GPIOEʱÖÓ
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//ÆÕͨÊäÈëģʽ
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ
- GPIO_Init(GPIOF, &GPIO_InitStructure);//³õʼ»¯GPIOE0,2
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//ʹÄÜSYSCFGʱÖÓ
-
- SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOF, EXTI_PinSource10);//PE0 Á¬½Óµ½ÖжÏÏß0
-
- /* ÅäÖÃEXTI_Line0 */
- EXTI_InitStructure.EXTI_Line = EXTI_Line10;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//ÖжÏʼþ
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;//ÉÏÉýÑØ´¥·¢
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;//ÖжÏÏßʹÄÜ
- EXTI_Init(&EXTI_InitStructure);//ÅäÖÃ
-
- NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;//ÍⲿÖжÏ0
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;//ÇÀÕ¼ÓÅÏȼ¶
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;//×ÓÓÅÏȼ¶
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//ʹÄÜÍⲿÖжÏͨµÀ
-
- NVIC_Init(&NVIC_InitStructure);//ÅäÖÃ
- EXTI_ClearITPendingBit(EXTI_Line10); //Çå³ýLINE0ÉϵÄÖжϱê־λ
-
- }
- /*******************************(C) COPYRIGHT 2016 Wind£¨Ð»ÓñÉ죩*********************************/