STM32学习2
一、OLED
1.1 OLED介绍
OLED(Organic Light Emitting Diode):有机发光二极管
OLED显示屏:性能优异的新型显示屏,具有功耗低、相应速度快、宽视角、轻薄柔韧等特点
0.96寸OLED模块:小巧玲珑、占用接口少、简单易用,是电子设计中非常常见的显示屏模块
供电:3~5.5V,通信协议:I2C/SPI,分辨率:128*64
4针脚:I2C 7针脚:SPI
1.2 OLED驱动函数


二、中断
2.1 中断介绍
中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行。
中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源。
中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回。
2.2 中断执行流程

3.3 中断分类

68个可屏蔽中断通道,包含EXTI、TIM、ADC、USART、SPI、I2C、RTC等多个外设。
使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级。
NVIC就是STM32中用来管理中断分配优先级的。
图中灰色的是内核的中断,其他的是STM32外设中断。
程序中的中断函数,地址是由编译器来分配的是不固定的,但是中断跳转,由于硬件的限制只能跳到固定的地址执行程序,所以为了能让硬件跳到一个不固定的中断函数里,这就需要在内存中定义一个地址的列表,这个列表地址就是固定的中断发生后,就跳到这个固定的地址位置,然后再这个固定的位置,由编译器再加上一条跳转到中断函数的代码,这个中断跳转就可以跳转到任意的位置了,这个中断地址的列表,就叫中断向量表。
3.4 NVIC
3.4.1基本结构
NVIC:嵌套中断向量控制器。
在STM32中,它是用来统一分配中断优先级和管理中断的,NVIC是内核外设。
下图中/n意思是:一个外设可以占用多个中断通道,所以这里由n条线。

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

抢占优先级:可以理解为在医院有病人正在看病,可以直接进去,先给它看
响应优先级:可以理解为可以直接排第一位,下一个就给它看病
3.5 EXTI
3.5.1 介绍
EXTI(Extern Interrupt)外部中断
EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序
支持的触发方式:上升沿/下降沿/双边沿/软件触发
支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断(PA0和PB0不能同时使用)
通道数:16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒
触发响应方式:中断响应/事件响应(中断响应:申请中断,如CPU执行中断函数。事件响应:是STM32对外部中断增加的一种额外的功能,当外部中断检测到电平变化时,正常的流程是选择触发中断,但STM32中,也可以选择触发一个事件,如果选择触发事件,那中断的信号就不会通向CPU,而是通向其他外设,用来触发其他外设操作,比如触发ADC转换,触发DMA等等。)
总结:总段响应是正常流程,引脚电平变化触发中断。事件响应不会触发中断,而是触发别的变化,数以外设之间的联合工作。
通道数有20个,其中16个GPIO_Pin是外部中断的重要功能。
其他四个可以理解为来“蹭网的”,
为什么来蹭网?
因为外部中断有个功能,从低功耗模式的停止模式下唤醒STM32,那对PVD电源电压检测,当电源从电压过低恢复时,就需要PVD借助一下外部中断退出停止模式。对于RTC闹钟,有时候为了省电,RTC定一个闹钟之后,STM32会进入停止模式,等到闹钟响的时候,再唤醒。USB唤醒和以太网唤醒,也是类似的作用。
3.5.2 基本结构

AFIO就是就是一个数据选择器,在前面三个GPIO外设的16个引脚里选择其中一个连接到后面EXTI的通道里,所以相同的Pin不能同时触发中断。
外部中断9-5会触发同一个中断函数,15-10也会触发同一个中断函数。
20条外设触发其他外设,也就是事件响应
3.5.3 AFIO复用IO口

AFIO主要用于引脚复用功能的选择和重定义。
在STM32中,AFIO主要完成两个任务:复用功能引脚重映射、中断引脚选择。
复用功能引脚重映射:把引脚从默认复用功能的引脚换到重定义功能引脚,用AFIO来完成。

3.5.4 EXTI框图

右边输入线,就是20根输入线。
/20就是20根线
对于STM32来说,想要获取的信号是外部驱动的很快的突发信号,比如旋转编码器的输出信息、红外遥控器接收头的输出。
有脉冲过来,STM32立即进入中断函数处理。
三、程序

开启GPIOB和AFIO这个两个外设的时钟,EXTI和NVIC这两个外设的时钟一直处于开启状态,不需要在开启了 。
NVIC是内核的外设,内核的外设都是不需要开启时钟的。
pre-emption priority and subpriority
先占优先级和从占优先级
先占优先级:抢占优先级
从占优先级:响应优先级
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
分组方式整个芯片只能用一种,分组的代码整个工程只需要执行一次就行了,放在模块里要确保每个模块都选的同一个,也可以放在主函数的最开始。
在STM32中,中断函数的名字都是固定的,我们可以在启动文件中查看
中断程序结束后,一定要再调用一下清除中断标志位的函数,如果不清除中断标志位,就会一直申请中断。
中断函数不需要调用,自动执行的
如果同时使用两个中断是9-5,15-10,那中断函数写在一起即可
在中断编程里不要执行耗时过长的代码,中断函数要简短快速
最好不要在中断函数和主函数调用相同的函数或者操作同一硬件
四、库函数
4.1 AFIO库函数
void GPIO_AFIODeInit(void);复位AFIO外设
void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
void GPIO_EventOutputCmd(FunctionalState NewState);
这两个函数用来配置AFIO事件输出功能的。
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);
用来进行引脚重映射,第一个参数选择你要重映射的方式,第二个参数的新的状态。
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
配置AFIO的数据选择器,选择想要的中断引脚。
void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface);
和以太网有关,这个芯片没有以太网外设,用不到。
4.2 EXTI库函数
void EXTI_DeInit(void);
清除EXTI的配置,恢复成上电状态。
void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
用结构体里的参数配置EXTI外设。
void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct);
调用这个函数,可以把参数传递的结构体变量赋一个默认值。
void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line);
软件触发外部中断,调用这个函数,参数给一个指定的中断线,就能软件触发一次外部中断。
FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line);
获取指定的标志位,是否被置1。
void EXTI_ClearFlag(uint32_t EXTI_Line);
对置1 的标志位清除。(清除挂起标志位)
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
获取中断标志位,是否被置1。
void EXTI_ClearITPendingBit(uint32_t EXTI_Line);
清除中断挂起标志位
4.3 NVIC库函数
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
中断分组,参数的中断分组的方式。
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
根据结构体里面指定的参数初始化NVIC。
void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset);
设置中断向量表
void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState);
系统低功耗配置
相关文章:
STM32学习2
一、OLED 1.1 OLED介绍 OLED(Organic Light Emitting Diode):有机发光二极管 OLED显示屏:性能优异的新型显示屏,具有功耗低、相应速度快、宽视角、轻薄柔韧等特点 0.96寸OLED模块:小巧玲珑、占用接口少…...
数据处理: 亲和聚类
Affinity Propagation(亲和传播)是一种基于"消息传递"概念的聚类算法,由Brendan Frey和Delbert Dueck于2007年提出。与K-Means等需要预先指定簇数量的算法不同,Affinity Propagation能够自动确定最佳簇的数量࿰…...
LabVIEW液压系统远程监控与故障诊断
开发了一种基于LabVIEW的远程液压系统监控解决方案,通过先进的数据采集与分析技术,有效提升工程机械的运作效率和故障响应速度。该系统结合现场硬件设备和远程监控软件,实现了液压系统状态的实时检测和故障诊断,极大地提升了维护效…...
Idea中实用设置和插件
目录 一、Idea使用插件 1.Fitten Code智能提示 2.MyBatisCodeHelperPro 3.HighlightBracketPair 4.Rainbow Brackets Lite 5.GitToolBox(存在付费) 6.MavenHelperPro 7.Search In Repository 8.VisualGC(存在付费) 9.vo2dto 10.Key Promoter X 11.CodeGlance…...
安卓处理登录权限问题
在安卓应用中实现登录权限控制,需确保用户登录后才能访问特定功能。以下是分步骤的解决方案: 1. 保存和检查登录状态 使用安全存储保存登录凭证: 推荐使用 EncryptedSharedPreferences 存储敏感信息(如Token、用户ID)…...
Java写数据结构:栈
1.概念: 一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插…...
使用Unity Cache Server提高效率
2021年1月20日19:04:28 1 简介 Unity Cache Server,翻译过来就是Unity缓存服务器 1.1 缓存服务器の官方介绍 Unity 有一个完全自动的资源管线。每当修改 .psd 或 .fbx 文件等源资源时,Unity 都会检测到更改并自动将其重新导入。随后,Unity 以内部格式存储从文件导入的数…...
29个常见的Terraform 面试问题
问题 1:假设您使用 Terraform 创建了一个 EC2 实例,创建完成后,您从状态文件中删除了该条目,那么运行 Terraform Apply 命令时会发生什么? 由于我们已从该状态文件中删除了该条目,因此 Terraform 将不再管…...
机器学习-08-推荐算法-案例
总结 本系列是机器学习课程的系列课程,主要介绍机器学习中关联规则 参考 机器学习(三):Apriori算法(算法精讲) Apriori 算法 理论 重点 MovieLens:一个常用的电影推荐系统领域的数据集 23张图&#x…...
LLM中的N-Gram、TF-IDF和Word embedding
文章目录 1. N-Gram和TF-IDF:通俗易懂的解析1.1 N-Gram:让AI学会"猜词"的技术1.1.1 基本概念1.1.2 工作原理1.1.3 常见类型1.1.4 应用场景1.1.5 优缺点 1.2 TF-IDF:衡量词语重要性的尺子1.2.1 基本概念1.2.2 计算公式1.2.3 为什么需…...
uniapp APP端 DOM生成图片保存到相册
<template> <view class"container" style"padding-bottom: 30rpx;"> <view class"hdbg pr w100 " style"height: 150rpx;"> <top-bar content分享 Back"Back"></top-b…...
Office文件内容提取 | 获取Word文件内容 |Javascript提取PDF文字内容 |PPT文档文字内容提取
关于Office系列文件文字内容的提取 本文主要通过接口的方式获取Office文件和PDF、OFD文件的文字内容。适用于需要获取Word、OFD、PDF、PPT等文件内容的提取实现。例如在线文字统计以及论文文字内容的提取。 一、提取Word及WPS文档的文字内容。 支持以下文件格式: …...
算法——背包问题(分类)
背包问题(Knapsack Problem)是一类经典的组合优化问题,广泛应用于资源分配、投资决策、货物装载等领域。根据约束条件和问题设定的不同,背包问题主要分为以下几种类型: 1. 0-1 背包问题(0-1 Knapsack Probl…...
HXBC编译相关错误
0、Keil MDK报错:Browse information of one or more files is not available----解决方法: 1、使用cubemax生成的工程中,某些引脚自定义了的,是在main.h中,要记得移植。 注意:cubemax生成的spi.c后,在移植的时候,注意hal_driver下面要对应增加hal_stm32H7xxxspi.c …...
Windows 环境下 Apache 配置 WebSocket 支持
目录 前言1. 基本知识2. 实战前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn 原先写过apache的http配置:Apache httpd-vhosts.conf 配置详解(附Demo) 1. 基本知识 🔁 WebSocket 是 HTTP 的升级协议 客户…...
运维概述(linux 系统)
1、运维的基本概念 2、企业的运行模式 3、计算机硬件 运维概述 运维岗位的定义 在技术人员(写代码的)之间,一致对运维有一个开玩笑的认知:运维就是修电脑的、装网线的、背锅的岗位。 IT运维管理是指为了保障企业IT系统及网络…...
C语言 数据结构 【堆】动态模拟实现,堆排序,TOP-K问题
引言 堆的各个接口的实现(以代码注释为主),实现堆排序,解决经典问题:TOP-K问题 一、堆的概念与结构 堆 具有以下性质 • 堆中某个结点的值总是不大于或不小于其父结点的值; • 堆总是一棵完全二叉树。 二…...
MFC文件-写MP4
下载本文件 本文件将创作MP4视频文件代码整合到两个文件中(Mp4Writer.h和Mp4Writer.cpp),将IYUV视频流编码为H264,PCM音频流编码为AAC,写入MP4文件。本文件仅适用于MFC程序。 使用方法 1.创建MFC项目。 2.将Mp4Writer.h和Mp4Wri…...
8.观察者模式:思考与解读
原文地址:观察者模式:思考与解读 更多内容请关注:7.深入思考与解读设计模式 引言 在开发软件时,系统的某些状态可能会发生变化,而你希望这些变化能够自动通知到依赖它们的其他模块。你是否曾经遇到过,系统中某个对象…...
CMake execute_process用法详解
execute_process 是 CMake 中的一个命令,用于在 CMake 配置阶段(即运行 cmake 命令时)执行外部进程。它与 add_custom_command 或 add_custom_target 不同,后者是在构建阶段(如 make 或 ninja)执行命令。ex…...
模型加载常见问题
safetensors_rust.SafetensorError: Error while deserializing header: HeaderTooLarge 问题代码: model AutoModelForVision2Seq.from_pretrained( "/data-nvme/yang/Qwen2.5-VL-32B-Instruct", trust_remote_codeTrue, torch_dtypetorc…...
PyTorch 深度学习实战(37):分布式训练(DP/DDP/Deepspeed)实战
在上一篇文章中,我们探讨了混合精度训练与梯度缩放技术。本文将深入介绍分布式训练的三种主流方法:Data Parallel (DP)、Distributed Data Parallel (DDP) 和 DeepSpeed,帮助您掌握大规模模型训练的关键技术。我们将使用PyTorch在CIFAR-10分类…...
微信小程序通过mqtt控制esp32
目录 1.注册巴法云 2.设备连接mqtt 3.微信小程序 备注 本文esp32用的是MicroPython固件,MQTT服务用的是巴法云。 本文参考巴法云官方教程:https://bemfa.blog.csdn.net/article/details/115282152 1.注册巴法云 注册登陆并新建一个topicÿ…...
1.Vue3 - 创建Vue3工程
目录 一、 基于vue-cli 脚手架二、基于vite 推荐2.1 介绍2.2 创建项目2.3 文件介绍2.3.1 extensions.json2.3.2 脚手架的根目录2.3.3 主要文件 src2.3.3.1 main.js2.3.3.2 App.vue 组件2.3.3.3 conponents 2.3.4 env.d.ts2.3.5 index.html 入口文件2.3.6 package2.3.7 tsconfig…...
AI编写的“黑科技风格、自动刷新”的看板页面
以下的 index.html 、 script.js 和 styles.css 文件,实现一个具有黑科技风格、自动刷新的能源管理系统实时监控看板。 html页面 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name&q…...
11-DevOps-Jenkins Pipeline流水线作业
前面已经完成了,通过在Jenkins中创建自由风格的工程,在界面上的配置,完成了发布、构建的过程。 这种方式的缺点就是如果要在另一台机器上进行同样的配置,需要一项一项去填写,不方便迁移,操作比较麻烦。 解…...
23种设计模式-结构型模式之外观模式(Java版本)
Java 外观模式(Facade Pattern)详解 🧭 什么是外观模式? 外观模式是结构型设计模式之一,为子系统中的一组接口提供一个统一的高层接口,使得子系统更易使用。 就像是酒店前台,帮你处理入住、叫…...
【JavaWeb后端开发03】MySQL入门
文章目录 1. 前言1.1 引言1.2 相关概念 2. MySQL概述2.1 安装2.2 连接2.2.1 介绍2.2.2 企业使用方式(了解) 2.3 数据模型2.3.1 **关系型数据库(RDBMS)**2.3.2 数据模型 3. SQL语句3.1 DDL语句3.1.1 数据库操作3.1.1.1 查询数据库3.1.1.2 创建数据库3.1.1…...
Github 热点项目 Jumpserver开源堡垒机让服务器管理效率翻倍
Jumpserver今日喜提160星,总星飙至2.6万!这个开源堡垒机有三大亮点:① 像哆啦A梦的口袋,支持多云服务器一站式管理;② 安全审计功能超硬核,操作记录随时可回放;③ 网页终端无需装插件࿰…...
第七届传智杯全国IT技能大赛程序设计赛道 国赛(总决赛)—— (B组)题解
1.小苯的木棍切割 【解析】首先我们先对数列排序,找到其中最小的数,那么我们就保证了对于任意一个第i1个的值都会大于第i个的值那么第i2个的值也比第i个大,那么我们第i1次切木棍的时候一定会当第i个的值就变为了0的,第i1减去的应该…...
