中断优先级

STM32外部中断

我是研究僧i 提交于 2020-01-12 21:30:46
STM32外部中断 STM32有19个外部中断:线0-15对应外部IO口的输入中断;线16连接PVD输出;线17连接RTC闹钟事件;线18连接USB唤醒事件。 GPIO与中断线的映射关系:GPIOx.0映射到EXTI0,GPIOx.1映射到EXTI1;以此类推。 使用外部中断需要使能AFIO时钟:RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); 还要设置IO口与中断线的映射关系:(例)GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5); 然后设置中断的触发模式等初始参数 然后设置NVIC中断优先级 设置完中断优先级后就是编写中断服务函数,STM32的IO口外部中断函数只有6个,中断线0-4分别对应一个中断服务函数,中断线5-9共用一个,10-15公用一个,如图: 注意 :设置中断优先级分组需要在主函数中调用相关函数设置,一定要记住初始化函数(初始化延时、按键、LED) 在编写完中断服务函数之后要清楚中断标志位,如图: 外部中断函数 # include "exti.h" //exti.c文件 # include "led.h" # include "key.h" # include "delay.h" # include "usart.h" //外部中断初始化函数

Arduino基础一文通

こ雲淡風輕ζ 提交于 2020-01-11 23:04:40
(Arduino基础一文通) 此文旨在记录arduino的一些基本语法,以备自己后续查用,并没有任何的讲解和分析, 如果您是电子爱好者,想学习arduino,请寻找合适的教材学习; 如果您有编程基础,想短时间内粗略了解arduino,则完全可以。 第一部分 基础 一、Arduino程序结构 草图启动时会调用setup()函数。使用它来初始化变量,引脚模式,启用库等。setup函数只能在Arduino板的每次上电或复位后运行一次。 在创建了用于初始化并设置初始值的setup()函数后,loop()函数,正如它的名称所指,允许你的程序连续循环的更改和响应。可以使用它来主动控制Arduino板。 二、Arduino数据类型 三、Arduino 变量和常量 和C完全一样; 四、Arduino 运算符 和C完全一样; 五、Arduino 控制语句 注意其中一个:(三元运算符) ? :条件运算符语法 expression1 ? expression2 : expression3 max = ( a > b ) ? a : b; 六、Arduino 循环 和C完全一样 七、Arduino 函数 和C完全一样 注意:如果函数写在loop函数下面,则需要在前面声明,就像C语言里写在main函数下面一样 八、Arduino 字符串 Arduino字符串同样继承了C字符串的特点😭😭😭 char my

《51单片机基础》:定时器

蹲街弑〆低调 提交于 2020-01-06 13:19:29
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 咱们今天就聊一聊那些年单片机关于定时器与中断方面的事儿,其实定时器实质上就是一个加1计数器。它随着计数器的输入脉冲进行自加1,也就是说当每来一个脉冲,计数器就会自动加1,如果当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使相应的中断标志位置1,向CPU发出就会发出中断请求。 再讲讲中断吧,有不少单片机初学者对中断有些懵,不知道它的用法,讲个生活例子就是比如你在家里看电视,突然门铃响啦此时你的第一选择就是去开门,打断你做原来事情让你优先去做开门这件事,这就是所谓中断。 当你这件事情结束之后,你又可以继续去看电视。关于单片机中断优先级的问题,小伙伴一定要勤于动手,勤于动脑的查找资料。所以接下来写一个关于定时器与中断的实验,将数码管上电之后8位都显示6,然后定个时间就两秒后全显示2,因为一些原因只能给小伙伴们截两张图片,不过有兴趣的小伙伴可以验证代码的正确性,都这样说啦,代码都是作者亲自验证过的(哈哈哈),行,接下来直接给小伙伴们上图 主函数部分: 定时器主要代码: 实验现象: 哈哈,今天的实验就分享到这里,也希望小伙伴们能够喜欢、点赞。 来源: oschina 链接: https://my.oschina.net/u/4228486/blog/3151214

FreeRTOS 任务栈大小确定及其溢出检测

ε祈祈猫儿з 提交于 2020-01-06 01:42:22
以下转载自安富莱电子: http://forum.armfly.com/forum.php FreeRTOS 的任务栈设置 不管是裸机编程还是 RTOS 编程,栈的分配大小都非常重要。 局部变量,函数调用时的现场保护和返 回地址,函数的形参,进入中断函数前和中断嵌套等都需要栈空间,栈空间定义小了会造成系统崩溃。 裸机的情况下,用户可以在这里配置栈大小: 为什么是堆中的?因为我们采用的就是动态创建任务的方式。如果静态创建,就和我们自己开辟的空间有关,通常静态创建任务用数组作为容器,但是通常静态创建的方式我们都不使用。 FreeRTOS 的系统栈设置 上面跟大家讲解了什么是任务栈,这里的系统栈又是什么呢?裸机的情况下,凡是用到栈空间的地方 都是在这里配置的栈空间: 在 RTOS 下, 上面两个截图中设置的栈大小有了一个新的名字叫系统栈空间 ,而任务栈是不使用这里的空间的。 任务栈不使用这里的栈空间,哪里使用这里的栈空间呢?答案就在中断函数和中断嵌套。  由于 Cortex-M3 和 M4 内核具有双堆栈指针,MSP 主堆栈指针和 PSP 进程堆栈指针,或者叫 PSP 任务堆栈指针也是可以的。在 FreeRTOS 操作系统中,主堆栈指针 MSP 是给系统栈空间使用的,进 程堆栈指针 PSP 是给任务栈使用的。 也就是说,在 FreeRTOS 任务中,所有栈空间的使用都是通过 PSP

IDT系列:(一)初探IDT,Interrupt Descriptor Table,中断描述符表

ぐ巨炮叔叔 提交于 2020-01-04 14:29:33
原文: IDT系列:(一)初探IDT,Interrupt Descriptor Table,中断描述符表 IDT,Interrupt Descriptor Table,中断描述符表是CPU用来处理中断和程序异常的。 一、有关IDT的基本知识 1、中断时一种机制,用来处理硬件需要向CPU输入信息的情况。 比如鼠标,键盘等。 2、中断和异常的产生是随机的,在CPU正常运行过程中随时可能产生。CPU的中断处理机制 3、中断可以由硬件产生(称为外部中断),也可以由软件产生(称为内部中断),在程序中写入int n指令可以产生n号中断和异常(n从0-ffh)。 4、同时CPU的中断异常机制还是重要特性的支持原理,比如程序调试,程序运行过程中的异常处理(如零除数异常、内存分页错误等)。 5、早期的操作系统甚至是通过中断来进行内核调用的。int指令是一种c从ring3 进入ring 0的方法。比如windows在xp版本之前使用的int 2e。在x86 CPU提供了sysenter指令后,这种方式才被放弃。 6、每一种中断对应一个中断号。CPU执行中断指令时,会去IDT表中查找对应的中断服务程序(interrupt service routine ,ISR)。ISR(为了表述方便后面用ISR n表示n号中断的处理程序),x86CPU最大可以支持256种中断。 7、中断是CPU的机制

HardFault_Handler问题

删除回忆录丶 提交于 2020-01-02 18:08:28
1、问题描述:mio板M2口连接雷达(即can口有数据时),程序跑到can中断使能代码时,程序跳转到“HardFault_Handler”,见下图: 代码跑到此处 解决历程: 1、修改堆栈 先是网上搜索此问题,大致两个解决方法: A、内存溢出或者访问越界 B、堆栈溢出 此代码在第一版mio上工作正常,排除A的可能性;怀疑不小心修改了配置,改变了堆栈大小。 于是,去修改堆栈的大小。可,无论怎么增加size,都还是一样的错误。 2、查看map文件 修改堆栈大小不起作用时,感觉好疑惑,怎么会这样?后与同事沟通,建议看看map文件,会不会can中断服务程序没有被编译? 在map文件里,找到定时器和串口中断服务函数,的的确确没有can中断服务函数。 3、can中断配置 这个时候,有点不理解,MY_NVIC_Init(1,0,USB_LP_CAN1_RX0_IRQn,2);对应配置了中断抢占优先级、响应优先级、中断编号和中断分组,并没有注册中断函数,那么中断函数是怎么关联的呢? 网上搜索:若要调用相关的中断功能,在NVIC中配置相关的中断优先级和中断号, STM32内部会根据配置的中断号在启动文件中寻找相应的中断函数的相应的入口函数。 另外:ST公司在提供的启动文件startup_stm32fXXX.s中都对相应的中断号对应的中断处理函数的入口都已经规定好了

信号中断与异步信号中断安全编程

故事扮演 提交于 2020-01-01 00:21:50
1、什么是中断? 1.1、什么是中断 外围设备的速度远低于CPU的速度,所以为提高CPU计算效率,现代计算机变内核主动为硬件主动,只在硬件需要的时候才发送信号,通知内核来处理数据。这样外围设备与内核的协作方式即为中断机制。而设备发送的信号即为中断,其本质为一种特殊的电信号。 硬中断处理流程: 1、各外围设备与中断管理器各输入引脚相连; 2、中断管理器与CPU之间只存在一条中断管线; 3、设备发送一个中断到中断管理器; 4、中断管理器发送对应电信号给CPU。 5、CPU中断当前工作,开始处理中断,并通知操作系统。 6、操作系统调用中断处理程序。 中断的特点: 1、不同的设备对应不同的中断,并被用数字标识; 2、对应的设备需要对应的中断处理程序; 3、中断值即中断请求线(IRQ),被关联到不同的数值量,如IRQ 0,中断亦可动态分配。 4、设备中断信号可能在任意时刻到来,不与CPU时钟同步,即异步硬件中断。 糕富帅CPU来到女儿国,女儿国的妹子们(中断集合)精心打扮,总在认为打扮完美的时刻向糕富帅抛媚眼露大腿扮性感,引起糕富帅的注意。糕富帅玩弄妹子的手段高超,经验丰富,与最靓的妹纸牵手,喜欢为不同的妹子编号并制定不同的攻略策略,总是上半场激烈,下半场缠绵,中场偷腥不断,并在腻味之后回归原始的浪荡生活。妹纸们总是很傻很天真,屡败屡战,不停地打扮自己,完美自己,期待着与糕富帅的重新开始。

2019年9月9日星期一(STM32 内部时钟 中断)

☆樱花仙子☆ 提交于 2019-12-26 13:56:03
一 .stm32 的启动过程 在stm32的开发中,芯片的启动代码官方通常会提供,一般不需要修改。但是对芯片的启动代码有一定了解,有助于对某些组件工作原理加深了解 可以借助官方提供的启动代码来理解启动过程,启动代码是一个汇编文件(.s作为后缀),我们开发板的启动文件是start_stm32f40_41xxx.s 1.初始化栈 2.初始化堆 3.实现异常向量表 4.处理各个异常的代码 其中复位异常中 ----- 初始化一些基本硬件(时钟,SRAM,FLASH...),调用主函数 二 .stm32 的时钟系统 stm32f407的推荐时钟频率 168MHz 1. 提供参考时钟的硬件 晶振 ----------- 产生低频的稳定震荡信号 RC震荡电路 ----- 产生低频的不稳定震荡信号 以上产生的频率不足以直接供给CPU使用,实际上使用PLL(锁相环)通过一个低频信号产生一个高频信号,供给CPU使用 stm32f407一共4个原始时钟源 HSIRC -------- 高速内部RC震荡时钟(16M) HSEOSC -------- 高速外部晶振(4-26M) LSIRC -------- 低速内部RC震荡时钟(32K) LSEOSC ------- 低速外部晶振(32.768K) 2.stm32f407 时钟树 绝大多数的外设挂在AHB总线和APB总线上

CC2541蓝牙学习——串口_1

一笑奈何 提交于 2019-12-24 13:04:10
CC2541有两个串行通信接口,分别是USART0和USART1,它们能够分别运行于异步UART模式或者同步SPI模式。两个USART具体同样的功能,可以设置在单独的I/O引脚。 1.UART模式 UART模式提供异步串行接口,在UART模式中,有2种接口选择方式:2线接口和4线接口。 2线接口,使用RXD、TXD。 4线接口,使用RXD、TXD、RTS和CTS。 I/O外设引脚映射如下图所示: 根据上面的外设I/O引脚映射可知 : UART0对应的外部设置IO引脚关系为:位置1:P0_2----RX P0_3----TX 位置2:P1_4----RX P1_5----TX UART1对应的外部设置IO引脚关系为:位置1:P0_5----RX P0_4----TX 位置2:P1_7----RX P1_6----TX UART模式的操作有以下特点。 8位或者9位负载数据 奇校验、偶校验或者无奇偶校验 配置起始位和停止位电平 配置LSB(最低有效位)或MSB(最高有效位)首先传输 独立接收中断 独立收发DMA触发 奇偶校验和帧检验出错状态 UART模式提供全双工传送,也就是说可以同时收发数据,传送一个UART字节包括1个起始位,8个数据位,1个作为可选的第9位数据或者奇偶校验位,再加上1个或者2个停止位。

STM32之系统滴答定时器

拥有回忆 提交于 2019-12-21 04:09:19
一、SysTick(系统滴答定时器)概述   操作系统需要一个滴答定时器周期性产生中断,以产生系统运行的节拍。在中断服务程序里,基于优先级调度的操作系统会根据进程优先级切换任务,基于时间片轮转系统会根据时间片切换任务。总之,滴答定时器是一个操作系统的“心跳”。   Cortex-M3在内核部分封装了一个滴答定时器--SysTick,在之前的ARM内核通常是不会把定时器做进内核,定时器都是SOC厂商自己制作的外设。显然,Cortex-M3封装了这么一个定时器,对于将操作系统移植到不同SOC厂商生产的Cortex-M3系类MCU上,带来了极大的方便。Cortex-M3内核统一了这样的一个系统滴答定时器,移植操作系统的时候可以使用内核的定时器,而忽略掉不同厂商生产定时器带来的分歧。 二、SysTick control and status register(STK_CTRL)   SysTick的控制是极其简单的,它的控制和状态都汇聚在同一个寄存器STK_CTRL上。   STK_CTRL的每一位的含义英文解释都是很清晰的,不必多说。需要额外讨论的是COUNTFLAG标志位,这个标志位代表的含义是:当计数为0时,也即STK_VAL计数至0时,此标志位置1。   经过笔者一番摸索,对此位有更多的看法。 COUNTFLAG:    1、此位与SysTick的中断无关,不是中断标志位