本篇博客重点在于标准库函数的理解与使用,搭建一个框架便于快速开发
目录
EXTI简介
EXTI(Extern Interrupt),外部中断,也可配置事件,又可称事件控制器
EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序
支持的触发方式:上升沿/下降沿/双边沿/软件触发
支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断
中断通道数:16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒
后个主要用于低功耗的停止模式下使用外部中断唤醒
触发响应方式:中断响应/事件响应,中断由CPU响应,事件由外设响应
EXTI配置
使能AFIO的时钟
外部中断需要写事件控制寄存器(AFIO_EVCR),外部中断配置寄存器(AFIO_EXTICRX)
对寄存器AFIO_EVCR,AFIO_MAPR和AFIO_EXTICRX进行读写操作前,应当首先打开AFIO 的时钟。
事件控制寄存器(AFIO_EVCR)
故要开启AFIO的时钟,而AFIO在APB2外设总线上
再由RCC时钟树,需要使能APB2外设的AFIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
配置GPIO端口为外部中断
有关GPIO的详细配置请阅读这篇博客,这里不再赘述
外部中断的GPIO_Mode为输入模式,设置为输入信号的默认电平对应的模式,更多见STM32F10xxx参考手册8.1.11 外设的GPIO配置
输入电平默认为高电平,上拉输入;输入电平默认为低电平,下拉输入。输入电平不确定选浮空输入
相同的Pin不能同时触发中断,比如GPIOX0只能有一个可以触发中断,GPIOA0映射到中断了,GPIOB0就不可以了
GPIO_PortSourceGPIOX ,X为A,B,C...
GPIO_PinSourcexX, X为0,1,2 ...
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource12);
GPIO_EXTILineConfig函数将指定端口配置到中断通道
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//输出速度,输入无用