STM32——HAL库学习(实物)红外传感器计次,旋转编码器

【投稿赢 iPhone 17】「我的第一个开源项目」故事征集:用代码换C位出道! 10w+人浏览 1.4k人参与

一. 什么是EXTI?

EXTI 的全称是 External Interrupt / Event Controller,即外部中断/事件控制器

你可以把它想象成单片机的一个“哨兵系统”。这个哨兵系统部署在芯片的各个GPIO引脚上。正常情况下,CPU(中央处理器)在“专心致志”地执行主程序。当某个被设置为EXTI的引脚上发生了指定的“敌情”(如电平从高变低)时,哨兵(EXTI)会立刻向CPU报告,CPU就会暂停当前正在执行的任务,转而去处理这个“紧急事件”(执行一个叫做中断服务函数 的特殊程序),处理完毕后,再回到原来的任务继续执行。

二.EXTI的主要特点

1.特点

STM32F103C8T6的EXTI控制器具有以下关键特性:

  • 最多20个中断/事件线:EXTI有20条独立的“通道”,编号为0~19。

  • 每个GPIO引脚都可连接至EXTI:但不是一对一的关系。它是分组的,例如:

    • EXTI0 可以连接到 PA0, PB0, PC0, ... PG0 中的任意一个。

    • EXTI1 可以连接到 PA1, PB1, PC1, ... PG1 中的任意一个。

    • ... 以此类推,直到 EXTI15

    • EXTI16~EXTI19 连接到特定的片上外设,如EXTI16连接到PVD(可编程电压检测器),EXTI17连接到RTC闹钟事件等。

  • 可配置的触发方式

    • 上升沿触发:引脚电平从低变高时触发中断。

    • 下降沿触发:引脚电平从高变低时触发中断。

    • 双边沿触发:只要电平发生变化(上升或下降)就触发中断。

  • 支持软件触发:可以通过软件直接模拟一个中断信号,用于测试。

  • 每个中断线都有独立的中断标志和挂起位:当触发条件满足时,相应的标志位会被置1,即使CPU正在处理其他事情,这个请求也会被“挂起”,等待处理。

  • 可产生中断或事件

    • 中断:目的是通知CPU,让CPU执行中断服务程序。

    • 事件:目的是直接唤醒其他片上外设(如DMA、ADC),而不需要CPU介入,这能进一步降低功耗和提高效率。

2.流程

3. EXTI与NVIC和AFIO的关系

理解这三者的关系至关重要:

  • EXTI:是“哨兵”,负责检测特定GPIO引脚上的事件。

  • AFIO / SYSCFG

    • 在STM32F103中,主要由AFIO管理EXTI的引脚映射。它决定了是PA0、PB0还是PC0等连接到EXTI0这条线上。

    • (注意:在更高级的STM32中,这个功能由SYSCFG管理,但F103是AFIO)。

  • NVIC:是“总指挥部”,负责管理所有中断源的优先级,并最终决定是否、以及何时将中断请求传递给CPU。即使EXTI发出了请求,如果NVIC中没有使能该中断,CPU也不会响应

4.详情

中断流程。

中断优先级。

NVIC的流程

NVIC优先级分组。响应优先级,权限低,他决定多个中断发生时候,谁优先响应。也就是排队

抢占优先级高的可以打断低的抢占优先级进行响应,相当于中断嵌套。也就是插队。

STM32中不存在哪个响应先来,哪个就响应,全都需要进行排队,谁响应优先,谁先响应。

EXTI的基本结构

AFIO的复用I/O口。通过选择一个接到EXTI上。

数据选择器。

这就是我们引脚重映射,把默认复用功能,给变为重定义功能。

EXTI框架图。

或门

与门

触发中断的话会挂起一个中断寄存器,相当于我们的中断标志位了。

用与门控制,相当于开关了。

20/表示有20个通道。

三.代码编写。

1.旋转编码器介绍

我们用的是可以测方向的编码器,它可以产生两个波形,其中一个波形比另一个滞后90°,可以用来我们的方向测定,是正交编码器。主要用来调节音量等等。

硬件电路。

2.对射红外传感器

(1)介绍

我们的连线。

对射红外传感器接线。

(2)CUBE设置

将PB14设置为外部中断模式。

下升沿触发。

这里可以设置优先级。

生成文件

打开keil5

(3)编程

我们只需要根据上面的图片,把我们的NVIC通道打通就可以进行中断了,这里cube可以一键生成

打开这个文件。

找到这个函数。

添加代码,判断中断标志位。

定义变量

判断如果读取到了中断标志位就让我们count++。

返回我们记录的数值。

然后在.h文件中添加我们的函数。

然后回到主函数。

进行显示就会发现我们成功了。

(4)现象

3.旋转编码器

(1)cube设置

全部设置为下降沿。

打开中断。

生成文件并打开

(2)编程

找到我们的EXTI0和EXTI1中断线。

用带符号的count。

传回数。

就可以完成了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值