江科大/江协科技 STM32学习笔记P9-11

news2024/11/16 2:16:27

文章目录

  • 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列显示字符A
	
	OLED_ShowString(1, 3, "HelloWorld!");	//1行3列显示字符串HelloWorld!
	
	OLED_ShowNum(2, 1, 12345, 5);			//2行1列显示十进制数字12345,长度为5
	
	OLED_ShowSignedNum(2, 7, -66, 2);		//2行7列显示有符号十进制数字-66,长度为2
	
	OLED_ShowHexNum(3, 1, 0xAA55, 4);		//3行1列显示十六进制数字0xA5A5,长度为4
	
	OLED_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暂时不用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1946766.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java包装类型缓存简单探究-Integer为例

文章目录 包装类型缓存自动装箱与valueOf感悟结语 包装类型缓存 包装类型缓存是什么 本文以常用的Integer包装类为例做一个探索,感兴趣可以用类似方法查看其他包装类。 我们都知道它会缓存 -128到127之间的整数Integer对象。 结论大伙都知道。那么我们今天就来探究…

【Android】安卓四大组件之广播知识总结

文章目录 动态注册使用BroadcastReceiver监听Intent广播注册Broadcast Receiver 静态注册自定义广播标准广播发送广播定义广播接收器注册广播接收器 有序广播修改发送方法定义第二个广播接收器注册广播接收器广播截断 使用本地广播实践-强制下线使用ActivityCollector管理所有活…

ubuntu那些ppa源在哪

Ubuntu中的 PPA 终极指南 - UBUNTU粉丝之家 什么是PPA PPA 代表个人包存档。 PPA 允许应用程序开发人员和 Linux 用户创建自己的存储库来分发软件。 使用 PPA,您可以轻松获取较新的软件版本或官方 Ubuntu 存储库无法提供的软件。 为什么使用PPA? 正如…

【JavaEE】Spring Boot 自动装配原理(源码分析)

一. 前言 我们在写Spring Boot的程序代码的时候, 可以注入很多我们没有定义过的Bean.例如: Autowired private ApplicationContext applicationContext; Autowired public DataSourceTransactionManager transactionManager; Autowired public AutowireCapableBeanFactory …

软件开发者消除edge浏览器下载时“此应用不安全”的拦截方法

当Microsoft Edge浏览器显示“此应用不安全”或者“已阻止此不安全的下载”这类警告时,通常是因为Windows Defender SmartScreen或者其他安全功能认为下载的文件可能存在安全风险。对于软件开发者来说,大概率是由于软件没有进行数字签名,导致…

Visual Studio 2022新建 cmake 工程测试 tensorRT 自带样例 sampleOnnxMNIST

1. 新建 cmake 工程 vs2022_cmake_sampleOnnxMNIST_test( 如何新建 cmake 工程,请参考博客:Visual Studio 2022新建 cmake 工程测试 opencv helloworld ) 2. 删除默认生成的 vs2022_cmake_sampleOnnxMNIST_test.h 头文件 3. 修改默认生成的 vs2022_cma…

【屏显MCU】多媒体接口总结

本文主要介绍【屏显MCU】的基本概念,用于开发过程中的理解 以下是图层叠加示例 【屏显MCU】多媒体接口总结 0. 个人简介 && 授权须知1. 三大引擎1.1 【显示引擎】Display Engine1.1.1 【UI】 图层的概念1.1.2 【Video】 图层的概念1.1.3 图层的 Blending 的…

一键解锁:科研服务器性能匹配秘籍,选择性能精准匹配科研任务和计算需求的服务器

一键解锁:科研服务器性能匹配秘籍 HPC科研工作站服务器集群细分领域迷途小书童 专注于HPC科研服务器细分领域kyfwq001 🎯在当今科技飞速发展的时代,科研工作对计算资源的需求日益增长😜。选择性能精准匹配科研任务和计算需求的服…

古籍双层PDF制作教程:保姆级古籍数字化教程

在智慧古籍数字化项目中,很多图书馆要求将古籍导出为双层PDF,并且确保输出双层PDF底层文本与上层图片偏移量控制在1毫米以内。那么本教程带你使用古籍数字化平台,3分钟把一个古籍书籍转化为双侧PDF。 第1步:上传古籍 点批量上传…

前序+中序、中序+后序构造二叉树

https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/ https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/ 前序中序 前序遍历,节点按照 [根左右] 排序。 中序遍历,节点…

JavaEE - Spring Boot 简介

1.Maven 1.1 什么是Maven 翻译过来就是: Maven是⼀个项⽬管理⼯具。基于POM(Project Object Model,项⽬对象模型)的概念,Maven可以通 过⼀⼩段描述信息来管理项⽬的构建,报告和⽂档的项⽬管理⼯具软件。 可以理解为:Maven是一个项目管理工具…

nginx隐藏server及版本号

1、背景 为了提高nginx服务器的安全性,降低被攻击的风险,需要隐藏nginx的server和版本号。 2、隐藏nginx版本号 在 http {—}里加上 server_tokens off; 如: http {……省略sendfile on;tcp_nopush on;keepalive_timeout 60;tcp_nodelay o…

ROS参数服务器增删改查实操Python

ROS参数服务器增删改查实操Python 环境准备参数服务器新增(修改)参数参数服务器获取参数参数服务器删除参数 ROS通信机制包括话题通信、服务通信和参数服务器三种通信方式,各原理及代码实现如下表 功能博客链接说明VScode配置 ROS 环境VScode…

《后端程序猿 · @Value 注释说明》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

基于 HTML+ECharts 实现监控平台数据可视化大屏(含源码)

构建监控平台数据可视化大屏:基于 HTML 和 ECharts 的实现 监控平台的数据可视化对于实时掌握系统状态、快速响应问题至关重要。通过直观的数据展示,运维团队可以迅速发现异常,优化资源配置。本文将详细介绍如何利用 HTML 和 ECharts 实现一个…

Unity3D之TCP网络通信(客户端)

文章目录 概述TCP核心类异步机制 Unity中创建TCP客户端Unity中其它脚本获取TCP客户端接受到的数据后续改进 本文将以Unity3D应用项目作为客户端去连接制定的服务器为例进行相关说明。 Unity官网参考资料: https://developer.unity.cn/projects/6572ea1bedbc2a001ef…

go语言day17 通道channel

Golang-100-Days/Day16-20(Go语言基础进阶)/day18_channel通道.md at master rubyhan1314/Golang-100-Days (github.com) go语言day09 通道 协程的死锁-CSDN博客 channel for range 循环通道对象 单向通道 单项通道常用于函数参数,只是用来限定在函数中只能进行通道…

【Android】广播机制

【Android】广播机制 前言 广播机制是Android中一种非常重要的通信机制,用于在应用程序之间或应用程序的不同组件之间传递信息。广播可以是系统广播,也可以是自定义广播。广播机制主要包括标准广播和有序广播两种类型。 简介 在Android中&#xff0c…

【学一点儿前端】getaddrinfo ENOTFOUND registry.nlark.com“.

问题 今天jenkins打包一个项目,发现报错了 error An unexpected error occurred: "https://registry.nlark.com/xxxxxxxxxx.tgz: getaddrinfo ENOTFOUND registry.nlark.com". 先写解决方案 把yarn.lock文件里面的registry.nlark.com替换为registry.npmmi…

超低功耗ARM Cortex-M33 TZ MCU STM32WBA54、STM32WBA55:通过提升无线性能实现更出色的用户体验

摘要 STM32WBA54、STM32WBA55产品系列同时支持多种无线标准,包括Bluetooth低功耗 5.4(已认证)、Zigbee、Thread以及可用作Thread边界路由器的Matter。 该产品系列具有出色的灵活性和更强的安全性,可帮助开发人员应对不断变化的无…