28、外部中断实验:(开发指南第十章、中文手册第九章中断和事件)

28、外部中断实验:(开发指南第十章、中文手册第九章中断和事件)

1、STM32的每个IO口都可以作为外部中断输入。
2、F1支持19个外部中断/事件请求:
线0-15 对应外部IO的输入中断 GPIOx0->EXTI0(x=A、B…G)就相当于线0上的中断 7组IO*每组IO16个=112个IO口
线16:连接PVD输出
线17:连接RCT闹钟事件
线18:连接USB唤醒
每个中断线都可以独立配置触发方式(上升沿,下降沿…)
注意:每一个时间中断线上只能有一个IO口映射,比如PA0和PB0不能同时映射到EXTI0;查看(AFIO_EXTICRx)寄存器就可以看到x取定时每一个EXTI的[3:0]只能设置某个特定的IO口

服务函数 EXTIx_IQRHandler 对应线x中断
…9_5_IQR… 对应线9-5中断 这里意味着线5-9会进入同一个中断服务函数
…15_10_IQR… 对应线15-10中断

外部中断的一般配置步骤:
1.初始化IO口为输入GPIO_Init(); //假如你要使用按键作为外部中断,而你也写过按键初始化函数就可以直接使用
2.开启IO口复用时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); // 使用到有关于AFIO寄存器的时钟的时候要开启AFIO时钟
跟 AFIO 相关的寄存器有:
  1、 事件控制寄存器(AFIO_EVCR)
  2、 复用重映射和调试I/O 配置寄存器(AFIO_MAPR)
  3、 外部中断配置寄存器1(AFIO_EXTICR1)
  4、 外部中断配置寄存器2(AFIO_EXTICR2)
  5、 外部中断配置寄存器3(AFIO_EXTICR3)
  6、 外部中断配置寄存器4(AFIO_EXTICR4)
3.设置IO口与中断线的映射关系:GPIO_EXTILineConfig();
4.初始化线上中断,设置触发条件:EXTI_Init(&EXTI_InitStruc);
5.配置中断分组,使能中断:NVIC_Init(&NVIC_InitStruc);
6.编写中断服务函数:void EXTIx_IRQHandler();
7.清除中断标志位:写在对应的中断服务函数里面EXTI_ClearITPendingBit();

猜你喜欢

转载自blog.csdn.net/weixin_42877670/article/details/82219182