外部中断实验
1.IO口外部中断向量表中只分配了7个中断向量。也就是智能使用7个中断服务函数。
2.中断服务函数列表:
EXTI0_IRQHandler
EXTI1_IRQHander
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
EXTI9_5_IRQHandler
EXTI15_10_IRQHandler
3.外部中断的一般配置步骤:
//ÍⲿÖжÏ0·þÎñ³ÌÐò void exti0_irqhandler(void) { delay_ms(10); //Ïû¶¶ if(wk_up==1) { beep=!beep; //·äÃùÆ÷·×ª } exti_clearitpendingbit(exti_line0); //Çå³ýline0ÉϵÄÖжϱê־λ } //ÍⲿÖжÏ2·þÎñ³ÌÐò void exti2_irqhandler(void) { delay_ms(10); //Ïû¶¶ if(key2==0) { led0=!led0; } exti_clearitpendingbit(exti_line2);//Çå³ýline2ÉϵÄÖжϱê־λ } //ÍⲿÖжÏ3·þÎñ³ÌÐò void exti3_irqhandler(void) { delay_ms(10); //Ïû¶¶ if(key1==0) { led1=!led1; } exti_clearitpendingbit(exti_line3); //Çå³ýline3ÉϵÄÖжϱê־λ } //ÍⲿÖжÏ4·þÎñ³ÌÐò void exti4_irqhandler(void) { delay_ms(10); //Ïû¶¶ if(key0==0) { led0=!led0; led1=!led1; } exti_clearitpendingbit(exti_line4);//Çå³ýline4ÉϵÄÖжϱê־λ } //ÍⲿÖжϳõʼ»¯³ÌÐò //³õʼ»¯pe2~4,pa0ΪÖжÏÊäÈë. void extix_init(void) { nvic_inittypedef nvic_initstructure; exti_inittypedef exti_initstructure; key_init(); //°´¼ü¶ÔÓ¦µÄio¿Ú³õʼ»¯ rcc_apb2periphclockcmd(rcc_apb2periph_syscfg, enable);//ʹÄÜsyscfgʱÖÓ syscfg_extilineconfig(exti_portsourcegpioe, exti_pinsource2);//pe2 Á¬½Óµ½ÖжÏÏß2 syscfg_extilineconfig(exti_portsourcegpioe, exti_pinsource3);//pe3 Á¬½Óµ½ÖжÏÏß3 syscfg_extilineconfig(exti_portsourcegpioe, exti_pinsource4);//pe4 Á¬½Óµ½ÖжÏÏß4 syscfg_extilineconfig(exti_portsourcegpioa, exti_pinsource0);//pa0 Á¬½Óµ½ÖжÏÏß0 /* ÅäÖÃexti_line0 */ exti_initstructure.exti_line = exti_line0;//line0 exti_initstructure.exti_mode = exti_mode_interrupt;//ÖжÏʼþ exti_initstructure.exti_trigger = exti_trigger_rising; //ÉÏÉýÑØ´¥·¢ exti_initstructure.exti_linecmd = enable;//ʹÄÜline0 exti_init(&exti_initstructure);//ÅäÖà /* ÅäÖÃexti_line2,3,4 */ exti_initstructure.exti_line = exti_line2 | exti_line3 | 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 = exti0_irqn;//ÍⲿÖжÏ0 nvic_initstructure.nvic_irqchannelpreemptionpriority = 0x00;//ÇÀÕ¼ÓÅÏȼ¶0 nvic_initstructure.nvic_irqchannelsubpriority = 0x02;//×ÓÓÅÏȼ¶2 nvic_initstructure.nvic_irqchannelcmd = enable;//ʹÄÜÍⲿÖжÏͨµÀ nvic_init(&nvic_initstructure);//ÅäÖà nvic_initstructure.nvic_irqchannel = exti2_irqn;//ÍⲿÖжÏ2 nvic_initstructure.nvic_irqchannelpreemptionpriority = 0x03;//ÇÀÕ¼ÓÅÏȼ¶3 nvic_initstructure.nvic_irqchannelsubpriority = 0x02;//×ÓÓÅÏȼ¶2 nvic_initstructure.nvic_irqchannelcmd = enable;//ʹÄÜÍⲿÖжÏͨµÀ nvic_init(&nvic_initstructure);//ÅäÖà nvic_initstructure.nvic_irqchannel = exti3_irqn;//ÍⲿÖжÏ3 nvic_initstructure.nvic_irqchannelpreemptionpriority = 0x02;//ÇÀÕ¼ÓÅÏȼ¶2 nvic_initstructure.nvic_irqchannelsubpriority = 0x02;//×ÓÓÅÏȼ¶2 nvic_initstructure.nvic_irqchannelcmd = enable;//ʹÄÜÍⲿÖжÏͨµÀ nvic_init(&nvic_initstructure);//ÅäÖà nvic_initstructure.nvic_irqchannel = exti4_irqn;//ÍⲿÖжÏ4 nvic_initstructure.nvic_irqchannelpreemptionpriority = 0x01;//ÇÀÕ¼ÓÅÏȼ¶1 nvic_initstructure.nvic_irqchannelsubpriority = 0x02;//×ÓÓÅÏȼ¶2 nvic_initstructure.nvic_irqchannelcmd = enable;//ʹÄÜÍⲿÖжÏͨµÀ nvic_init(&nvic_initstructure);//ÅäÖà // }