完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
首先介绍什么是中断,指CPU对外部事件发出的中断请求进行响应和处理,完成后返回程序断点处继续之前的工作。打一个很简单的比方,你在家看电视时突然门铃响了,这就是一个中断请求,然后你就去开门,结果发现是快递来了,你签收完快递回到家继续看电视,这就是一整个中断过程。
再来说说中断的抢占优先级和响应优先级,当你看电视时家里的电话和门铃同时响了,也就是同时有两个中断发生,那么CPU要响应先那个中断就要看中断优先级,如果中断优先级相同时再看响应优先级。STM32F4中需要设置中断优先级分组,如果不设置就是默认抢占优先级和响应优先级都占两位,也就是从零到三,值越小优先级越高。 整个中断过程可以分为三步: 1.中断检测 2.中断响应 3.中断挂起 在STM32F4中以按键外部中断为例,需要以下几个步骤: 1.定义NVIC、EXTI结构体 2.使能系统时钟 3.设置IO口和中断的映射关系 4.配置外部中断EXTI控制寄存器 5.配置NVIC控制寄存器 6.中断服务函数 关于NVIC和EXTI寄存器的区别:NVIC是嵌套向量中断控制器,而EXTI为外部中断控制器。NVIC相当于控制中断的大开关,而EXTI只是系统中断里面外部中断的小开关。 为什么要使能系统时钟:STM32F4有两条总线:AHP即advanced high performance bus 高级高性能总线和APB即advanced periphoral bus高级外设总线。如图 在每次芯片复位后,所有外设时钟都被关闭了,SRAM和FLASH除外,所以在使用外设时需要使能时钟,这么做的目的是为了降低芯片的功耗,开启时钟相当于提供电源。在STM32F4中文参考手册2.2节存储器组织结构中可以看到外设挂载到那根总线上。 代码如下: `#include “EXTI.h” void EXTI2_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line2)!=RESET) { GPIO_WriteBit(GPIOE,GPIO_Pin_13,!GPIO_ReadOutputDataBit(GPIOE,GPIO_Pin_13)); } EXTI_ClearITPendingBit(EXTI_Line2); } void InitExit(void) { NVIC_InitTypeDef NVIC_InitStruct; EXTI_InitTypeDef EXTI_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource2); EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt; EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling; EXTI_InitStruct.EXTI_Line=EXTI_Line2; EXTI_InitStruct.EXTI_LineCmd=ENABLE; EXTI_Init(&EXTI_InitStruct); NVIC_InitStruct.NVIC_IRQChannel=EXTI2_IRQn; NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2; NVIC_InitStruct.NVIC_IRQChannelSubPriority=1; NVIC_Init(&NVIC_InitStruct); } ` 从keil软件复制过来注释全乱了,所以删掉了注释,那么两个结构体的成员变量怎么设置如图: 需要注意的就是怎么选择中断线,在哪个GPIO管脚上就选择那根线,这是内部结构决定的,如图是用选择器来进行选择的。 还有一点必须注意中断服务函数名称不能写错,都为EXTI2(此处为中断线编号)_IRQHandler如果写错既不会报错也无法进入中断服务函数。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1936浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
729浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
569浏览 3评论
594浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
552浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 18:58 , Processed in 0.804079 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号