对于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的文件中添加如下:
这样对于外部中断的驱动就完成了。
关键字:STM32F103 单片机 外部中断
引用地址:
STM32F103单片机学习笔记(2):外部中断
推荐阅读最新更新时间:2024-11-02 01:54
stm32多线程 单片机如何实现多线程
STM 32系列是专门应用在高性能、低成本、低功耗的嵌入式应用设计的ARM Corte-M0,M0+,M3,M4和M7内核,是主流的嵌入式单片机之一。 多线程通常是指从计算机软件或硬件上实现多个线程并发执行的技术,多线程技术有利于提升计算机整体处理性能。 基于STM32单片机的多线程源代码实例1: #include “Hal_Led/Hal_Led.h” #include “Hal_delay/delay.h” #include “Hal_Key/Hal_Key.h” #include “ringbuffer.h” #define APP_LED2_BLINK_EVENT 0x0001 #define HAL_LED1_BLI
[单片机]
SN 8 位单片机 SN8P2743 应用实践(4)
接 汇编测试程序: B_COM0SS:;比较器CM0: CLR CM0M ; 清CM0M 寄存器。; 复位比较器CM0。 ;设置比较器CM0 的功能模式。 ;B0BCLR FCM0SF ; 普通比较器模式。 B0BSET FCM0SF ; 特殊功能模式。 ;设置比较器CM0 的输出引脚。 B0BCLR FCM0OEN ; 禁止比较器CM0 的输出引脚。 ---- 没有输出引脚 ; B0BSET FCM0OEN ; 使能比较器CM0 的输出引脚。 ;比较器不要外部输出引脚时,接口板上芯片插座引脚是普通I/O,比较器引脚则仍然是比较器引脚. ;比较器使用外部输出引脚时,接
[单片机]
基于单片机的Zigbee传感器节点的硬件设计
引言 ZigBee联盟定义 了2种物理设备类型:一种是全功能设备FFD(fullfunctiondevice);另一种叫精简功能设备RFD(reducedfunctiondevice)。网络的构建需要有协调器参与工作(FFD)。整个网络的形成过程:首先进行初始化,之后协调器开始参与后建立网络,网络建立以后再通过路由器(FFD)和终端设备(RFD)发现网络,最后在建立起的网络开始数据管理和传送。 1 节点硬件设计 传感器节点是由几个不同的模块组成,这些模块处理着不同的功能,有传感器模块,传感器模块是传感的硬件基础,接着通过处理器模块,这个模块执行着重要的功能,数据处理后才能进行通信,还有无线通信模块和能量供应模
[单片机]
基于RISC技术的8位微控制器设计
引 言 随着微电子技术的不断发展,超大规模集成电路的集成度和工艺水平不断提高,将整个应用电子系统集成在一个芯片中(SoC),已成为现代电子系统设计的趋势;以往高复杂度、高成本的嵌入式系统结构能够通过低成本的单片芯片实现。另一方面,复杂可编程逻辑器件(CPLD)和现场可编程门阵列(FPGA)集成度和速度不断提高,功能不断增强,开发人员可以使用高性能的EDA综合开发工具和硬件描述语言(HDL)在短时间内设计出复杂的电子应用系统。目前,嵌入式系统已经在各行各业得到广泛应用。工控、通信、汽车、航空航天以及军事等各个领域都能看到嵌入式系统的身影,而微控制器(MCU)则是嵌入式系统的核心。 1 精简 指令 集计算机( RISC
[工业控制]
51单片机读写AT29C040的C51程序
给大家介绍一个51单片机读写AT29C040的c51程序 #include 《reg51.h》 #include 《intrins.h》 unsigned char time; void int_t0(void) interrupt 1 { time++; } unsigned char d; //rec data bit rec(void) { TH0=0;time=0; while (!RI) {if (time》1) return(1);} RI=0; d=SBUF; return(0); } void sen(unsigned char dd) { SBUF=dd; while (!TI) {} TI=0; } voi
[单片机]
FR81S家族32位微控制器打造车身控制平台
随着全球变暖,汽车工业需要生产更加环保和燃料更加有效率的汽车。改进安全和舒适性的豪华汽车需求在先进国家不断增加,同时在中国、印度和巴西等迅速发展中国家对有紧凑型汽车需求也有强烈需求。 为了响应这些需求,很多汽车制造商都在推动车身控制应用平台设计。相应地,也需要容易集成到这些平台中的微控制器(MCU)。为了满足这些需求,富士通半导体推出了MB91520系列,丰富了其32位微控制器FR81S家族。新系列提供了各种引脚配置和内存容量,为车身控制应用提供了许多外设功能,以及作为标准特性的内置的降低成本功能,以此提供一个最合适的平台解决方案。针对无刷DC电机和安全功能的专用定时器也能够支持AUTOSAR。 富士通半导体针对车身控制推出的
[单片机]
51单片机C语言中.c文件和.h文件的关联
1)h文件作用 1 方便开发:包含一些文件需要的共同的常量,结构,类型定义,函数,变量申明; 2 提供接口:对一个软件包来说可以提供一个给外界的接口(例如: stdio.h)。 2)h文件里应该有什么 常量,结构,类型定义,函数,变量申明。 3)h文件不应该有什么 变量定义, 函数定义。 4)extern问题 对于变量需要extern; 对于函数不需要因为函数的缺省状态是extern的.如果一个函数要改变为只在文件内可见,加static。 5)include包含问题 虽然申明和类型定义可以重复,不过推荐使用条件编译。 #ifndef _FILENAME_H, #define _F
[单片机]
51单片机I2C详解与程序源码
I2C是由Philips公司发明的一种串行数据通信协议,仅使用两根信号线:SerialClock(简称SCL)和SerialData(简称SDA)。I2C是总线结构,1个Master,1个或多个Slave,各Slave设备以7位地址区分,地址后面再跟1位读写位,表示读(=1)或者写(=0),所以我们有时也可看到8位形式的设备地址,此时每个设备有读、写两个地址,高7位地址其实是相同的。 I2C数据格式如下: 无数据:SCL=1,SDA=1; 开始位(Start):当SCL=1时,SDA由1向0跳变; 停止位(Stop):当SCL=1时,SDA由0向1跳变; 数据位:当SCL由0向1跳变时,由发送方控制SDA,此时SDA为有效数据
[单片机]