当前位置: 首页 > news >正文

【STM32】外部时钟|红外反射光电开关

1.外部时钟

单片机如何对外部触发进行计数?先看一下内部时钟,内部时钟是接在APB1和APB2时钟线上的,APB1,APB2来自stm32单片机内部的脉冲信号,也叫内部时钟。我们用来定时。同样我们可以把外部的信号接入单片机,来对其进行计数功能呢?
在这里插入图片描述
这个GPIO口的数据就是外部的信号,当时为了保证稳定性,而是采用下面这种做法
在这里插入图片描述
我们知道每一个定时器都有四个输入通道TI1 ~TI4,而TI3 ~TI4不接入触发控制器,也就先不说,对于TI1和TI2对外部输入信号会做滤波处理,以及边沿检测,TI1FP1和TI2FP2既可以选择是上升沿,也可以下降沿触发,也可以双边沿触发,而TI1_ED只能双边沿触发,以及还有一个外部触发器单独的,ETR需要经过极性选择,边沿检测,预分频和输入滤波,边沿检测只能检测到上升沿,但是极性选择可以翻转电平,所以说既能检测高电平,也能检测到低电平,由于ETR输入到触发器的信号只能是内部时钟频率的1/4,所以我们可以调节预分频器改变,输入滤波的话是会有一定的抖动,而抖动的话,时间不会太长,所以我们可以根据一定频率的采样信号来进行采样,N次采样后,这N次采样到的电平是一样的,就说明不是抖动,因为抖动时间不会太长,所以还没有达到N次就出现电平不一样,来进行滤波.
触发器会在TI1FP1和TI2FP2和TI1_ED和ETR中选择一个信号进行控制,也被称为外部时钟模式1,而在ETR输入滤波后面也会直接接入到触发控制器,不借用从模式控制器

2.红外反射光电开关原理

在这里插入图片描述
VCC和GND来给模块供电,类似蓝色的灯泡用来发射红外光,而黑色的小灯泡用来接收红外光,黑色小灯泡检测出来的红外光强度以模拟量的形式输出到AO口,当接收的红外光强度很强(灯泡前有物体)时,对应的模拟量电压就越小,当接收红外光强度很弱时(灯泡前有黑色物体时或没有物体时),对应模拟量的电压就越大。
当接收红外光强度很强时,指示灯就会亮。
很强很弱的区分是有一个阈值,这个阈值可以由该模块上的一个电位器来调节,大于该阈值说明接收红外光强度低,但是AO模拟量电压大。
我们会用到他的DO引脚,当AO的电压大于阈值时,DO输出高电平,当AO电压小于阈值时,DO输出低电平。
总结:当灯泡前有物体,DO输出低电平,灯泡前有黑色物体时或没有物体时,DO输出高电平。

3.使用

我们可以将DO引脚当做ETR外部输入的信号,然后通过外部时钟模式1来对其脉冲来计数,将计数的结果打印在屏幕上。
注意主频时钟频率不要选择太大,因为滤波的时候,他的采样频率适合主频时钟频率有关系的,主频频率越大的话,采样频率就越大,相同的采集次数,假如说会采集5次,频率越大就是更小的时间间隔采集一次,这样有的抖动也就会逃脱滤波器的滤波。
在这里插入图片描述
定时器2的ETR是在PA0上,所以将DO引脚接在单片机的PA0引脚即可
在这里插入图片描述
这里的滤波要设置15,要不然等一下会在黑白交替的时候会有好多抖动,如果不滤波的话,这些抖动也会算在计数中。

#include <stdio.h>
#include "string.h"
#include "oled.h"
int main(void)
{OLED_Init();HAL_TIM_Base_Start(&htim2);//开启定时器2来对ETR外部输入信号计数int count=0;char message[50]="";while (1){count=__HAL_TIM_GET_COUNTER(&htim2);//将计数值放在count中OLED_NewFrame();sprintf(message,"count:%d",count);OLED_PrintString(15, 15,message, &font16x16, OLED_COLOR_NORMAL);OLED_ShowFrame();HAL_Delay(100);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

根据视频可以看出共计数19次,实现对下表黑条进行计数

在这里插入图片描述
同时我们可以使用外部时钟模式1中的TI1_ED进行双边沿检测,对于黑色条纹会有一个高电平,双边沿就会计数*2;

相关文章:

【STM32】外部时钟|红外反射光电开关

1.外部时钟 单片机如何对外部触发进行计数&#xff1f;先看一下内部时钟&#xff0c;内部时钟是接在APB1和APB2时钟线上的&#xff0c;APB1,APB2来自stm32单片机内部的脉冲信号&#xff0c;也叫内部时钟。我们用来定时。同样我们可以把外部的信号接入单片机&#xff0c;来对其…...

【语音科学计算器】当前汇率

JSON_MARKER_HORN{“base”:“USD”,“rates”:{“EUR”:0.9758,“JPY”:157.68,“GBP”:0.8190,“CNY”:7.3327,“HKD”:7.7872,“AUD”:1.6260,“CAD”:1.4422,“CHF”:0.9157,“SGD”:1.3714,“KRW”:1473.05,“NZD”:1.7992,“THB”:34.54,“MYR”:4.4930,“PHP”:57.32,“…...

PHP post 数据丢失问题

max_input_vars是PHP配置选项之一&#xff0c;用于设置一个请求中允许的最大输入变量数。它指定了在处理POST请求或者通过URL传递的参数时&#xff0c;PHP脚本能够接收和处理的最大变量数量。 max_input_vars的默认值是1000&#xff0c;意味着一个请求中最多可以包含1000个输入…...

【云服务器】云服务器内存不够用,开启SWAP交换分区

交换分区&#xff08;Swap&#xff09; 1.创建 2GB Swap 文件 sudo fallocate -l 2G /swapfile &#xff08;如果 fallocate 不支持&#xff0c;可以用 dd 命令&#xff09; sudo dd if/dev/zero of/swapfile bs1M count2048 2.设置 Swap 权限 sudo chmod 600 /swapfile…...

未来SLAM的研究方向和热点

SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;是同时定位与地图构建的缩写&#xff0c;指的是机器人或设备在一个未知环境中一边进行自我定位&#xff0c;一边构建出环境的地图。SLAM广泛应用于机器人、自动驾驶、无人机等领域&#xff0c;涉及多个研究方…...

Orange 单体架构 - 快速启动

1 后端服务 1.1 基础设施 组件说明版本MySQLMySQL数据库服务5.7/8JavaJava17redis-stackRedis向量数据库最新版本Node安装Node22.11.0 1.2 orange-dependencies-parent 项目Maven依赖版本管理 1.2.1 项目克隆 GitHub git clone https://github.com/hengzq/orange-depende…...

【SQL】多表查询案例

&#x1f4e2;本章节主要学习使用SQL多表查询的案例,多表查询基础概念 请点击此处。 &#x1f384;数据准备 首先我们创建一个新的表也就是薪资等级表&#xff0c;其余两个表(员工表和薪资表)在多表查询章节中已经创建。然后我么根据这三个表完成下面的12个需求。 create tab…...

springboot系列十四: 注入Servlet, Filter, Listener + 内置Tomcat配置和切换 + 数据库操作

文章目录 注入Servlet, Filter, Listener官方文档基本介绍使用注解方式注入使用RegistrationBean方法注入DispatcherServlet详解 内置Tomcat配置和切换基本介绍内置Tomcat配置通过application.yml完成配置通过类配置 切换Undertow 数据库操作 JdbcHikariDataSource需求分析应用…...

力扣-贪心-53 最大子数组和

思路 先把每一个值都加到当前集合中&#xff0c;记录当前的和&#xff0c;直到当前记录和小于0了&#xff0c;再重置改记录&#xff0c;再次尝试累加 代码 class Solution { public:int maxSubArray(vector<int>& nums) {int res INT32_MIN;int curSum 0;for(in…...

吃一堑长一智

工作中经历&#xff0c;有感触记录下 故事一 以前在一家公司时&#xff0c;自己是一名开发人员&#xff0c;遇到问题请教领导解决方案&#xff0c;当时领导给了建议&#xff0c;后来上线后出问题了&#xff0c;背了锅。心里想的是领导说这样做的呀&#xff0c;为什么出问题还…...

aws(学习笔记第二十九课) aws cloudfront hands on

aws(学习笔记第二十九课) 使用aws cloudfront 学习内容&#xff1a; 什么是aws cloudfront练习使用aws cloudfront 1. 什么是aws cloudfront aws cloudfront的整体架构 这里可以看出&#xff0c;aws引入了edge location的概念&#xff0c;用户的client与edge location进行是…...

deepseek自动化代码生成

使用流程 效果第一步&#xff1a;注册生成各种大模型的API第二步&#xff1a;注册成功后生成API第三步&#xff1a;下载vscode在vscode中下载agent&#xff0c;这里推荐使用cline 第四步&#xff1a;安装完成后&#xff0c;设置模型信息第一步选择API provider&#xff1a; Ope…...

【C++八股】内存对⻬

内存对齐是指编译器按照特定规则安排数据在内存中的存储位置&#xff0c;以提高程序的执行效率和可移植性。 内存对齐的原因&#xff1a; 1. 性能优化&#xff1a; 现代处理器通常要求数据在内存中按照特定的边界对齐&#xff0c;以提高内存访问效率。 如果数据未对齐&#x…...

idea连接gitee后.反向创建仓库和分支

文章目录 自动关联你登录的账号填写你的仓库和分支完成后会在gitee上创建一个仓库 (使用idea远程兼容gitee并反向创建仓库和分支) 自动关联你登录的账号 填写你的仓库和分支 完成后会在gitee上创建一个仓库...

汽车自动驾驶辅助L2++是什么?

自动驾驶辅助级别有哪些&#xff1f; 依照SAE&#xff08;SAE International&#xff0c;Society of Automotive Engineers国际自动机工程师学会&#xff09;的标准&#xff0c;大致划分为6级&#xff08;L0-L5&#xff09;&#xff1a; L0人工驾驶&#xff1a;即没有驾驶辅助…...

围棋打谱应用软件设计制作

围棋打谱应用软件设计制作 五子棋游戏是大家耳熟能详的游戏&#xff0c;深受大众喜爱。可见其在智能游戏中的地位。我在本站发了好几篇文章介绍编制方法和算法。而类似的围棋游戏则是智能游戏的顶级存在。今在此基础上编制一款围棋打谱软件。当然这是简单的游戏程序&#xff0…...

论文笔记-WSDM2025-ColdLLM

论文笔记-WSDM2025-Large Language Model Simulator for Cold-Start Recommendation ColdLLM&#xff1a;用于冷启动推荐的大语言模型模拟器摘要1.引言2.前言3.方法3.1整体框架3.1.1行为模拟3.1.2嵌入优化 3.2耦合漏斗ColdLLM3.2.1过滤模拟3.2.2精炼模拟 3.3模拟器训练3.3.1LLM…...

线代[8]|北大丘维声教授《怎样学习线性代数?》(红色字体为博主注释)

文章目录 说明一、线性代数的内容简介二、学习线性代数的用处三、线性代数的特点四、学习线性代数的方法五、更新时间记录 说明 文章中红色字体为博主敲录完丘教授这篇文章后所加&#xff0c;刷到这篇文章的读者在首次阅读应当跳过红色字体&#xff0c;先通读一读文章全文&…...

使用 C++ 和 gRPC 的常见陷阱及解决方案

文章目录 1. 环境配置的陷阱1.1 依赖版本冲突或混淆1.2 gRPC 工具缺失 2. 编译和链接的陷阱2.1 运行时库不匹配&#xff08;/MT vs /MD&#xff09;2.2 未解析的外部符号 3. Protobuf 文件生成的陷阱3.1 工具版本不匹配3.2 生成文件运行时库不一致 4. 运行时的陷阱4.1 缺少 DLL…...

《深度学习实战》第2集:卷积神经网络(CNN)与图像分类

《深度学习实战》第2集&#xff1a;卷积神经网络&#xff08;CNN&#xff09;与图像分类 引言 卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09;是深度学习在计算机视觉领域的核心工具。从早期的 LeNet 到现代的 ResNet 和 Vision Transformer&#xf…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...

数据分析六部曲?

引言 上一章我们说到了数据分析六部曲&#xff0c;何谓六部曲呢&#xff1f; 其实啊&#xff0c;数据分析没那么难&#xff0c;只要掌握了下面这六个步骤&#xff0c;也就是数据分析六部曲&#xff0c;就算你是个啥都不懂的小白&#xff0c;也能慢慢上手做数据分析啦。 第一…...