中断作为stm32中必不可少的一个功能,其重要性是不言而喻的因此把中断学习好是根本。
所以今天就来好好啃一下中断配置的知识,俗话说:磨刀不误砍柴工。问题是什么呢?项目中我用到了一个触摸键盘TTP229,结果在测试键盘时,不能够输入密码?最终,调试出bug就是由于中断优先级的影响。
本项目使用到的是STM32F030C8型号的MCU,我们可以从官方下载到的标准库文件中的启动汇编文件中,查看到本型号单片机的外部中断向量表。(如下图所示)
首先,我们了解一下NVIC是什么,在core_cm0.h文件中的标准库中的NVIC结构体。
其中,我们一般只用到ISER、ICER、IP这3个寄存器。ISER用于使能中断,ICER用来清除中断,IP用来设置中断优先级。
其次,我们了解一下中断优先级,中断优先级寄存器NVIC_IPRx,本寄存器宽度为8位,原则上每个外部中断可配置的优先级为0~255,实际上精简了,只用到了它的高4位。这4位,又被分成了抢占优先级和响应优先级两组,然后,中断优先级有分为以下几种情况:
1、抢占优先级不同,会涉及到中断嵌套,抢占优先级高的会优先抢占优先级低的,优先得到执行。(注意:优先级数字越小,优先级越高)
2、抢占优先级相同,不涉及到中断嵌套,响应优先级不同,响应优先级高的先响应。(例如:两个中断同时响应,这里就会先执行响应优先级高的那个中断)(注意:优先级数字越小,优先级越高)
3、抢占优先级和响应优先级都相同,则比较它们的硬件中断编号,中断编号越小,优先级越高。(硬件中断编号从中断向量表当中查看)
中断优先级分组,因为中断优先级只使用了高4位,所以,中断优先级的分组分别有以下几种情况:
最后,总结一下中断编程的三步曲:
第一步:使能外设某个中断,具体由对应的中断使能位控制。
(例如:我们使用到GPIO之前必须开启GPIO端口的时钟,用到EXTI必须开启AFIO时钟)
第二步:初始化NVIC_InitTypeDef结构体,配置中断优先级分组,设置抢占优先级和响应优先级,使能中断请求。
库函数:
NVIC_IRQChannel()设置不同的中断源,在IRQn_Type IRQn结构体寻找自己对应的中断源。
NVIC_IRQChannelPreemptionPriority()设置抢占优先级
NVIC_IRQChannelCmd() 中断使能或者取消使能
第三步:编写中断服务函数,在stm32f0xx_it.c文件中,都有一个根据中断向量表,实现的一个空的中断服务函数,需要我们自己重新编写。
上一篇:stm32单片机直流电机驱动原理分析
下一篇:stm32电机控制之控制两路直流电机
推荐阅读






设计资源 培训 开发板 精华推荐
最新视频课程更多
- 有奖直播:是德科技100G/400G 光通信测试解决方案
- 月度原创精选评选2018年4月(总第3期)
- 拆惊喜抽奖:泰克全新3系列MDO和4系列MSO示波器来啦
- 将想法变成现实,Maxim MAX32630FTHR创意设计大赛,重磅开启!
- 【看电源研讨会,瓜分3000元红包】 如何正确完成模块化DC-DC系统设计
- 多款TI Launch板免费测评试用,赶紧来看看吧!
- 考眼力:高速数字设计的秘籍 藏在哪里? 走近Keysight PATHWAVE,提升工作效率
- 【技术直播】 MPS、Nexperia、泰克专家齐聚,畅谈新能源汽车动力设计注意要点
- 答题赢好礼|机器故障防患未然 大机器健康状态监测为您助力
- 测评汇总:雅特力AT-START-F435和AT-START-F437
- 测评汇总:SparkFun MGM240P Thing Plus Matter 开发板
- 某鱼买了一个小热成像传感器
- 小功率极性反转电源转换芯片请大家帮忙推荐几个
- 技术帖来啦——飞凌嵌入式RK3588开发板推理模型转换及测试
- MQ-Quad 全志H616 主线内核编译调试记录(u-boot、kernel、buildroot)
- 免费申请: 瑞萨电子低功耗Cortex-M33 RA4E1评估板
- 太阳电池物理基础
- 【极海APM32F407 Tiny Board】1.开箱
- 【极海APM32F407 Tiny Board】+2.浅跑个HS HID例程