0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32入门学习笔记之中断架构(上)

jf_78858299 来源:滑小稽笔记 作者:电子技术园地 2023-02-16 09:57 次阅读

3.1 STM32F103中断概述

Cortex-M3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。但STM32并没有使用Cortex-M3内核的全部东西,而是只用了它的一部分。STM32有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。而我们常用的就是这68个可屏蔽中断,但是STM32的68个可屏蔽中断,在STM32F103ZET6中只有60个。

3.2 STM32F103中断优先级

3.2.1 优先级结构

STM32F103的中断分为抢占优先级和响应优先级两种,这两种优先级的顺序是抢占优先级高于响应优先级,假设存在两个事件,那就会存在以下几种可能:

(1)情况1:事件1和事件2的抢占优先级都是1,事件1的响应优先级为1,事件2的响应优先级为2,那么事件1和事件2同时发生的时候,CPU优先处理事件1,然后处理事件2;

(2)情况2:事件1和事件2的响应优先级都是1,事件1的抢占优先级为2,事件2的抢占优先级为1,那么,事件1和事件2同时发生的时候,CPU优先处理事件2,然后处理事件1;

(3)情况3:事件1的响应优先级为1,事件2的响应优先级为2,事件1的抢占优先级为2,事件2的抢占优先级为1,当事件1和事件2同时发生的时候,CPU优先处理事件2,然后处理事件1;

通过上面两种情况,我们可以发现,当抢占优先级一致,谁的响应优先级的数小,谁的优先级就高,中断同时发生的时候CPU就先处理谁;如果抢占优先级不一样,那么无所谓响应优先级,谁的抢占优先级数小,优先级就高,中断同时发生的时候CPU就先处理谁。

STM32F103的抢占优先级和响应优先级各有4级,即0~3,根据乘法原理,也从侧面反映了16级可编程的中断优先级,并且抢占优先级和响应优先级的数量是可以设置的,通过中断分组来配置,中断分组和优先级数量的对应如下表所示。

抢占优先级数量 响应优先级处理
0 0 4
1 1 3
2 2 2
3 3 1
4 4 0

3.2.2 相关寄存器

(1) 中断应用和复位控制寄存器AIRCR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
KEY[15:0]
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
END - GROUP[2:0] - REQ ACT RST

Bit 31~Bit 16:激活代码,写入0x05FA激活寄存器

Bit 15:指示数据的字节序(这只能在重置后更改)

0:表示小尾数

1:表示大字节序

Bit 10~Bit 8:中断优先级分组

Bit 2:请求芯片控制逻辑产生复位

Bit 1:清除所有活动状态信息中的异常

Bit 0:重置Cortex-M3处理器(调试逻辑除外)

(2) 中断使能寄存器组 :ISER

在STM32中,ISER寄存器一共有3个,ISER[0]的0到31位对应中断031,ISER[1]的0到31位对应中断3263,ISER[2]的0到3对应中断64~67,如果需要使能某个中断,必须设置对应的ISER位为1,要清除的话可以设置ICER寄存器组对应位为1,或者对ISER写0,但是对于ICER寄存器组写0是不起作用的。

(3) 中断优先级控制寄存器组 :IP

对于STM32,优先级控制寄存器IP一共有68个,对应着68个中断,每个寄存器的结构都是相同的,如下图所示。

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
PrePriority[1:0] SubPriority[1:0] -

Bit 7~Bit 6:抢占优先级

Bit 5~Bit 4:响应优先级

3.2.3 中断优先级配置函数

/***************************************************

Name :NVIC_Init

Function :设置NVIC

Parameter :

PrePriority :抢占优先级

SubPriority :响应优先级

Channel :中断编号

Group :中断分组 0~4

Return :None

***************************************************/

void NVIC_Init( u8 PrePriority, u8 SubPriority, u8 Channel, u8 Group )

{

u32 temp, temp1 ;

//设置分组

temp1 = ( ~Group )&0x07 ; //取后三位

temp1 <<= 8 ;

temp = SCB->AIRCR ; //读取先前的设置

temp &= 0x0000F8FF ; //清空先前分组

temp |= 0x05FA0000 ; //写入钥匙

temp |= temp1 ;

SCB->AIRCR = temp ; //设置分组

//设置优先级

temp = ( u32 )PrePriority<<( 4-Group ) ;

temp |= SubPriority&( 0x0f>>Group ) ;

temp &= 0x0F ; //取低四位

NVIC->ISER[ Channel/32 ] |= ( 1<

NVIC->IP[ Channel ] |= temp<<4 ; //设置响应优先级和抢断优先级

}

3.3 外部中断EXIT结构

3.3.1 EXIT概述

外部中断/事件控制器由连接线设备中的多达20个边缘检测器或其他设备中的19个边缘检测器组成,用于生成事件/中断请求。每条输入线可以独立配置以选择类型(事件或中断)和相应的触发事件(上升或下降或两者)。每条线也可以独立屏蔽。

对于STM32来说,每一个端口都可以配置为外部中断,根据中断信号的类型都可以单独配置上升沿触发或者下降沿触发,中断服务函数相互独立。

3.3.2 EXIT相关寄存器

(1) 中断屏蔽寄存器 :IMR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
- M19 M18 M17 M16
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
M15 M14 M13 M12 M11 M10 M9 M8 M7 M6 M5 M4 M3 M2 M1 M0

Bit 19~Bit 0:线x上的中断请求配置位

0:禁止输入线x上的中断请求

1:允许输入线x上的中断请求

(2) 上升沿触发选择寄存器 :RTSR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
- R19 R18 R17 R16
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R15 R14 R13 R12 R11 R10 R9 R8 R7 R6 R5 R4 R3 R2 R1 R0

Bit 19~Bit 0:线x上的上升沿触发事件配置位

0:禁止输入线x上的上升沿触发

1:允许输入线x上的上升沿触发

(3) 下降沿触发选择寄存器 :FTSR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
- F19 F18 F17 F16
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
F15 F14 F13 F12 F11 F10 F9 F8 F7 F6 F5 F4 F3 F2 F1 F0

Bit 19~Bit 0:线x上的下降沿触发事件配置位

0:禁止输入线x上的下降沿触发

1:允许输入线x上的下降沿触发

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2270

    文章

    10895

    浏览量

    355751
  • 中断
    +关注

    关注

    5

    文章

    898

    浏览量

    41471
  • Cortex-M
    +关注

    关注

    2

    文章

    229

    浏览量

    29752
收藏 人收藏

    评论

    相关推荐

    STM32单片机学习笔记(8):外部中断

    利用CubMX生成基于32单片机的HAl库工程,然后编写程序在proteus仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门STM32单片机。本项目需要实现的功
    发表于 07-20 15:32 986次阅读
    <b class='flag-5'>STM32</b>单片机<b class='flag-5'>学习</b><b class='flag-5'>笔记</b>(8):外部<b class='flag-5'>中断</b>

    STM32学习笔记14:基本问题,来讨论一下软件架构

    ,systic时钟应用stm32学习教程13:恶搞,两只看门狗STM32学习笔记14:基本问题,来讨论一下软件
    发表于 01-29 09:36

    STM32学习笔记(初学者快速入门)

    STM32学习笔记(初学者快速入门)资料来自网络资源
    发表于 06-11 20:23

    stm32学习之中断事件

    stm32学习之中断事件 相信很多小伙伴们早已在51系列的板子上接触中断,大概的概括便是:正在看电影的你,突然来了快递,你暂停了电影去签收了快递,回来继续看电影这便是一级
    发表于 08-17 07:13

    CubeMX入门STM32 HAL库的学习笔记

    STM32CubeMX是ST官方开发的一款很好用的软件,主要用于STM32系列单片机的硬件驱动层的配置。网上也有一些关于STM32CubeMX的相关教程,对它的相关操作进行说明。从今天起,小柯希望能将自己从CubeMX
    发表于 08-17 06:55

    STM32入门学习笔记 精选资料分享

    STM32入门学习笔记本文为笔者入门学习过程的记录,只是零散的记录了一些个人不太懂得,觉得需要经
    发表于 08-24 07:56

    STM32中断与嵌套快速入门(NVIC)

    STM32中断与嵌套快速入门(NVIC),喜欢的朋友可以下载来学习
    发表于 01-15 17:45 41次下载

    STM32中断与嵌套NVIC快速入门

    STM32 中断与嵌套NVIC 快速入门,喜欢的朋友可以下载来学习
    发表于 01-15 17:45 20次下载

    STM32各模块学习笔记

    STM32个模块学习笔记 目录 STM32笔记之一 中断优先级.................
    发表于 11-30 03:32 3157次阅读

    stm32之中断与外部中断

    前言:1.有51单片机开发经验会比较容易理解中断优先级;2.本篇博文基于STM32F103RCT6芯片和3.5.0标准库编写;3.作为自己学习的一些心得,如有不足之处,还请前辈多多指教;一
    发表于 11-22 13:06 26次下载
    <b class='flag-5'>stm32</b><b class='flag-5'>之中断</b>与外部<b class='flag-5'>中断</b>

    STM32学习笔记--中断系统

    目录:一、STM32中断系统二、NVIC中断管理三、中断配置相关函数一、STM32中断系统
    发表于 12-04 18:36 4次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>--<b class='flag-5'>中断</b>系统

    STM32学习笔记(五)---NVIC

    STM32学习笔记(五)—NVIC文章目录STM32学习笔记(五)---NVIC一、NVIC简介
    发表于 12-04 18:51 16次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>(五)---NVIC

    STM32学习——入门小项目

    STM32学习——入门小项目
    发表于 12-07 17:21 72次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>学习</b>——<b class='flag-5'>入门</b>小项目

    STM32入门学习笔记之中断架构(下)

    Cortex-M3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。但STM32并没有使用
    的头像 发表于 02-16 09:57 890次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>入门</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b><b class='flag-5'>之中断</b><b class='flag-5'>架构</b>(下)

    STM32学习笔记一外部中断

    STM32 的每个 IO 都可以作为外部中断中断输入口。STM32F103 的中断控制器支持 19 个外部
    的头像 发表于 10-24 14:12 1374次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>一外部<b class='flag-5'>中断</b>