STM32中断应用总结

STM32中断应用总结

本文为野火教程的学习笔记。

中断种类

可以参考参考手册中的中断向量表

NVIC

  嵌套向量中断控制器,属于内核外设,管理内核和片上所以外设相关的功能。其功能可以参考内核编程手册
STM32F10xxx Cortex-M3编程手册-英文版 的4.3节
也可从固件库中观察。重要的有两个库文件 core_cm3.hmisc.h
下面是core_cm3.hNVIC_Type 结构体

typedef struct
{
  __IO uint32_t ISER[8];              //中断使能寄存器  
  uint32_t RESERVED0[24];                                
  __IO uint32_t ICER[8];              //中断清除寄存器    
  uint32_t RSERVED1[24];                                 
  __IO uint32_t ISPR[8];              // 中断使能悬起寄存器       
  uint32_t RESERVED2[24];                              
  __IO uint32_t ICPR[8];              // 中断清除悬起寄存器        
  uint32_t RESERVED3[24];                                   
  __IO uint32_t IABR[8];              // 中断有效位寄存器         
  uint32_t RESERVED4[56];                                   
  __IO uint8_t  IP[240];              //中断优先寄存器           
  uint32_t RESERVED5[644];                                    
  __O  uint32_t STIR;                 // 软件触发中断寄存器         
}  NVIC_Type;

misc.h 中有关于 NVIC 的固件库函数
在这里插入图片描述

中断优先级的定义

中断优先级的设定

设定优先级需要使用 NVICIPRx 寄存器。
ARM公式在设计时,优先级编码是8位的,但ST公司只用了其高4位。

优先级的分组

  把前四位分组,分为主优先级和子优先级。先比较主优先级,相同则比较子优先级,相同则比较硬件编码,硬件编码可以在参考手册的中断向量表中查到。
  优先级由SCBAIRCR:PRIGROUP[10:8] 配置。配置的方案可以在misc.h 中找到
在这里插入图片描述具体意思是,配置分组为 NVIC_PriorityGroup_0 时,主优先级被分配0位,子优先级4位。以此类推

中断编程顺序

1.配置外设中断
2.配置中断优先级分组
3.配置 NVIC 寄存器,初始化NVIC_InitTypeDef
4.编写中断服务函数

配置外设中断

要配置外设的中断,还要打开NVIC 的中断使能寄存器。

配置中断优先级分组

优先级由SCBAIRCR:PRIGROUP[10:8] 配置。固件库编程使用 NVIC_PriorityGroupConfig 函数。一般关于NVIC的函数都在 miss.c 中。
在这里插入图片描述

配置NVIC

我们知道有关NVIC的库是 misc ,我们打开头文件,可以看到初始化函数

void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);

其中初始化结构体 NVIC_InitTypeDef 如下。
在这里插入图片描述NVIC_IRQChannel: 用来选择对应的中断类型和端口号,后面详细介绍;
NVIC_IRQChannelPreemptionPriority: 设置主优先级
NVIC_IRQChannelSubPriority: 设置子优先级
NVIC_IRQChannelCmd: 选择开启还是关闭,FuctionalState 类型;

注意第一个 NVIC_IRQChannel 的配置值在 stm32f10x.h 中找出,要对应自己芯片的型号,如指南者是HD

然后调用 NVIC_Init 函数完成配置

编写中断服务函数

函数名称

中断服务函数名称必须和启动文件中一致。启动文件为 startup_stm32f10x_hd.s。如果名称写错,则会执行启动文件中的中断,即无限循环。
在这里插入图片描述

函数放置位置

  为了便于管理,要把所有中断服务函数放在 stm32f10x_it.c文件中。在这个文件中内核的中断都已经写好,外设的中断服务函数要自己写。
  本节中的例子请见STM32中断应用总结

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IN X

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值