外部中断0(含知识点)

Posted 徐景祥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了外部中断0(含知识点)相关的知识,希望对你有一定的参考价值。

  1 #include "stm32f10x.h"   // 相当于51单片机中的  #include <reg51.h>
  2 #include "stm32f10x_gpio.h"
  3 #include "stm32f10x_exti.h"
  4 #include "misc.h"
  5 
  6 /*外部中断配置*/
  7 
  8 
  9 int main(void)
 10 {
 11     /***************************************************************/
 12     
 13         //EXTI_InitTypeDef定义于stm32f10x_exti.h
 14 
 15 
 16     /*GPIO配置*/
 17     //step1:使能
 18     GPIO_InitTypeDef a;
 19     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
 20     //结构体
 21     a.GPIO_Speed=GPIO_Speed_50MHz;
 22     a.GPIO_Pin=GPIO_Pin_5;
 23     //推挽输出
 24     a.GPIO_Mode=GPIO_Mode_Out_PP;
 25     //调用GPIO初始化函数
 26     GPIO_Init(GPIOB,&a);
 27     /***************************************************************/
 28     
 29     
 30     /*
 31     *外部中断配置
 32     *总结:
 33     *1、定义一个结构体
 34     *2、四个内容(选择路线、线路模式、触发方式、使能)
 35     *3、调用一个函数
 36     */
 37 EXTI_InitTypeDef c;
 38     /*
 39     *选择了待使能或失能的外部路线(0——18可选)
 40     */
 41 c.EXTI_Line=EXTI_Line0;//外部路线0
 42 /*
 43     *设置了被使能线路的模式
 44     *设置为事件:EXTI_Mode_Event
 45     *设置为中断:EXTI_Mode_Interrupt
 46     */
 47 c.EXTI_Mode=EXTI_Mode_Interrupt;//中断模式
 48 /*
 49     设置了被使能线路的触发边沿
 50     EXTI_Trigger_Falling下降沿为中断请求
 51     EXTI_Trigger_Rising 上升沿为中断请求
 52     EXTI_Trigger_Rising_Falling上升沿和下降沿为中断请求
 53 */
 54 c.EXTI_Trigger=EXTI_Trigger_Rising;//上升沿为中断请求
 55     /*
 56     *用来定义选中线路的新状态
 57     *它可以被设为ENABLE或者DISABLE
 58     */
 59 c.EXTI_LineCmd=ENABLE;//使能
 60     /*外部中断初始化函数
 61     *功能:根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器。
 62     *指向结构体EXTI_InitTypeDef的指针
 63     */
 64     EXTI_Init(&c);//指向结构体EXTI_InitTypeDef的指针a
 65 /***************************************************************************/
 66 /*NVIC嵌套向量中断控制器*/
 67 /*
 68 *1
 69 *优先级分组:先占优先级和重优先级
 70 *输入参数:
 71 *NVIC_PriorityGroup_0
 72 *NVIC_PriorityGroup_1
 73 *NVIC_PriorityGroup_2
 74 *NVIC_PriorityGroup_3
 75 *NVIC_PriorityGroup_4
 76 */
 77 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
 78     /*
 79 *2、NVIC初始化结构体
 80 */
 81 NVIC_InitTypeDef b;
 82 /*
 83 *中断源
 84 *用于使能或者失能指定的IRQ通道
 85 *参数:
 86 *(详细参数请看最后截图一..............)
 87 */
 88 b.NVIC_IRQChannel = EXTI0_IRQn;//EXTI0_IRQn外部中断线0中断
 89 //抢占优先级
 90 /*
 91 *该参数设置成员NVIC_IRQChannel中的抢占优先级
 92 *(详细参数请看最后截图二..............)
 93 */
 94 b.NVIC_IRQChannelPreemptionPriority = 1;//0 1 2 3 4 
 95 //子优先级
 96 /*
 97 *该参数设置成员NVIC_IRQChannel中的从占优先级
 98 *(详细参数请看最后截图二..............)
 99 */
100 b.NVIC_IRQChannelSubPriority = 1;//0 1 2 3 4 
101 //使能
102 /*
103 *指定了在成员NVIC_IRQChannel中定义的IRQ通道被使能还是失能
104 *参数:ENABLE或者DISABLE
105 */
106 b.NVIC_IRQChannelCmd = ENABLE;
107 
108 /*
109 *3、NVIC初始化函数
110 *功能:根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器。
111 */
112 NVIC_Init(&b);
113 /**********************************************************************/
114 
115 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0);//选择GPIO管脚用作外部中断线路
116 
117 }
118 void EXTI0_IRQHandler(void)
119 {
120     //确保是否产生EXTI line中断
121     if(EXTI_GetITStatus(EXTI_Line0)!=RESET) // 检查指定的EXTI线路触发请求发生与否
122     {
123         if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==0)//
124         {
125         GPIO_SetBits(GPIOB,GPIO_Pin_5);
126         }
127         else
128         {    
129         GPIO_ResetBits(GPIOB,GPIO_Pin_5);
130         }
131         EXTI_ClearITPendingBit(EXTI_Line0);
132     }
133     
134 }

 

 

以上是关于外部中断0(含知识点)的主要内容,如果未能解决你的问题,请参考以下文章

51单片机怎么设置外部中断?

STM32Cubemx——外部中断

GPIO外部中断

stm32中外部中断进入中断以后,把中断线挂起位清0以后,在检测还有意义吗,不是已经clear了吗

STM32入门笔记——外部中断EXTI

STM32入门笔记——外部中断EXTI