【STM32基础】中断

问:第六章 存储器映射?表6.1.1   外部中断?

一、基本概念

1.把CPU内部产生的紧急事件叫做异常,比如非法指令(除零)、地址访问越界等;把来自CPU外部的片上外设产生的紧急事件叫做中断,比如GPIO引脚电平变化、定时器溢出等。异常和中断的效果基本 一致,都是暂停当前任务,优先执行紧急事件,因此一般将中断和异常统称为中断。

2.Cortex-M3内核有256种异常和中断,其中编号1~15是系统异常,16~256是外部中断。

3.Cortex-M3内核有一个专门管理中断的外设NVIC(Nested Vectored Interrupt Controller, 嵌套向量中断控制器),通过优先级控制中断的嵌套和调度。NVIC是一个总的中断控制器,无论是来在内核的异常还是外设的外部中断,都由NVIC统一进行管理。NVIC作为在内核里的外设,通过存储器映射的方式访问(表6.1.1)。

所有外设中断都由 NVIC管理,比如USART、ADC、I2C、SPI等。GPIO产生的中断也不例外,但在给NVIC管理之前,还有一 个EXTI(External interrupt/event controller,外部中断/事件控制器)先处理一下。

4.在Cortex-M3中,将优先级拆分为抢占优先级(Preempt Priority)和子优先级(Subpriority),每个中断都需要指定这两级,具有高优先级的中断可以打断低优先级的中断,实现中断嵌套。

5.中断优先级分组:

STM32F103只使用了PRI_n的Bits[7:0]中的Bits[7:4]设置优先级

        cubemx选项:Priority Group(设置抢占优先级的位数) 

        Priority group是选择优先级分组,STM32(更确切地说是contex-M3内核的单片机)使用4个bit位来分组,这里可以设置用几个bit来区分抢占优先级和响应优先级;

        若选择的是3bit用来区分抢占优先级、1bit用来区分响应优先级,则抢占优先级可以选择为0~7,响应优先级可以选择为0~1;数值越小则优先级越高;

        通常中断优先级分组只会设置一次,它针对的是系统中所有的中断,在一开始设定后续不可改。

6.总结中断是否会优先执行依据:首先是抢占先式优先级等级,其次是子优先级等级,只有抢占优先级才可能出现中断嵌套。子优先级只有在抢占优先级相同,同时发生的情况下,子优先级高的方优先。

二、中断编程要点

1.使用 HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup) 函数配置中断优先级分组。一般默 认是 NVIC_PRIORITYGROUP_4 分组 4。(在hal.c中),cubemx重新配置后,在msp.c中

2.使用 HAL_NVIC_SetPriority (IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority) 函 数配置具体外设中断通道的抢占优先级和子优先级。

3.使用 HAL_NVIC_EnableIRQ 函数使能中断请求。 

4.调用该中断跳转的中断回调函数,编写中断服务函数,不可太复杂

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值