EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的20个中断/事件线。每个中断/事件线都有一个边缘检测器,可以实现对输入信号的上升沿或下降沿检测。EXTI可以实现对每个中断/事件线进行单独的配置,可以单独配置为中断或者事件,以及触发事件的属性。
如下图所示,为EXTI的功能框图。EXTI有两个功能,一个是产生中断,一个是产生事件,下面我们将对这两个功能进行讲解。
1.中断产生
如上图所示,红色虚线指示的是一个产生中断的线路,最终流入到NVIC中断控制器内。
编号1是输入线,可以指定到任意的GPIO,也可以是一些外设事件,输入线一般是存在电平变化的信号。
编号2是边缘检测电路,用来检测输入线的信号是否存在指定的电平变化,如上升沿、下降沿或任意两者都可,由EXTI_RTSR 和 EXTI_FTSR两个寄存器设置检测哪些电平变化过程。
编号3是一个或门,输入信号来自边沿检测电路,另外一个信号来自软件中断事件寄存器(EXTI_SWIER)。我们可以从软件或硬件产生中断/事件。
编号4是一个与门,编号3电路产生信号且中断屏蔽寄存器(EXTI_IMR)开启后,出书信号到NVIC中
2.事件产生
编号7是脉冲发生器电路,线路6产生信号1时本线路产生一个脉冲信号,该脉冲信号可以给其他外设电路使用,比如定时器TIM、ADC等等。
产生中断线路目的是把输入信号输入到NVIC,进一步会运行中断服务函数,属于软件级别的;而产生事件目的就是传输一个脉冲信号给其他外设使用,属于电路级的传输,属于硬件级的。
中断事件线
EXTI有20个中断/事件线,每个GPIO都可以被设置成输入线
EXTI初始化
HAL库函数的EXTI初始化非常简单,配置好IO口的模式,然后配置中断源、中断优先级、使能中断
1) HAL_NVIC_SetPriority:该函数负责 EXTI 中断/事件线选择,可选 EXTI0 至 EXTI25,配置优先级。
2) HAL_NVIC_EnableIRQ:该函数负责控制使能中断。
编程要点
1) 初始化用来产生中断的 GPIO;
#define KEY1_INT_GPIO_PORT GPIOA
#define KEY1_INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE();
#define KEY1_INT_GPIO_PIN GPIO_PIN_0
#define KEY1_INT_EXTI_IRQ EXTI0_IRQn
#define KEY1_IRQHandler EXTI0_IRQHandler
2) 初始化 EXTI,配置 NVIC;
/**
* @brief 配置 PA0 为线中断口,并设置中断优先级
* @param 无
* @retval 无
*/
void EXTI_Key_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*开启按键GPIO口的时钟*/
KEY1_INT_GPIO_CLK_ENABLE();
KEY2_INT_GPIO_CLK_ENABLE();
/* 选择按键1的引脚 */
GPIO_InitStructure.Pin = KEY1_INT_GPIO_PIN;
/* 设置引脚为输入模式 */
GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING;
/* 设置引脚不上拉也不下拉 */
GPIO_InitStructure.Pull = GPIO_NOPULL;
/* 使用上面的结构体初始化按键 */
HAL_GPIO_Init(KEY1_INT_GPIO_PORT, &GPIO_InitStructure);
/* 配置 EXTI 中断源 到key1 引脚、配置中断优先级*/
HAL_NVIC_SetPriority(KEY1_INT_EXTI_IRQ, 0, 0);
/* 使能中断 */
HAL_NVIC_EnableIRQ(KEY1_INT_EXTI_IRQ);
}
3) 编写中断服务函数;
void KEY1_IRQHandler(void)
{
//确保是否产生了EXTI Line中断
if(__HAL_GPIO_EXTI_GET_IT(KEY1_INT_GPIO_PIN) != RESET)
{
// LED1 取反
LED1_TOGGLE;
//清除中断标志位
__HAL_GPIO_EXTI_CLEAR_IT(KEY1_INT_GPIO_PIN);
}
}
上一篇:GPIO功能框图--以STM32F429为例
下一篇:STM32基本定时器 HAL库
推荐阅读最新更新时间:2024-11-10 10:59
推荐帖子
- 传说中很神的Wince6怎么这么慢?
- 传说中Wince6做了很多重大改进,效率大幅度提升。但是我最近从wince5转到Wince6之后,发现:在PXA270平台上,直接从wince6的MainStoneIII改来的BSP,速度明显比wince5慢很多。在板子上慢吧,咱先不提了,可能是BSP还没有优化好,是咱的水平太菜。问题是发现在ARM模拟器上运行程序也是奇慢无比,比wince5的模拟器慢很多,这是为什么?实在是百思不得其解啊!各位大侠,有没有遇到这个问题的,给俺解解惑。传说中很神的Wince6怎么这么慢?比较快的,慢的是那
- KKKK111 WindowsCE
- Vista下,下载NK.bin总是中途停止
- 我在WinXP下,用PB、EShell、以及一些TFTP工具,通过Ethernet或USBRNDIS,下载NK.bin到WinCE5设备(MarvellXSCAL),从来没有问题。可是,在windowsVista,我用这些工具,通过Ethernet或USBRNDIS,下载NK.bin到WinCE5设备,总是下到40%或50%左右,传输就终止了。然后PC端报timeout错误。我还用Vista下的TFTP指令,做了相同的操作,也取得了相同的失败结果。NK.bin也就不到19MB。有没
- 鹏晨 嵌入式系统
- wifi网络授时时钟上架
- 通过网络自动或手动获取时间服务器的时间,可以手动调节亮度。散件发货,需要自己焊接,程序以烧好,发货周期有点长淘宝:https://item.taobao.com/item.htm?id=532735289183wifi网络授时时钟上架说明貌似太简陋了。最好有个清单,有个说明。提供源码吗,提供原理图吗?如何操作?有说明书吗?额看了看售价我放弃了{:1_133:} 原件的成本都要30多了wifi模块比较贵:tongue::tongue::tongue:要开
- baomk 淘e淘
- PCap01
- PCap01那里有的买(总代理)?哪家可以申请样片?PCap01
- cjq_enjoy 汽车电子
- 晶体管电路设计(上)(下)
- 本书共分上下二册。上册主要内容有晶体管工作原理,放大电路的性能、设计与应用,射极跟随器的性能与应用电路,小型功率放大电路的设计与应用,功率放大器的设计与制作,共基极电路的性能、设计与应用,视频选择器的设计与制作,共射-共基电路的设计,负反馈放大电路的设计,直流稳定电源的设计与制作,差动放大电路的设计,运算放大电路的设计与制作,下册则共分15章,主要介绍FET、功率MOS、开关电源电路等。本书面向实际需要,理论联系实际,通过具体的实验,通俗易懂地介绍晶体管电路设计的基础知识.铃木雅
- tiankai001 下载中心专版
- 磁性元件老大难?看看下面这些资料,帮你顺利通关~
- 磁性元件经典书籍推荐:《开关电源中磁性元器件》南京航空航天大学自动化学院赵修科主编《开关电源磁性元件理论及设计》周洁敏、赵修科、陶思钰著北京航空航天大学出版社视频教程:开关电源中的磁性元件本系列介绍了磁的基本概念、电路中的磁元件、开关电源中磁性材料的基本参数、开关电源中常见的磁性材料、变压器中的分布参数及线圈、变压器损耗及热设计、高频开关电源磁芯的工作状态、直流滤波电感设计、反激变压器电感设计举例、高频变压器设计口碑好贴好资
- 木犯001号 电源技术