零基础入门stm32选择最多的stm32f103中断学习总结

发布者:JoyfulSpirit最新更新时间:2025-01-14 来源: cnblogs关键字:stm32  stm32f103  中断学习 手机看文章 扫描二维码
随时随地手机看文章

  一、NVIC 介绍

  NVIC 英文全称是 Nested Vectored Interrupt Controller,中文意思就是嵌套向量中断控制器,它属于 M3

内核的一个外设,控制着芯片的中断相关功能。由于 ARM 给 NVIC 预留了非常多的功能,但对于使用 M3

内核设计芯片的公司可能就不需要这么多功能,于是就需要在 NVIC 上裁剪。ST 公司的 STM32F103 芯片内部中断数量就是 NVIC


裁剪后的结果。上面说到 NVIC 控制着芯片的中断相关功能,那么肯定有很多对应的寄存器,在固件库 core_cm3.h 文件内定义了一个 NVIC

结构体,里面定义了相关寄存器,

  如下:

  1 typedef struct

  2 {

  3 __IO uint32_t ISER[8]; /*!< Offset: 0x000 Interrupt Set Enable

Register */

  4 uint32_t RESERVED0[24];

  5 __IO uint32_t ICER[8]; /*!< Offset: 0x080 Interrupt Clear Enable

Register */

  6 uint32_t RSERVED1[24];

  7 __IO uint32_t ISPR[8]; /*!< Offset: 0x100 Interrupt Set Pending

Register */

  8 uint32_t RESERVED2[24];

  9 __IO uint32_t ICPR[8]; /*!< Offset: 0x180 Interrupt Clear Pending

Register */

  10 uint32_t RESERVED3[24];

  11 __IO uint32_t IABR[8]; /*!< Offset: 0x200 Interrupt Active bit

Register */

  12 uint32_t RESERVED4[56];

  13 __IO uint8_t IP[240]; /*!< Offset: 0x300 Interrupt Priority Register

(8Bit wide) */

  14 uint32_t RESERVED5[644];

  15 __O uint32_t STIR; /*!< Offset: 0xE00 Software Trigger Interrupt

Register */

  16 } NVIC_Type;

  在配置中断时,我们通常使用的只有 ISER、 ICER 和 IP 这三个寄存器,ISER 是中断使能寄存器,ICER 是中断清除寄存器,IP

是中断优先级寄存器。

  返回目录

  二、中断配置

  要使用中断我们就需要先配置它,通常都需经过这几步:

  (1)使能外设某个中断,这个具体是由外设相关中断使能位来控制,比如定时器有溢出中断,这个可由定时器的控制寄存器中相应中断使能位来控制。

  (2)设置中断优先级分组,初始化 NVIC_InitTypeDef 结构体,设置抢占优先级和响应优先级,使能中断请求。

  (3)编写中断服务函数

  配置好中断后如果有触发,即会进入中断服务函数,那么中断服务函数也有固定的函数名,可以在 startup_stm32f10x_hd.s

启动文件查看,启动文件提供的只是一个中断服务函数名,具体实现什么功能还需要我们自己编写,可以将中断服务函数放在 stm32f10x_it.c

文件内,也可以放在自己的应用程序中。通常我们把中断函数放在应用程序中。这里提醒一下大家,不要任意修改中断服务函数名,因为启动文件内中断服务函数名已经固定,如果要修改,你还必须在启动文件内把原中断函数修改。

  这里对第二步进行解释:

  NVIC_InitTypeDef 结构体如下:

  1 typedef struct

  2 {

  3 uint8_t NVIC_IRQChannel;

  4 uint8_t NVIC_IRQChannelPreemptionPriority;

  5 uint8_t NVIC_IRQChannelSubPriority;

  6 FunctionalState NVIC_IRQChannelCmd;

  7 } NVIC_InitTypeDef;

  下面我们对 NVIC_InitTypeDef 结构体成员进行一下简单介绍。

  1.NVIC_IRQChannel:中断源的设置,不同的外设中断,中断源不一样,自然名字也不一样,所以名字不能写错,否则不会进入中断。中断源放在stm32f10x.h

文件的 IRQn_Type 结构体内,由于内容太多,这里就不复制所有中断源,只截取一部分,如下:

  1 typedef enum IRQn

  2 {

  3 //Cortex-M3 处理器异常编号

  4 NonMaskableInt_IRQn = -14,

  5 MemoryManagement_IRQn = -12,

  6 BusFault_IRQn = -11,

  7 UsageFault_IRQn = -10,

  8 SVCall_IRQn = -5,

  9 DebugMonitor_IRQn = -4,

  10 PendSV_IRQn = -2

  11 。。。。。

  12 }IRQn_Type;

  2.NVIC_IRQChannelPreemptionPriority:抢占优先级,具体的值要根据优先级分组来确定,可以参考前面中断优先级分组内容。

  3.NVIC_IRQChannelSubPriority:响应优先级,具体的值要根据优先级分组来确定,可以参考前面中断优先级分组内容。

  4.NVIC_IRQChannelCmd:中断使能/失能设置,使能配置为 ENABLE,失能配置为 DISABLE。

关键字:stm32  stm32f103  中断学习 引用地址:零基础入门stm32选择最多的stm32f103中断学习总结

上一篇:Mac STM32 开发环境搭建
下一篇:基于stm32的多功能时钟2——DHT11测量温湿度

推荐阅读最新更新时间:2026-03-23 11:35

STM32 RS485总线通信开发指南:零基础入门,详解开发流程第60步
(图1:开发板与RS485连接示意图) (图2:RS485通讯示意图) 一、RS485通信系统架构 +------------------+ +------------------+ +------------------+ | STM32控制器 | | RS485驱动芯片 | | RS485总线设备 | | (USART3 PB10/11) | ----- | (SP3485/MAX485) | ----- | (A/B差分信号线) | +------------------+ +------------------+ +------------------+ ↑
[单片机]
<font color='red'>STM32</font> RS485总线通信开发指南:<font color='red'>零基础</font><font color='red'>入门</font>,详解开发流程第60步
单片机零基础学习之从“点灯”入门STM32
  本篇文章我们通过一个简单的例子来熟悉模块化编程以及利用库函数的方法进行开发使用STM32外设的基本流程。   首先,我们打开本讲的例程,在工程目录我们可以看到驱动分组下有 led、delay 两个.c源文件,其实,它们对应的还有两个头文件,它们就保存在我们的 DRIVER 文件夹下的 inc 文件夹中,同理,源文件就保存在 src 文件夹中。   我们在源文件里定义相关的函数,然后在对应的头文件里声明它,最后我们在想要调用此函数的源文件中包含该头文件即可,这就是模块化编程。这样做的好处就是代码整体框架结构清晰明了,便于我们进行后期维护与移植。   因此,这个知识点希望大家能够掌握。   下面我们就开始具体讲解如何驱动我们实验平
[单片机]
stm32零基础入门,应学习那些知识
首先我们先看看与STM32相关的文档   我们假定大家已经对STM32的书籍或者文档有一定的理解。如不理解,请立即阅读STM32的文档,以获取最基本的知识点。   如果你手上拥有ST官方主推的STM32神舟系列的板子,那么光盘都会配好这些文档,STM32的学习与ARM9的学习有一个很大的区别。ARM9的学习   一般是需要购买书籍的。比如三星的S3C2440,官方的文档都是英文的,大部分工程师只能去看国内出版的书籍。英文好的同学,请不要以为   你很牛,可以只看英文文档。毕竟你是中国人,你最熟悉的,理解最好的还是中文。看英文的速度还是比看中文慢一些,我们要的是最短的时   间,而不是追求短时间内记住所有细节。当然,如果是一篇论文,
[单片机]
单片机stm32零基础入门之--初识STM32 标准库
  CMSIS 标准及库层次关系   因为基于Cortex 系列芯片采用的内核都是相同的,区别主要为核外的片上外设的差异,这些差异却导致软件在同内核,不同外设的芯片上移植困难。为了解决不同的芯片厂商生产的Cortex 微控制器软件 的兼容性问题,ARM 与芯片厂商建立了CMSIS 标准(CortexMicroController Software Interface Standard)。   所谓CMSIS 标准,实际是新建了一个软件抽象层。   CMSIS 标准中最主要的为CMSIS 核心层,它包括了:   内核函数层:其中包含用于访问内核寄存器的名称、地址定义,主要由ARM 公司提供。   设备外设访问层:提供了片上的核
[单片机]
零基础入门stm32知识学习的先后顺序
  这里大概的罗列了一些学习STM32的内容,以及学习顺序。如果是新手的话,建议边看中文手册和学习视频(一般都看原子的,视频的话百度就可以了,如果实在是找不到的话,我给大家推荐一个网站:21ic公开课,里面很多免费的基础学习视频,非常适合广大的学生);如果是已经入门的,个人建议自己做一个项目,不论项目大小,当然里面会涉及到自己已经学习过的,或者是自己正在学习的,亦或是自己想来想要学习的,一边学习,一边做项目。这样好处颇多,大家慢慢去体会。下面就是本人所罗列的一些STM32的内容,不需要看懂,只需要记住即可,在你以后慢慢深入的过程中,就会了解到的:   1、STM32基本配置(运行环境、编译器、下载器、板子等)。   2、G
[单片机]
stm32f103中断系统详解学习笔记
  一、NVIC 介绍   NVIC 英文全称是 Nested Vectored Interrupt Controller,中文意思就是嵌套向量中断控制器,它属于 M3 内核的一个外设,控制着芯片的中断相关功能。由于 ARM 给 NVIC 预留了非常多的功能,但对于使用 M3 内核设计芯片的公司可能就不需要这么多功能,于是就需要在 NVIC 上裁剪。 - STM32中断系统专题讲解 - ST 公司的 STM32F103 芯片内部中断数量就是 NVIC 裁剪后的结果。上面说到 NVIC 控制着芯片的中断相关功能,那么肯定有很多对应的寄存器,在固件库 core_cm3.h 文件内定义了一个 NVIC 结构体,里面定义了相关寄存器,
[单片机]
STM32学习笔记5】EXTI外部中断
前言 本系列文章统一围绕STM32F103C8T6最小系统开发板进行记录,如涉及其他开发板将会特别说明。 中断 系统停止当前正在运行的程序转到其他的服务,可能是程序接收了比自身高优先级的请求,或者是人为设置中断,中断是属于正常现象。 硬中断 由硬件产生的,比如像磁盘,网卡,键盘,时钟等。每个设备或设备集都有它自己的IRQ(中断请求)。基于IRQ,CPU可以将相应的请求分发到对应的硬件驱动上。 软中断 软中断是由当前正在运行的进程所产生。 中断处理过程 当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。 在异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行。 在进入异常中断
[单片机]
学习STM32日志——简单外部中断
STM32支持19个外部中断和事件请求,其中线0~15映射对应IO口的输入中断。每个线同时最多只能映射一个IO口。 映射关系 而中断服务函数只有7个。线5-9共用一个,10到15共用一个。 下面是配置步骤。 开始自己编写一个程序,通过两个按键的按下来触发中断,一个按键接地,端口设置为上拉状态,触发模式为下降沿触发;另一个按键接VCC,端口设置为下拉状态,触发模式为上升沿触发。然后在中断服务函数中编写触发中断后要执行的函数。一个为切换LED的亮灭状态,另一个控制蜂鸣器的通断。 在调试过程中,出现了按键按下但会偶尔失灵,既不触发中断的现象,经过半个小时的找原因,发现因为粗心,将接地按键的触发模式设置为下降沿,而将接V
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved