news 2026/11/2 12:32:55

STM32-OLED显示屏与EXTI外部中断

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32-OLED显示屏与EXTI外部中断

OLED介绍:

有机发光二极管

OLED硬件电路:

4针脚的右边两个针脚提供电源,剩下两个是I2C通信引脚,这里会使用GPIO口模拟I2C通信,因此可以接任意GPIO口。

7针脚也同理,两个供电,其余是SPI通信引脚,如果是GPIO口模拟SPI通信,则可以接任意GPIO

使用OLED中封装的函数在OLED显示屏显示各类型数据:

因为C语言不支持打印二进制因此只能使用OLED中的函数,即使打印也要写成16进制数,因为C语言中不能直接写二进制数字(会被认成10进制数)。

中断系统:

中断介绍:在主程序运行过程中,出现了中断特定触发条件(中断源),使得CPU暂停正在运行的程序,转而去处理中断程序,处理完成后又返回原来的程序继续执行。

中断优先级:当有多个中断源同时申请中断时,CPU 会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源

中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU 再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回

STM32中断:

  • 68 个可屏蔽中断通道,包含 EXTI、TIM、ADC、USART、SPI、I2C、RTC 等多个外设
  • 使用 NVIC 统一管理中断,每个中断通道都拥有 16 个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级

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

NVIC用来统一分配中断优先级和管理中断的,是CPU管理中断的小助手。NVIC有多个输入口可以接多个中断线路,但只有一个输出口根据每个中断的优先级分配中断的先后顺序交给CPU进行运算。

NVIC 优先级分组

  • NVIC 的中断优先级由优先级寄存器的 4 位(0~15)决定,这 4 位可以进行切分,分为高 n 位的抢占优先级和低 4-n 位的响应优先级
  • 抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,抢占优先级和响应优先级均相同的按中断号排队

EXIT介绍:

EXIT外部中断

EXIT可以检测指定的GPIO口的电平变化,当指定的GPIO口发生电平变化时,EXIT立即向NVIC发送中断申请,经过NVIC裁定后即可中断CPU主程序去执行EXIT对应的中断程序。

支持的触发方式:上升沿/下降沿/双边沿/软件触发

支持的GPIO口:所有的GPIO口,但相同的Pin不能同时触发。

EXIT基本结构:

EXTI 共有 16 条中断线,每个 GPIO 端口都有 16 个引脚。AFIO 负责在所有 GPIO 的同一个 Pin 编号里,选择其中一路引脚连接到对应的 EXTI 中断线。

AFIO电路图:

AFIO主要用于引脚复用功能的选择和重定义。

EXTI内部框图

对射式红外传感器计次代码:

根据EXTI基本结构图进行编码。

对外部中断配置的代码:

配置了GPIO,AFIO,EXTI,NVIC。

第一步开启外设时钟,一共四个外设(两个需要打开时钟,两个不需要)用RCC开启GPIO与AFIO外设,因为NVIC是内核外设因此不需要开启时钟。

设置了计数函数与中断函数。(PB14 出现下降沿时中断)

主函数:

旋转编码器计次代码:

也是设置了GPIOB、AFIO、EXTI、NVIC四个外设。

AFIO作用将PB0、PB1映射到EXTI0、EXTI1。EXTI负责检测下降沿并产生中断。

NVIC作用:决定这个中断能不能让CPU相应,以及配置优先级

GetCount()计数函数负责将这一段时间的计数取出来并清零。

两个中断函数通过判断A/B相来判断顺时针还是逆时针,并计数。

主函数代码。

出现的错:

在这里通过两个if来判断A和B的相进而判断是逆时针还是顺时针。

而且应该加上清理中断。否则一直在中断。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/19 7:33:42

一份不该被上传的表:企业合规数据处理的真实案例研究

案例对象:某调味品供应链企业月度商品销售统计表 | 分析视角:数据安全合规 数据分析工程 | 结论先行:合规不是禁止用 AI,而是把「明细」和「模型可见内容」隔开一、背景:默认动作正在变成风险敞口过去两年&#xff0c…

作者头像 李华
网站建设 2026/10/31 12:02:36

Codex 新特性:终于学会主动问我“要不要开工”了

用 Codex 写代码的人大概都经历过这种尴尬:你让它规划一个任务,它在 Plan 模式里把方案列得井井有条,然后……停在那里等你。你看着那份计划,心想“行,那就开始吧”,于是敲下一句“开始实施”。结果它回你一…

作者头像 李华
网站建设 2026/10/31 9:48:32

eNSP实验入门:用Wireshark抓包看懂ICMP与ARP协议

简介:这是一份围绕华为eNSP仿真平台编写的入门实验文档,适合网络工程专业学生、初学者及备战网络类技能竞赛的备赛者使用。文档完整呈现利用eNSP搭建基础网络的核心流程:从设备拖拽、拓扑连线、端口状态检查,到终端主机名与静态IP…

作者头像 李华
网站建设 2026/10/31 21:23:44

基于SpringBoot2与Vue3的预约挂号系统开发实战与部署详解

做这个预约挂号系统的时候,正好赶上前后端分离方案在校园项目里普及,SpringBoot2 配 Vue3 已经成了毕业生做课题的标配组合。整套系统跑下来,从数据库设计、后端接口、前端页面到最终部署,花了大半个月时间。今天把完整的实现过程…

作者头像 李华
网站建设 2026/10/31 7:21:00

PVE 装 Windows XP:用老硬件配置重温经典

前段时间,我陆续在 PVE 上安装了 Debian、Arch Linux、Windows 11、FreeBSD 等系统。折腾到这里,突然产生了一个很单纯的想法:既然虚拟化环境都搭好了,为什么不装一台 Windows XP 怀旧一下?Windows XP 发布于 2001 年&…

作者头像 李华