江科大/江协科技 STM32学习笔记P9-11
文章目录
- OLED
- 1、OLED硬件
- main.c
- EXTI外部中断
- 1、中断系统
- 2、中断执行流程图
- 3、STM32中断
- 4、中断地址的作用
- 5、EXTI
- 6、EXTI基本结构
- 7、AFIO复用IO口
- 8、EXTI框图
- 或门和与门
- 9、旋转编码器介绍
- 10、硬件电路
OLED
1、OLED硬件
SCL和SDA是I2C的通信引脚,需要接在单片机I2C通信的引脚上,在这里的驱动程序用的是GPIO口模拟的I2C通信,所以这两个端口可以接在任意的GPIO口上。
main.c
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "OLED.h"int main(void)
{/*模块初始化*/OLED_Init(); //OLED初始化/*OLED显示*/OLED_ShowChar(1, 1, 'A'); //1行1列显示字符AOLED_ShowString(1, 3, "HelloWorld!"); //1行3列显示字符串HelloWorld!OLED_ShowNum(2, 1, 12345, 5); //2行1列显示十进制数字12345,长度为5OLED_ShowSignedNum(2, 7, -66, 2); //2行7列显示有符号十进制数字-66,长度为2OLED_ShowHexNum(3, 1, 0xAA55, 4); //3行1列显示十六进制数字0xA5A5,长度为4OLED_ShowBinNum(4, 1, 0xAA55, 16); //4行1列显示二进制数字0xA5A5,长度为16//C语言无法直接写出二进制数字,故需要用十六进制表示while (1){}
}
EXTI外部中断
1、中断系统
2、中断执行流程图
在中断执行前会对程序的现场进行保护,中断执行后还原现场。
右边有中断函数,中断函数不需要我们调用,由硬件自动调用。
3、STM32中断
4、中断地址的作用
程序中的中断函数,它的地址是由编译器来分配的,是不固定的,但是中断跳转由于硬件的限制只能跳转到固定的地址执行程序,为了硬件能跳转到一个不固定的中断函数里,需要在内存中定义一个地址列表,这个列表地址是固定的,中断发生后就跳到这个固定位置,然后在这个固定位置,由编译器再加上一条跳转到中断函数的代码,这样中断跳转就可以跳转到任意位置了。说人话就是中断跳转认的固定地址由编译器担保,编译器对外用固定地址,对内自己再找地址存,类似中断向量表。
NVIC基本结构
在STM32中用来统一分配中断优先级和管理中断,NVIC是一个内核外设。为什么需要NVIC?因为STM32的中断非常多,如果都接到CPU上,CPU需要引出很多线,如果很多中断同时申请,或者中断很多产生了拥堵,难处理,所以需要NVIC。NVIC有很多输入口,只有一个输出口,NVIC根据每个中断的优先级分配中断的先后顺序,之后通过输出口让CPU处理中断。
NVIC优先级分组
类比医生看病,响应优先级高的可以等医生看完这个病人后优先看病,抢占优先级高的直接让正在看病的病人等着自己先看。
当抢占优先级和响应优先级均相同时,按上上图中表中的优先级顺序数字来排队,数字小的优先排队
5、EXTI
引脚电平变化,申请中断,上升沿,电平从低到高触发中断,下降沿,高到低触发中断,软件触发是引脚不变程序里的代码触发中断。
相同的Pin不能同时触发中断的意思是PA1、PB1、PC1这样的只能选1个作为中断引脚,所以如果有多个中断引脚,要选不同Pin的引脚,比如PA6和PA7、PA9和PB15这样的。
16个GPIO_Pin是外部中断的主要功能,后面四个是来外部中断“蹭网”的,为什么呢?因为外部中断有从低功耗模式的停止模式下唤醒STM32的功能,对于PVD电源电压监测,当电源从电压过低恢复时,需要PVD借助一下外部中断退出停止模式,对于RTC闹钟来说,有时为了省电,定一个闹钟后STM32进入停止模式,等到闹钟响的时候再唤醒,也需要借助外部中断。
中断响应:申请中断,让CPU执行中断函数。事件响应:当外部中断检测到引脚电平变化时,正常的流程是选择触发中断,但在STM32中也可以选择触发一个事件,如果触发事件那外部中断的信号就不通向CPU了,而是通向其他外设,用来触发其他外设的操作,比如触发ADC转化、触发DMA等。
6、EXTI基本结构
每个GPIO外设都有16个引脚,在AFIO中进行选择后接到EXTI边缘检测及控制电路,与下面4个蹭网的一起,经过EXTI电路后分为了两种输出,上面一直到ETH都是接NVIC用来触发中断,注意外部中断的9-5和15-10分到一个通道里,减少通道资源占用,也就是9-5触发同一个中断函数,编程时,在这个两个中断函数中需要再根据标志位来区分到底是哪个中断进来的。下面的20条输出线接到其他外设进行事件响应。
7、AFIO复用IO口
PA0、PB0…通过数据选择器接到EXTI0,这就清楚了为什么相同的Pin不能同时触发中断。
8、EXTI框图
输入线进入边沿检测电路,在上面的上升沿寄存器和下降沿寄存器选择触发方式,接着触发信号进入或门的输入端,通过或门后触发信号兵分两路,上面触发中断,下面触发事件。触发中断首先会置一个挂起寄存器,相当于中断标志位,读该寄存器可判断出是哪个通道触发的中断,如果寄存器置1就会继续向左走,和中断屏蔽寄存器共同进入一个与门,然后进NVIC中断控制器,这里的与门是开关的作用,只有中断屏蔽寄存器给1时才有可能让触发信号继续走。再看下面的触发事件的输出部分,首先是一个事件屏蔽寄存器进行开关控制,最后通过一个脉冲发生器到其他外设,脉冲发生器的作用是给一个电平脉冲,用来触发其他外设的动作。
或门和与门
或门一个为1则为1,与门一个为0就是0。
9、旋转编码器介绍
转动旋转编码器产生脉冲波形,信号突发,STM32不知道什么时候产生,同时是外部驱动,STM32只能被动读取,最后这个信号非常快,STM32稍晚一点读取就会错过很多波形。对于这种情况,考虑外部中断。
按键虽然也是外部驱动的突发事件,但外部中断不好处理按键抖动和松手检测的问题,对于按键来说,它的输出波形也不是转瞬即逝的,要求不高可以在主程序中循环读取,或定时器中断读取。
内部用金属触点进行通断,是一种机械触点式编码器,内侧的左右触电都接中间的C引脚,外侧的触电左接A引脚,右接B引脚,中间的圆的金属片是一个按键,可以按下,上面两根线引出。
右边是编码盘,是一系列金属触点,在旋转时依次通断两边的触点,还需注意金属盘的位置是经过设计的,能让两侧触点的通断产生一个90度的相位差,最终配合一下外部电路,两个输出AB就会输出如下,当正转时左边A相引脚输出一个方波信号,同时右边的B相引脚输出一个和它相位相差90度的波形,这种相位相差90度的波形叫正交波形,可以测方向,这就是单相输出和两相正交输出的区别。
我们用到的这种触点接触形式的旋转编码器适合调节音量但不适合测电机,另外几种非接触的形式可以用于电机测速。
10、硬件电路
编码器内部两个触点在旋转轴旋转时以相位相差90度的方式交替导通,需要配合外围电路输出高低电平,左图左下接10K的上拉电阻,默认不旋转时上拉为高电平,通过R3输出到A端口的也为高电平。当触电导通时,接到GND,低电平。R3是输出限流电阻,防止模块引脚电流过大,C1是输出滤波电容,可以防止输出信号抖动。
右边AC接两个引脚,C暂时不用。
相关文章:

江科大/江协科技 STM32学习笔记P9-11
文章目录 OLED1、OLED硬件main.c EXTI外部中断1、中断系统2、中断执行流程图3、STM32中断4、中断地址的作用5、EXTI6、EXTI基本结构7、AFIO复用IO口8、EXTI框图或门和与门 9、旋转编码器介绍10、硬件电路 OLED 1、OLED硬件 SCL和SDA是I2C的通信引脚,需要接在单片机…...

【培训通知】成为Power BI数据分析可视化实战第一人,加入3天直播即可
Power BI数据分析可视化实战课程培训是一门旨在提升学员在数据分析与可视化领域能力的专业课程。以下是对该培训课程的详细介绍: 一、课程概述 Power BI 是一种业务分析服务,能够提供深入的见解,帮助用户实现快速、明智的决策。该课程通过实…...

24暑假算法刷题 | Day22 | LeetCode 77. 组合,216. 组合总和 III,17. 电话号码的字母组合
目录 77. 组合题目描述题解 216. 组合总和 III题目描述题解 17. 电话号码的字母组合题目描述题解 77. 组合 点此跳转题目链接 题目描述 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输…...

一篇文章告诉你对讲机为什么不能被手机取代的7个原因
在智能时代,手机几乎无处不在,涵盖了从基本通信到多媒体娱乐的一切功能。然而,即使在这种情况下,对讲机仍然没有被完全取代。这不仅仅是出于怀旧或专业需求,还有许多实质性的原因使得对讲机在特定领域和情况下仍然保持…...
LION论文阅读
一、论文主要出发点 3D目标检测的性能受限于3D卷积的局部感受野。 Transformer在3D检测领域效果很好,但由于算力限制,已有的工作在pillar内,或将voxel分组在组内进行特征交互,阻碍了他们捕捉更远程的依赖关系。 线性RNN算子的计…...

在Android上实现汉字笔顺动画效果——HanZiWriter
序,万般皆是命,半点不由人。 Hanzi Writer 是 javascript 免费开源库,根据汉字书写时按照笔画顺序的特征,可以播放正确笔画顺序的描边动画和练习测试。支持简体字和繁体字。可以让全球用户能够通过手绘模仿的方式来学习和练习书写…...

黑马头条vue2.0项目实战(一)——项目初始化
1. 图标素材(iconfont简介) 制作字体图标的工具有很多,推荐使用:iconfont-阿里巴巴矢量图标库。 注册账户 创建项目 可以根据项目自定义 class 前缀 上传图标到项目 生成链接,复制 css 代码,在项目中使用…...
Unity Shader动画:用代码绘制动态视觉效果
在Unity中,Shader是运行在GPU上的小程序,用于控制顶点和像素的渲染过程。通过编写自定义Shader,开发者可以创造出各种令人惊叹的动画效果,从简单的颜色变化到复杂的流体模拟。本文将探讨如何使用Unity Shader来实现动画效果。 Sh…...

智税集成2.0生成凭证
:::info 💡 整体业务流程 从A9服务器中取数,生成列表数据,写入到对方oracle数据库中。 ::: 项目关键点 1.连接数据库 左连接连接本地SQLserver数据库、右连接要链接A9开票服务器的数据库然后设想用SQLserver 自带的外部连接来连接oracle数据…...
B4005 [GESP202406 四级] 黑白方块 【暴力枚举】【前缀和】
#include<bits/stdc.h> using namespace std; int n,m,ans,tmp; char mp[20][20]; int cheak(int a,int b,int c,int d){//a<c b<dint cnt0;//枚举矩阵中的每个点 for(int ia;i<c;i)for(int jb;j<d;j)if(mp[i][j]1) cnt;//统计黑格的个数 return 2*cnt(c-a1…...

深度学习趋同性的量化探索:以多模态学习与联合嵌入为例
深度学习趋同性的量化探索:以多模态学习与联合嵌入为例 参考文献 据说是2024年最好的人工智能论文,是否有划时代的意义? [2405.07987] The Platonic Representation Hypothesis (arxiv.org) arxiv.org/abs/2405.07987 趋同性的量化表达 …...
决策树与随机森林:比较与应用场景分析
决策树与随机森林:比较与应用场景分析 引言 决策树和随机森林是机器学习中广泛使用的两种算法,因其简单性和强大的功能而被广泛采用。决策树是一种树形结构的决策模型,易于理解和解释。随机森林则是通过集成多棵决策树来提高预测性能的模型…...
C#用Aspose.Cells导出Excel,.NET导出Excel
ASP.NET MVC 控制器里面Action处理,下载文件,输出文件流 public async Task<ActionResult> ExportNewsAuthorFee(string deptId, DateTime? startDate, DateTime? endDate){if (startDate null){startDate DateTime.Parse(DateTime.Now.Year …...

天猫番茄品类TOP1,复购率超40%,「一颗大」如何策划极致产品力?
桔子要买什么品牌?桃子买什么品牌?土豆买什么品牌?过去人们购买农产品几乎没有品牌意识。但近年来可能某些人买猕猴桃时会考虑佳沛,这是一个在全球达到30%猕猴桃市场的新西兰品牌。与此类似,一个国产品牌「一颗大™」正…...

Docker搭建私有仓库harbor(docker 镜像仓库搭建)
Harbor介绍 Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的Docker Registry管理项目…...

面试题:MySQL 索引
1. 谈一下你对于MySQL索引的理解?(为什么MySQL要选择B+树来存储索引) MySQL的索引选择B+树作为数据结构来进行存储,使用B+树的本质原因在于可以减少IO次数,提高查询的效率,简单来说就是可以保证在树的高度不变的情况下存储更多的数据: IO效率的提高:在MySQL数据库中,…...
云计算day13
一、Git 概述 Git 是一种分布式版本控制系统,用于跟踪和管理代码的变更。它是由 Linus Torvalds 创建的,最初被设计用于 Linux 内核的开发。Git 允许开发 人员跟踪和管理代码的版本,并且可以在不同的开发人员之间进行协作。 Github 用的就…...

2024年孝感中级职称报名开始了吗?
2024年孝感中级职称申报终于开始了,之前参加过水测的小伙伴们,开始准备评审了 2024年孝感本批次申报时间:中级、初级职称网上申报时间:2024年8月1日至8月31日。 注意:个人通过“湖北省职称评审管理信息系统”申报,须先…...

RAG技术之Router
Router有什么用? 在RAG应用中,Router可以帮助我们基于用户的查询意图来决定使用何种数据类型或数据源,比如是否需要进行语义检索、是否需要进行text2sql查询,是否需要用function call来进行API调用。 Router也可以根据用户的查询…...
linux系统通过修改sudo文件使普通用户拥有类似root用户权限
说明:普通用户要想拥有root权限,如果不在sudo文件里配置就算把该用户加到wheel组(root用户所在的组)也不行。 要想通过在命令前加上sudo使得该用户以root权限执行命令,需要修改/etc/sudoers文件。 (如果通…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...

手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...

基于单片机的宠物屋智能系统设计与实现(论文+源码)
本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢,连接红外测温传感器,可实时精准捕捉宠物体温变化,以便及时发现健康异常;水位检测传感器时刻监测饮用水余量,防止宠物…...

二叉树-144.二叉树的前序遍历-力扣(LeetCode)
一、题目解析 对于递归方法的前序遍历十分简单,但对于一位合格的程序猿而言,需要掌握将递归转化为非递归的能力,毕竟递归调用的时候会调用大量的栈帧,存在栈溢出风险。 二、算法原理 递归调用本质是系统建立栈帧,而非…...

初探用uniapp写微信小程序遇到的问题及解决(vue3+ts)
零、关于开发思路 (一)拿到工作任务,先理清楚需求 1.逻辑部分 不放过原型里说的每一句话,有疑惑的部分该问产品/测试/之前的开发就问 2.页面部分(含国际化) 整体看过需要开发页面的原型后,分类一下哪些组件/样式可以复用,直接提取出来使用 (时间充分的前提下,不…...

虚拟机网络不通的问题(这里以win10的问题为主,模式NAT)
当我们网关配置好了,DNS也配置好了,最后在虚拟机里还是无法访问百度的网址。 第一种情况: 我们先考虑一下,网关的IP是否和虚拟机编辑器里的IP一样不,如果不一样需要更改一下,因为我们访问百度需要从物理机…...
Asp.net Core 通过依赖注入的方式获取用户
思路:Web项目中,需要根据当前登陆的用户,查询当前用户所属的数据、添加并标识对象等。根据请求头Authorization 中token,获取Redis中存储的用户对象。 本做法需要完成 基于StackExchange.Redis 配置,参考:…...

springboot启动mapper找不到方法对应的xml
数据源配置 目录结构 idea中mapper.java 可以找到对应的mapper.xml文件 启动却找不到 因为mapper.db1会被识别为文件名 而非目录结构 调整为这种...