STM32 | STM32F407ZE中断、按键、灯(续第三天)

上节回顾

STM32 | 库函数与寄存器开发区别及LED等和按键源码(第三天)

一、 中断

中断概念

中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行(面试题)。

STM32外部中断需要注重知识点EXTI与NVIC,STM32所有引脚均可以做为外部中断。

4.1、外部中断/事件控制器 (EXTI)

EXTI 控制器的主要特性如下:
● 每个中断/事件线上都具有独立的触发和屏蔽
● 每个中断线都具有专用的状态位
● 支持多达 23 个软件事件/中断请求
● 检测脉冲宽度低于 APB2 时钟宽度的外部信号。有关此参数的详细信息,请参见
STM32F4xx 数据手册的电气特性部分。

引脚中断线

上升沿:数字电路中,数字电平从低电平(数字“0”)变为高电平(数字“1”)的那一瞬间(时刻)叫作上升沿。

下降沿:数字电路中,数字电平从高电平(数字“1”)变为低电平(数字“0”)的那一瞬间叫作下降沿。

4.2 NVIC

嵌套向量中断控制器 (NVIC)

NVIC 特性
嵌套向量中断控制器 NVIC 包含以下特性:
● STM32F405xx/07xx 和 STM32F415xx/17xx 具有 82 个可屏蔽中断通道, STM32F42xxx
和 STM32F43xxx 具有多达 86 个可屏蔽中断通道(不包括 Cortex™-M4F 的 16 根中
断线)
● 16 个可编程优先级(使用了 4 位中断优先级)
● 低延迟异常和中断处理
● 电源管理控制
● 系统控制寄存器的实现
嵌套向量中断控制器 (NVIC) 和处理器内核接口紧密配合,可以实现低延迟的中断处理和晚
到中断的高效处理。

NVIC优先级分为抢占优先级与响应优先级。

数字越小,优先级别越高

优先级分组

抢占优先级 & 响应优先级区别:  抢占优先级 > 响应优先级

  • 高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。

  • 抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。

  • 抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。

  • 如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;

例:

假定设置中断优先级组为2,然后设置中断3(RTC中断)的抢占优先级为2,响应优先级为1。中断6(外部中断0)的抢占优先级为3,响应优先级为0。中断7(外部中断1)的抢占优先级为2,响应优先级为0。

中断7>中断3>中断6。

4.3外部中断配置流程

外部中断配置流程要添加的库函数:stm32f4xx_exti.c和stm32f4xx_syscfg.c

参考库函数案例

1、理解按键原理

KEY0 连接PA0,选择下降沿触发

2、设置NVIC分组

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);

3、使能SYSCFG及GPIOA时钟: 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

4、 初始化IO口为输入。

GPIO_Init();

5、设置IO口与中断线的映射关系。

void SYSCFG_EXTILineConfig();

6、初始化线上中断,设置触发条件等。

EXTI_Init();

7、配置中断分组(NVIC),并使能中断。

NVIC_Init();

8、 编写中断服务函数。

EXTIx_IRQHandler();

9、清除中断标志位

EXTI_ClearITPendingBit();

五、

相关推荐

  1. 什么是中断STM32F407中断处理

    2024-03-14 05:44:07       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-14 05:44:07       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-14 05:44:07       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-14 05:44:07       87 阅读
  4. Python语言-面向对象

    2024-03-14 05:44:07       96 阅读

热门阅读

  1. ChatGPT-4 VS 文心一言4.0

    2024-03-14 05:44:07       42 阅读
  2. STM32/GD32——CAN协议

    2024-03-14 05:44:07       42 阅读
  3. 安卓基础面试题

    2024-03-14 05:44:07       36 阅读
  4. OpenCV-图像基础处理

    2024-03-14 05:44:07       40 阅读
  5. JUNIT5+Mockito单元测试

    2024-03-14 05:44:07       39 阅读
  6. LeetCode_27_简单_移除元素

    2024-03-14 05:44:07       45 阅读
  7. 【Educoder数据挖掘实训】相似度与相异度

    2024-03-14 05:44:07       35 阅读
  8. 在阿里云上配置开放端口的详细教程

    2024-03-14 05:44:07       45 阅读
  9. 基于qt和css的MP3音乐播放器引擎开发

    2024-03-14 05:44:07       34 阅读
  10. 分布式ID(8):分布式ID生成方法

    2024-03-14 05:44:07       40 阅读
  11. .NET中使用Redis大全

    2024-03-14 05:44:07       33 阅读
  12. volatile关键字用处和场景?

    2024-03-14 05:44:07       37 阅读