stm32打怪升级之不要碰中断

stm32中断概念:单片机cpu在执行当前程序的时候,由于外界出现外界请求或内部请求,使cpu暂停正在执行的程序而去处理相应的请求程序,当程序运行完毕后,cpu再来执行原先被暂停的程序,这个过程就是中断。又由于在处理请求程序过程中,可能被其他更高级或者低级的外界请求干扰,这时候就要判断优先级,先处理哪个请求程序,这个就是中断优先级。中断优先级分为抢占优先级和响应优先级,规则是:抢占优先级高可以中断抢占优先级低的中断函数,相同抢占之间不能相互中断,而响应优先级则看一下中断表里的排位顺序.

在使用中断时的时候,要用NVIC分组,为什么?判断中断表中的排序决定先处理哪一个而nvic就是这个中断分组。

在stm32中有一个专门的函数来配置中断优先级NVIC_PriorityGroupConfig(u32 NVIC_PriorityGroup)其中 u32 NVIC_PriorityGroup可以设置成NVIC_PriorityGroup0~4。NVIC需要使用misc.h库文件

EXTI是外部中断,外部中断初始化包含以下几个结构体GPIO_Init(),NVIC_Init(),EXTI_Init()
PA0(15)---->AFIO_EXTICR1中EXTI0(15)--------->EXTI0
注意:一次性使用中断只能有16个,且每组io序号只能用一次
2.AFIO_代表gpio的复用功能,有adc,串口等,而用作外部中断或者使用重印射功能必须开启afio时钟
由上图可以知道
首先得设置分组,然后io初始化。选择io口,开启中断通道且设置参数
只要是外设就需要使用rcc外部时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE)

然后gpio初始化GPIO_Init()有个结构体
GPIO_InitStructure.GPIO_Pin=k_left;         #这里的k_left实际上是一个外设,按键

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; //是上拉电阻输入,没有输入信号的时候为高电平
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStructure);
其次设置输入的io口GPIO_EXTILineConfig()
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource2)//因为我的按键在gpio的引脚为GPIOE组的第二管脚

然后对中断优先级NVIC_Init()有个结构体
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //这里使用的是中断优先级1组即1个抢占优先级,3个响应优先级
NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; //打开 EXTI2的全局中断//这里使用2作为中断向量,在stm32f10x.h中的IRQn可以找到定义,这里与EXTI_Line2对应的
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级为 0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应优先级为 0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能
NVIC_Init(&NVIC_InitStructure);

最后初始化外部中断EXTI_Init()有个结构体
EXTI_InitStructure.EXTI_Line=EXTI_Line2;//读取外部中断2,01234独立一个,5-9共同一个,10-15共用一个
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//中断模式
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//中断触发模式
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure)

外部中断的中断函数EXTI2_IRQHandler()//2跟上面同理,看引脚是什么,这里是需要自己按需求写,中断后运行什么程序就是在这里面修改

包含EXTI_GetITStatus()函数读取中断标志

EXTI_ClearITPendingBit()函数 清除中断标志

实际上原理就是,先把自己的外设(cpu需要执行的程序)初始化好,配置好参数,然后把中断初始化配置好,自己中断(外界请求或内部触发命令程序)会运行什么,按键?,传感器?还是其他的,把这些都初始化好(中断配置管脚和外部请求等程序得一一对应),然后再通过EXTI2_IRQHandle()函数将cpu执行的程序和中断后执行的程序联系起来。这就是我理解的一个完整的中断程序过程,打红线的部分就是按需要而进行修改的东西。是不是很简单

时间: 2024-10-23 00:47:35

stm32打怪升级之不要碰中断的相关文章

stm32打怪升级之瞥眼定时器

定时器TIM------->DMA(不用看功能直接忽略介绍) 外部中断得开启复用功能 定时器TIM)时钟源:stm32时钟系统框图(需要下载)外部中断得开启复用功能实验目的:定时1s让灯亮库:定时用到了stm3210x_tim.h库模版:工程模版+TIM3_IRQHandler模版 流程1.复制工程模版2.打开工程模版在app中新建文件定时器3.新建time.h和time.c文件添加至app定时器中4.在time.h文件中写入声明voidtime_init(void),且修改#define _T

【转载】运维职业向!我是怎么入得运维行业?运维工程师入门必备技能以及打怪升级篇

前言:转载 陈浩一个从事安全运维向的前辈文章.写的很好.人非常nice,遇到了问题,qq上很快就回复了我. 大道三千 入门最难,凡事入了行,也就什么都好说了,好的自然不断努力奋斗修行,不好的自然很快就被淘汰.恭谨勤勉,时不我待~ ---------------------------------------------------------------------------------------------------------------------------------------

详解Linux运维工程师打怪升级篇

详解 Linux 运维工程师打怪升级篇 积累经验篇 做运维也快4年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师 是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感知前方潮流变化.如:今年大数据,人工智能比较火...(相对表示就是 python 比较火) 前面也讲了运维基础篇,发现对很多人收益挺大,接下来也写下关于这4年多的运维实践经验,从事了2年多游戏运维,1年多安全运维,1年大数据运维,相关行业信息不能

三分之一的程序猿之创业组队与打怪升级

历史       历史是惊人的相似,曾几何时我还是大学网吧中众多逃课来玩游戏的其中一个. 我做事的是风格是疯狂,不到南墙不回头的风格.只在我迷上了<魔兽世界>是暴雪出品的一款MMORPG类经典游戏,即大型多人在线角色扮演游戏.进入大学后,松散的大学风格一下让自己反复来到了自由的天堂.我的定位是一位PVP玩家,在我还是菜鸟的时候,我需要做的就是寻找一个队伍进入竞技场. 70级版本,要想进入竞技场首先要做的第一件事情就是找人签名.也就意味着需要找到分工明确的5个人组成一个队伍,我当队长. 我70级

SDUT oj 3005 打怪升级(记忆化搜索)

比赛的时候一直在纠结乘2的数目很大怎么办,数组开不开啊...后来才发现自己傻了啊,那个数目最大不会超过10啊,这个力量上限是100啊.... 其他的就是记忆化搜索啊,还有就是加一点力量的瓶子当时就要用上. 打怪升级 Time Limit: 1000ms   Memory limit: 262144K  有疑问?点这里^_^ 题目描述 对于多数 RPG 游戏来说,除了剧情就是打怪升级.本题的任务是用最短的时间取得所有战斗的胜利.这些战斗必须按照特定的顺序进行,每打赢一场,都可能会获得一些补药,用来

Flask连接数据库打怪升级之旅

前言 在初学 Flask 的时候,在数据库连接这部分也跟每个初学者一样.但是随着工作中项目接手的多了,代码写的多了,历练的多了也就有了自己的经验和技巧.在对这块儿代码不断的进行升级改造后,整理了自己在连接数据库这部分的的一个学习经验,也就是我们今天分享的连接数据库部分的打怪升级之旅.希望可以为大家在学习 Python 的路上提供一些参考. 初级阶段 首先安装 Mysql 扩展包 建立数据库链接 开启打怪升级之路 在日常开发中,连接数据库最多的应用场景就是,查询所有数据和查询单条数据.就以查询所有

SDUT oj 3005 打怪升级(内存搜索)

当比赛一直纠缠骑2如何做一个非常大的数量,数组不开啊...后来他们发现自己很傻啊,该数不超过最大10什么,这个上限就是力量100什么.. .. 其它的就是记忆化搜索啊,还有就是加一点力量的瓶子当时就要用上. 打怪升级 Time Limit: 1000ms   Memory limit: 262144K  有疑问?点这里^_^ 题目描写叙述 对于多数 RPG 游戏来说,除了剧情就是打怪升级.本题的任务是用最短的时间取得全部战斗的胜利.这些战斗必须依照特定的顺序进行,每打赢一场.都可能会获得一些补药

002_阿里监控平台的“打怪升级”之路

阿里巴巴监控平台经过了这么多年的发展,与时俱进从最开始的简单自动化到现在的人工智能的系统运维.在这个人叫做容器下的 AIOps论坛上面,阿里巴巴集团监控负责人进行了精彩的演讲,主题是自动化到智能化的阿里监控发展之路.这次演讲主要分三部分分别是打怪升级.修炼内功.仰望星空. 打怪升级 和大多数的公司一样,阿里巴巴最初也采用的是 Nagios+Cacti 的开源模式. 这个组合的最大问题是:不能规模化,一旦数据量达到规模级别之后,就会出现各式各样的问题. 另外,由于我们对该开源的组合未做深入研究,因

20190528-JavaScriptの打怪升级旅行 { 语句 [ 赋值 ,数据 ] }

写在前面的乱七八糟:今天考了试,emmm很基础的题,还是Mrs房的面试题让人绝望啊┓( ´∀` )┏,补了很多知识,很综合的题,坑也很多,总的来说,查漏补缺,其实是啥都缺~ 今天打的小BOSS主要是数据,但也不得不提到赋值,┓( ´∀` )┏ 语句:声明  变量  赋值   数据: 3.赋值 在说赋值方式之前,需要先引入js的数值类型:基本类型和引用类型(boss4会细剖),下面我就假装都懂这俩个小怪的区别了,开始我一本正经的吹~,咳,一本正经地打怪升级了. 现象: 解析:莫得慌,一步步来,首先