完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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,进一步会运行中断服务函数,属于软件级别的;而产生事件目的就是传输一个脉冲信号给其他外设使用,属于电路级的传输,属于硬件级的。
1) HAL_NVIC_SetPriority:该函数负责 EXTI 中断/事件线选择,可选 EXTI0 至 EXTI25,配置优先级。 2) HAL_NVIC_EnableIRQ:该函数负责控制使能中断。
#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); } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1874 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1658 浏览 1 评论
1143 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
759 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1720 浏览 2 评论
1963浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
789浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
611浏览 3评论
628浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
590浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-11 15:33 , Processed in 0.910100 second(s), Total 43, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号