只需要把这个外部中断从GPIO到NVIC这一路中出现的外设模块配置好
具体步骤:
1、配置RCC,把涉及的外设时钟都打开
2、配置GPIO,选择端口为输入模式
3、配置AFIO
4、配置EXTI,选择边沿触发方式(比如上升沿、下降沿或者双边沿0,选择触发响应的方式(中断响应或事件响应)
5、配置NVIC,给中断一个合适的优先级,通过NVIC,外部中断信号就能进入CPU了,CPU接收到中断信号,才能跳转到中断函数里执行中断程序
一、RCC开启时钟
从这三个函数中选择对应的函数开启外设时钟:RCC_APB2PeriphClockCmd()或者RCC_APB1PeriphClockCmd()或者RCC_AHBPeriphClockCmd(),由于GPIO和AFIO是APB2总线上的外设,所以:
EXTI和NVIC(内核的外设,RCC管的是内核外的外设)这俩个外设的时钟是一直都打开的,不需要我们再开启时钟了
二、配置GPIO
1.定义GPIO_InitTypeDef结构体
2.给结构体成员赋值
3.用GPIO_Init()函数初始化GPIO外设
三、配置AFIO
用GPIO_EXITLineConfig()函数 配置AFIO外部中断引脚选择
四、配置EXTI
先了解EXTI的库函数:
EXTI_Init() 配置EXTI外设
EXTI_DeInit() 清除EXTI的配置,恢复成上电默认状态
EXTI_StructInit() 把参数传递的结构体变量赋一个默认值
EXTI_GenerateSWInterrupt() 软件触发外部中断,调用这个函数,参数给一个指定的中断线,就能软件触发一次这个外部中断
在主程序中查看或清除标志位:
EXTI_GetFlagStatus() 可以获取指定的标志位是否被置1
EXTI_ClearFlag() 对置1的标志位进行清除
在中断函数中查看或清除标志位:
EXTI_GetITStatus() 可以获取指定的标志位是否被置1
EXTI_ClearITPendingBit() 对置1的标志位进行清除
本质上,这四个函数都是对状态寄存器的读写
1.定义EXTI_InitTypeDef结构体
2.给结构体成员赋值
3.用EXTI_Init()函数初始化EXTI外设
五、配置NVIC
NVIC_PriorityGroupConfig() 用来中断分组的
1.中断分组
2.定义EXTI_InitTypeDef结构体
3.给结构体成员赋值
4.用EXTI_Init()函数初始化EXTI外设
在STM32中,每个中断函数的名字都是固定的,每个中断通道对应一个中断函数,中断函数不需要调用,它是自动执行的
六、定义中断函数
完整程序:
链接:https://pan.baidu.com/s/1FJXSysMpxgpV1st4JlMm7Q?pwd=wzyv
提取码:wzyv