MM32/STM32中断和事件梳理
Interrupt_event梳理
1.预备资料
MM32/stm32中文参考手册
Cortex-M3权威指南(深入了解中断和异常)
MM32F103产品手册(配置GPIO的复用功能可能用到)
2.提出问题
什么是中断?
怎样配置一个中断?
3.思维导图整体框架(CTRL+中键缩放查看)

4.什么是中断?
中断,Interrupt,就是CPU正在执行某项任务,被此项任务外的其他事务打断,CPU将正在执行的任务暂停(保护现场)转而执行其他高优先级的事务(处理中断),等此项事务执行完成,CPU再来执行先前被打断的任务(返回/恢复现场)。
对于用户而言,我们不必关心CPU怎样跳转(保护/恢复现场),我们主要关注CPU响应我们的预置中断请求即可。
因此,中断的配置主要关注:怎样进入中断和中断中做什么事情。
5.NVIC(嵌套中断向量中断控制器)
中断和异常向量
中断与异常是ARM内核的东西,需要深入了解可以看《Cortex-M3权威指南》
这里分析stm32中的中断向量表的使用与查询
表中的几个重要参数:
位置:配置中断是,告诉CPU中断的位置
名称:外设请求的中断名称,详情可以看“说明”字段
优先级:当同时发生多个中断请求时,CPU需要一种合理高效的调度模式,决定处理各个中断请求的次序(抢占优先级,响应优先级)
以表中的EXTI0说明:
这里需要配置EXTI0上的中断,即当EXTI0线上发生上升沿或者下降沿(可配置)时,我们需要CPU跳转到相应的中断服务函数中执行我们想执行的任务,可以这样配置:
- 设置NVIC的中断位置为6
- 设置边沿触发模式(上升沿/下降沿/双边沿)
- 适当的时候在EXTI0上产生触发信号,激活中断执行中断服务函数
关于产生EXTI0触发信号
查阅外部中断通用I/O映射可以知道,通过配置GPIO[x]0连接到EXTI0线

6.EXTI(外部中断/事件控制器)
框图

- 配置1-3 + NVIC响应中断使能 可以触发硬件的外部中断
- 配置2-3 + NVIC响应中断使能 可以触发软件的外部中断
- 配置1-4可以触发硬件的外部事件(事件可用于sleep mode唤醒等)
- 配置2-4可以触发软件的外部事件
配置一个中断(EXTI0外部中断)
配置时钟和GPIO(EXTI0输入)
GPIO_InitTypeDef GPIO_InitStructure; //GPIO
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ALL,ENABLE);
RCC_PCLK2Config(RCC_HCLK_Div8);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_ALL,ENABLE);
RCC_PCLK2Config(RCC_HCLK_Div8);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //配置EXTI0的触发信号,具体查阅--外部中断/事件线路映射
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //input mode
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //50M
GPIO_Init(GPIOA, &GPIO_InitStructure);
配置EXTI控制器
NVIC->ISER[0]=(1<<6);//使能CPU的中断响应,其中位置为6,在中断和异常向量表中可以查询得到
EXTI->IMR=(0x1<<0); //配置EXTI的中断使能,请看上边的框图分析
EXTI->RTSR=(0x1<<0); //line 0 rising 配置上升沿触发
EXTI->FTSR=(0x1<<0); //line 0 falling 配置下降沿触发,细节请看EXTI的寄存器描述
while(EXTI->IMR&0x100); //等待进入中断
写中断服务函数
void EXTI0IRQHandler(void) //中断服务函数,请到库函数查看各个中断对应的预定义中断函数名
{
EXTI->PR=0x1; //清除挂起中断
print("Hello EXTI0\n");
EXTI->IMR&=0xfffffc1f; //除能中断
}
触发
这样通过在GPIO引脚输入脉冲即可进入中断函数。
7.总结中断配置步骤
- 配置NVIC寄存器
NVIC->ISER[0]=(0x1<<6)- 配置外设中断寄存器,使能中断
- 根据定义的中断子函数名写中断函数,例如
void EXTI0IRQHandler(void- 运行程序,使之产生中断
- 查看进入中断情况,是否触发中断
参考资料
[1]. MM32参考手册
[2]. stm32中文参考手册
[3]. Cortex-M3权威指南
[4]. MM32F103产品手册
MM32/STM32中断和事件梳理的更多相关文章
- 转载:STM32之中断与事件---中断与事件的区别
这张图是一条外部中断线或外部事件线的示意图,图中信号线上划有一条斜线,旁边标志19字样的注释,表示这样的线路共有19套.图中的蓝色虚线箭头,标出了外部中断信号的传输路径,首先外部信号从编号1的芯片管脚 ...
- STM32之中断与事件---中断与事件的区别
STM32之中断与事件---中断与事件的区别 http://blog.csdn.net/flydream0/article/details/8208463 这张图是一条外部中断线或外部事件线的示意图 ...
- STM32中断管理函数
CM3 内核支持256 个中断,其中包含了16 个内核中断和240 个外部中断,并且具有256 级的可编程中断设置.但STM32 并没有使用CM3 内核的全部东西,而是只用了它的一部分. STM32 ...
- stm32 中断几个库函数实现过程分析
感谢原文作者:鱼竿的传说,这篇文章写得不错,转载自 http://www.cnblogs.com/chineseboy/archive/2013/03/14/2956782.html 前题: 闭门造车 ...
- 第16章 STM32中断应用概览
第16章 STM32中断应用概览 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ...
- STM32 中断应用概览
本章参考资料< STM32F4xx 中文参考手册>第十章-中断和事件.<ARM Cortex™-M4F 技术参考手册> -4.3 章节: NVIC 和 4.4 章节: SCB— ...
- 第16章 STM32中断应用概览—零死角玩转STM32-F429系列
第16章 STM32中断应用概览 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ...
- STM32中断
STM32的中断分两个类型:内核异常和外部中断. 内核异常不能够被打断,不能被设置优先级(它的优先级是凌驾于外部中断之上的).常见的内核异常有以下几种:复位(reset),不可屏蔽中断(NMI),硬错 ...
- STM32—中断详解(配合按键中断代码,代码亲测)
在STM32中执行中断主要分三部分: 1.配置NVIC_Config()函数 2.配置EXTI_Config()函数 3.编写中断服务函数 (注:本文章所用代码为中断按键代码,实现了按键进入中断从而控 ...
随机推荐
- pugixml使用教程
pugixml介绍 pugixml是一个高性能.轻量级并且简单易用的xml解析库,支持UTF8 encoding.Little-endian UTF16.Big-endian UTF16.UTF16 ...
- DOM4J 读取XML配置文件进行数据库连接
介绍介绍DOM4J. 据说是非常优秀非常优秀的Java XML API(Dom4j is an easy to use, open source library for working ...
- android 9Path图片的使用
Android UI设计时,经常会使用图片作为背景,比如给按钮设置背景图片时,图片会默认缩放来适应整个按钮.但是有时这种缩放效果并不是我们所需求的.而我们只是希望缩放图片的特定位置,以此来保证按钮的视 ...
- UVa 129 Krypton Factor困难的串 (dfs 递归搜索)
回溯法,只需要判断当前串的后缀,而不是所有的子串 #include<iostream> #include<cstdio> using namespace std; ]; int ...
- UVA 1594 Ducci Sequence(两极问题)
Ducci Sequence Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu D ...
- 新建PCH文件以及常用宏定义
$(SRCROOT)/项目名/pch文件名.pch //0-255的随机数 #define randint arc4random() % 256 //随机色 #define randColor [UI ...
- The working copy xxxx needs to be upgraded to Subversion 1.7.
原因是我在svn是低版本时候checkout的项目 而对方用的版本比我高 然后 我运行这个项目 就要求我 更新 如果我选择 对项目进行upgrade. 当 upgrade后 我的项目就在 现有 ...
- 多台web服务器之间共享session
常见的几种方法如下: 1. 写客户端Cookie的方式 当用户登陆成功以后,把网站域名.用户名.密码.token.session有效时间全部采用cookie的形式写入到客户端的cookie里面,如果用 ...
- Linux的时钟管理
本文转自博客园zhenwenxian的Linux时间管理,很详细,写得很不错,对初学者还是有很大帮助的. 时间管理在内核中占有非常重要的地位.相对于事件驱动,内核中有大量的函数都是基于时间驱动的.内核 ...
- What qualities characterize a great PhD student
省理工计算机教授David Karger接触了许多世界上最杰出的博士生,近日总结出了优秀博士通常具备的五点品质:0 过人的智力 1 好奇心 2 创造力 3 纪律性与生产力 4 与观众沟通 5 与伙伴沟 ...
