stm32f103中断学习总结
一、NVIC 介绍
NVIC 英文全称是 Nested Vectored Interrupt Controller,中文意思就是嵌套向量中断控制器,它属于 M3 内核的一个外设,控制着芯片的中断相关功能。由于 ARM 给 NVIC 预留了非常多的功能,但对于使用 M3 内核设计芯片的公司可能就不需要这么多功能,于是就需要在 NVIC 上裁剪。
(STM32中断系统视频学习资料)
http://www.makeru.com.cn/live/1392_1124.html?s=45051
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。
点击链接加入群聊【嵌入式单片机Linux C交流群②】裙好【715272998】:https://jq.qq.com/?_wv=1027&k=Fk0u8pUw
stm32f103中断学习总结的更多相关文章
- 【转载-Andrew_qian】stm32中断学习
[转载]stm32中断学习 中断对于开发嵌入式系统来讲的地位绝对是毋庸置疑的,在C51单片机时代,一共只有5个中断,其中2个外部中断,2个定时/计数器中断和一个串口中断,但是在STM32中,中断数量大 ...
- 【转】Linux 中断学习之小试牛刀篇
原文网址:http://www.linuxidc.com/Linux/2011-02/32129.htm 前言 在前面分析了中断的基本原理后,就可以写一个内核中断程序来体验以下,也可以借此程序继续深入 ...
- stm32中断学习总结
经过了两天,终于差不多能看懂32的中断了,由于是用的库函数操作的,所以有些内部知识并没有求甚解,只是理解知道是这样的.但对于要做简单开发的我来说这些已经够了. 我学习喜欢从一个例程来看,下面的程序是我 ...
- 【转载】stm32中断学习
中断对于开发嵌入式系统来讲的地位绝对是毋庸置疑的,在C51单片机时代,一共只有5个中断,其中2个外部中断,2个定时/计数器中断和一个串口中断,但是在STM32中,中断数量大大增加,而且中断的设置也更加 ...
- Linux内核中断学习
1.内核中断概述 (1)在OS环境下编写中断处理函数与之前在裸机中编写中断处理函数的方式是不一样的,在Linux内核中提供了一套用来管理硬件中断资源的软件体系架构. (2)在操作系统中,中断号与gpi ...
- Java并发——线程中断学习
1. 使用interrupt()中断线程 当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即返 ...
- DSP5509的中断学习-第4篇
1. 编译工程的时候出现一个问题,如下 specifies large memory model, which is not compatible with small memory 2. 修改工程设 ...
- LINUX中断学习笔记【转】
转自:http://blog.chinaunix.net/uid-14825809-id-2381330.html 1.中断的注册与释放: 在 , 实现中断注册接口: int request_irq( ...
- 创龙TMS320C6748开发板串口和中断学习笔记
1. 硬件上,底板有2个串口,UART1和UART2(使用了MAX3232电平转换芯片),其中UART2也可以转RS485的. 2. 看下数据手册部分,不过一直不理解过采样的意思,16字节的FIFO ...
随机推荐
- SpingBoot-Dubbo-Zookeeper-分布式
目录 分布式理论 什么是分布式系统? Dubbo文档 单一应用架构 垂直应用架构 分布式服务架构 流动计算架构 什么是RPC RPC基本原理 测试环境搭建 Dubbo Dubbo环境搭建 Window ...
- python库--tensorflow
方法 返回值类型 参数 说明 张量 .constant() Tensort 张量 实例t value 创建一个常量tensor dtype=None 输出类型 shape=None 返回tens ...
- 批大小、mini-batch、epoch的含义
每次只选取1个样本,然后根据运行结果调整参数,这就是著名的随机梯度下降(SGD),而且可称为批大小(batch size)为 1 的 SGD. 批大小,就是每次调整参数前所选取的样本(称为mini-b ...
- ecshop调用商品原图的方法
一.在列表页可以用{$goods.goods_thumb} {$goods.goods_img}调用缩略图和商品图片 就是没有调用原图的下面是修改category.php 总sql语句处替换成下面 ...
- Dapr + .NET Core实战(四)发布和订阅
什么是发布-订阅 发布订阅是一种众所周知并被广泛使用的消息传送模式,常用在微服务架构的服务间通信,高并发削峰等情况.但是不同的消息中间件之间存在细微的差异,项目使用不同的产品需要实现不同的实现类,虽然 ...
- jmeter之命令行执行jmx脚本
使用界面执行不稳定,且保存报告非常麻烦 https://www.jb51.net/article/191367.htm 作者:Anthony_tester 来源:CSDN 原文:https://blo ...
- 鸿蒙内核源码分析(信号生产篇) | 信号安装和发送过程是怎样的? | 百篇博客分析OpenHarmony源码 | v48.03
百篇博客系列篇.本篇为: v48.xx 鸿蒙内核源码分析(信号生产篇) | 年过半百,依然活力十足 | 51.c.h .o 进程管理相关篇为: v02.xx 鸿蒙内核源码分析(进程管理篇) | 谁在管 ...
- P3291-[SCOI2016]妖怪【凸壳】
正题 题目链接:https://www.luogu.com.cn/problem/P3291 题目大意 给出 \(n\) 个数字对 \((atk,dnf)\),求一个\((a,b)\). 对于每个数字 ...
- P3309-[SDOI2014]向量集【线段树,凸壳】
正题 题目链接:https://www.luogu.com.cn/problem/P3309 题目大意 \(n\)个操作 在序列末尾加入一个向量\((x,y)\) 询问加入的第\(l\sim r\)个 ...
- Redux使用指南
Redux使用指南 00-简介 本文主要是用来记录Redux结合React的使用过程,帮助大家在使用Redux的时候,能够更好的理解Redux,从而更好地使用它 01-为什么需要Redux JavaS ...