这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 电源与模拟 » 关于STM32中断知识

共6条 1/1 1 跳转至

关于STM32中断知识

工程师
2020-01-19 14:40:20     打赏
1.1 中断的理解1.1.1 中断概念程序正在执行,突然有外部信号或者内部信号打断正在执行的程序,需要执行该事件,执行完后再回到当前打断的位置继续往下执行程序的过程称为中断
例如:正在写代码      --   程序正在执行微信信息        --   事件发生    --> 中断请求看微信信息      --   执行事件    --> 中断执行继续写代码      --   继续执行代码 --> 中断返回

1.1.2 中断源的理解打断正在执行程序的事件称为中断源。1.1.3 中断的意义While(!(USART1->SR & (1 << 5)));   rec = USART1->DR;可以节省CPU的内存。中断满足条件:快进快出1.2 NVIC的介绍1.2.1 NVIC的概述NVIC:全称:嵌套向量中断控制器。 它就是一个控制器,控制什么?控制中断。         已经内嵌在Cortex-M内核中。NVIC的中断架构  -- M3-M4权威指南 第7章》
一共可以支持256个中断,其中16个内部中断,240个外部中断。 《权威指南英文第7章》


1.2.2 NVIC中断优先级 
1.2.3 NVIC中断优先级的分类分类:人为优先级  自然优先级人为优先级  抢占优先级  响应优先级抢占优先级: 不同等级间可以嵌套,高优先级可以抢占低优先级,优先级等级编号越小优先级高越高。响应优先级: 不同等级间不可以嵌套,响应高优先级的事件,优先级等级编号越小优先级高越高。自然优先级:NVIC内部给所有中断分配的中断序列号。          当抢占优先级和响应优先级相同的中断源,同时发生了中断,CPU优先执行自然优先级高的中断。中断等级数字越小,优先级越高1.2.4 NVIC优先级分组RAM公司利用8个位来管理人为优先级,用3个位管理优先级等级编码。0组   用8个位管理响应优先级,等级范围:0~255, 等级编码:0x071组   用7个位管理响应优先级,等级范围:0~127                   1个位管理抢占优先级,等级范围:0~1, 等级编码:0x062组   用6个位管理响应优先级,等级范围:0~63                   2个位管理抢占优先级,等级范围:0~3, 等级编码:0x053组   用5个位管理响应优先级,等级范围:0~31                   3个位管理抢占优先级,等级范围:0~7, 等级编码:0x044组   用4个位管理响应优先级,等级范围:0~15                  4个位管理抢占优先级,等级范围:0~15, 等级编码:0x035组   用3个位管理响应优先级,等级范围:0~7                  5个位管理抢占优先级,等级范围:0~31, 等级编码:0x026组   用2个位管理响应优先级,等级范围:0~3                  6个位管理抢占优先级,等级范围:0~63, 等级编码:0x017组   用1个位管理响应优先级,等级范围:0~1                     7个位管理抢占优先级,等级范围:0~127, 等级编码:0x00注意:Conter-M4最大支持256个中断入口,但是最大只支持128级中断嵌套。        并且一个工程程序中只能有一种优先级分组,确定了分组,实际上就是确定了各个优先级的等级数量。分组编号SCB->AIRCR[10:8]抢占优先级        等级范围响应优先级        等级范围00x0700Bit[0:7]0~25510x06Bit[7]0~1Bit[0:6]0~12720x05Bit[7:6]0~3Bit[0:5]0~6330x04Bit[7:5]0~7Bit[0:4]0~3140x03Bit[7:4]0~15Bit[0:3]0~1550x02Bit[7:3]0~31Bit[0:2]0~760x01Bit[7:2]0~63Bit[0:1]0~370x00Bit[7:1]0~127Bit[0]0~11.1 STM32F4xx中断介绍ST公司利用4个位来管理人为优先级,用3个位管理优先级等级编码NXP公司利用5个位来管理人为优先级,用3个位管理优先级等级编码0组 用4个位管理响应优先级,等级范围:0~15, 等级编码:0x071组 用3个位管理响应优先级,等级范围:0~7       1个位管理抢占优先级,等级范围:0~1, 等级编码:0x062组 用2个位管理响应优先级,等级范围:0~3       2个位管理抢占优先级,等级范围:0~3, 等级编码:0x053组 用1个位管理响应优先级,等级范围:0~1       3个位管理抢占优先级,等级范围:0~7, 等级编码:0x044组  用4个位管理抢占优先级,等级范围:0~15,等级编码:0x031.1.1 STM32F40xx中断优先级的库函数core_cm4.h的文件中找对应的库函数1. void NVIC_SetPriorityGrouping(uint32_t PriorityGroup)  -- 14351)函数功能:设置优先级分组2)形参:优先级编码例如:设置优先级分组为第2NVIC_SetPriorityGrouping(0x05);  //NVIC_SetPriorityGrouping(7-2);
2.uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)   --- 15921)函数功能:设置具体的等级范围编码2)形参:PriorityGroup:优先级编码        PreemptPriority:抢占优先级等级编码         SubPriority:响应优先级编码3)返回值:具体的等级编码
3.void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -- 15501)函数功能:设置中断源优先级2)形参:IRQn:中断源的优先级  -- stm32f4xx.h 中查找             priority 具体的优先级等级编码
4.void NVIC_EnableIRQ(IRQn_Type IRQn) --- 14671)函数功能:使能具体的中断源2)形参:具体的中断源
5.void NVIC_DisableIRQ(IRQn_Type IRQn) -- 14801)函数功能:禁止具体中断源2)形参:具体的中断源
1.2 中断服务函数中断需要执行的事件。
注意:遵循原则:快进快出   flag=1   IF(flag == 1)
Void 中断服务函数名(void){1.  清标志位  2. 中断需要执行的事件}注:中断服务函数名在 startup_stm32f40_41xxx.s文件中找     1.3 中断编写流程1. 中断源初始化 -- 在没有用中断时怎么初始化就怎么初始化2. 使能对应的中断 -- 接收中断3. 配置NVIC  -- 例如第2   uint32_t  Priority;1) NVIC_SetPriorityGrouping(7 - 2);2) Priority =  NVIC_EncodePriority (7-2,  1 , 2) ;3) NVIC_SetPriority(USART1_IRQn, Priority );4) NVIC_EnableIRQ(USART1_IRQn) 4. 使能串口5. 编写中断服务函数1.3.1 实验1. 串口助手发送数据,MCU接收数据,MCU接收到的数据再返回给串口助手2. 在串口助手中发送字符串,MUC接收字符串
如果发送"LED_ON#", MCU接收后点亮所有LED灯,如果发送"LED_OFF#", 关闭所有LED灯,如果发送错误,则返回”指令错误,请重新发送”如果错误次数超过3次,则返回“错误超过3次,请报警!”,响蜂鸣器





关键词: STM32     中断     知识    

工程师
2020-01-19 14:44:36     打赏
2楼

学习   谢谢分享  


助工
2020-02-26 10:50:10     打赏
3楼

学习   谢谢分享


菜鸟
2020-02-26 13:53:50     打赏
4楼

谢谢提供~~~


工程师
2020-02-26 21:29:15     打赏
5楼

多谢分享


工程师
2020-02-27 21:34:42     打赏
6楼

很棒的说明


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]