对于stm32的中断首先需要用到的文件是startup_stm32f10x_hd.s和stm32f10x_it.c这两个文件,其中startup_stm32f10x_hd.s是启动文件,stm32f10x_it.c是中断响应函数。对于外部中断,它的过程是外部的io口监测到电平的变化,触发外部中断,所以它又涉及到3个库文件,stm32f10x_gpio.c、stm32f10x_exti.c和misc.c,misc.c包含中断库,stm32f10x_exti.c是外部的io口中断,stm32f10x_gpio.c是io口的配置。还有一个我们上一篇中说的所有的外设都要用到的库文件时钟stm32f10x_rcc.c。
一、启动文件
说外部中断之前,先了解下启动文件,也就是startup_stm32f10x_hd.s,它是用汇编语言写的,主要的作用是在上电启动的时候,建立c语言的运行环境。它主要的功能如下:
初始化堆栈指针sp
初始化程序计数器指针pc
设置堆、栈的大小
设置中断向量的入口地址
配置外部sram作为数据存储器
调用systeminit()函数配置stm32的系统时钟
设置c库的分支入口”_main”(最终用来调用main函数)
这些就是我们要的中断函数的入口地址,当发生中断时,是哪种中断就进入相应地址。
二、中断
中断是指当出现需要时,cpu暂时停止当前程序的执行而执行处理新情况,大体的框图如下:
在stm32中还有一个中断优先级的问题,当出现多个中断时,他们执行的顺序是什么,如下图所示:3的优先级高于2的优先级高于1的优先级。
三、外部中断的程序流程
四、具体的做法
stm32口的外部中断映射如下,首先看那个叫要设置为外部中断,则看是exti几。
第一步:当然是设置系统时钟,调用的函数之前说过了,不说了。
第二步:设置一个口pa0为外部中端口,首先就是设置pa0为普通的输入口,在gpio库文件中找,这里也不说了。
其次是设置io口为外部中断。
接下来是设置外部中断,在.exti文件中进行设置。
根据这些函数配置外部中断
这个时候外部中断已经配置好了,但是还得配置中断和设置中断优先级,在misc.c文件中
根据库函数表就可以对应的找到设置。
这样中断就设置完成了。
接下来写中断服务函数。
但是还是不够,这时还需要把中断服务函数和我们启动文件中的中断响应函数连接起来,最后当发生中断时直接进入中断服务函数,这时再在启动文件中找到这个中断发生的函数入口
在stm32f10x_it.h中添加
在stm32f10x_it.c的文件中添加如下:
这样对于外部中断的驱动就完成了。
什么是绝缘电阻和漏电流?
电源适配器盐雾测试,GBT6461,GB/T,IEC60068标准测试
荣耀9什么时候上市最新消息:华为中端旗舰荣耀9即将发布,配置、价格、设计、代言人看这里!
哪款蓝牙耳机适合运动的时候戴?佩戴舒适的蓝牙耳机推荐
大数据和AI如何结合将城市改变
STM32F103单片机学习笔记(2):外部中断
欧普照明作为华为智选再度战略携手合作
全球芯片紧张的根本原因是什么
以深度学习分析电子病历,进行临床预测
英特尔与腾讯宣布将共同合作推出首款智能学习电脑
意法半导体推出独立看门狗IC STWD100
华为盘古大模型3.0,重塑千行百业
风光互补供电系统的详细解析
探索启源微波的射频微波器件
可穿戴设备产业链发展有待完善成熟 厂商之间的竞争异常激烈
基于多孔结构金属氟碳储能复合材料设计
恒压变压器的结构图,恒压变压器电路图讲解
NI PXIe-1491推出最新的多媒体测试解决方案
海力士第4季获利6,570亿韩元 创3年新高
第九届电博会你没逛展?带你来一场精彩回顾