【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.外部时钟 单片机如何对外部触发进行计数?先看一下内部时钟,内部时钟是接在APB1和APB2时钟线上的,APB1,APB2来自stm32单片机内部的脉冲信号,也叫内部时钟。我们用来定时。同样我们可以把外部的信号接入单片机,来对其…...
【语音科学计算器】当前汇率
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配置选项之一,用于设置一个请求中允许的最大输入变量数。它指定了在处理POST请求或者通过URL传递的参数时,PHP脚本能够接收和处理的最大变量数量。 max_input_vars的默认值是1000,意味着一个请求中最多可以包含1000个输入…...
【云服务器】云服务器内存不够用,开启SWAP交换分区
交换分区(Swap) 1.创建 2GB Swap 文件 sudo fallocate -l 2G /swapfile (如果 fallocate 不支持,可以用 dd 命令) sudo dd if/dev/zero of/swapfile bs1M count2048 2.设置 Swap 权限 sudo chmod 600 /swapfile…...
未来SLAM的研究方向和热点
SLAM(Simultaneous Localization and Mapping)是同时定位与地图构建的缩写,指的是机器人或设备在一个未知环境中一边进行自我定位,一边构建出环境的地图。SLAM广泛应用于机器人、自动驾驶、无人机等领域,涉及多个研究方…...
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】多表查询案例
📢本章节主要学习使用SQL多表查询的案例,多表查询基础概念 请点击此处。 🎄数据准备 首先我们创建一个新的表也就是薪资等级表,其余两个表(员工表和薪资表)在多表查询章节中已经创建。然后我么根据这三个表完成下面的12个需求。 create tab…...
springboot系列十四: 注入Servlet, Filter, Listener + 内置Tomcat配置和切换 + 数据库操作
文章目录 注入Servlet, Filter, Listener官方文档基本介绍使用注解方式注入使用RegistrationBean方法注入DispatcherServlet详解 内置Tomcat配置和切换基本介绍内置Tomcat配置通过application.yml完成配置通过类配置 切换Undertow 数据库操作 JdbcHikariDataSource需求分析应用…...
力扣-贪心-53 最大子数组和
思路 先把每一个值都加到当前集合中,记录当前的和,直到当前记录和小于0了,再重置改记录,再次尝试累加 代码 class Solution { public:int maxSubArray(vector<int>& nums) {int res INT32_MIN;int curSum 0;for(in…...
吃一堑长一智
工作中经历,有感触记录下 故事一 以前在一家公司时,自己是一名开发人员,遇到问题请教领导解决方案,当时领导给了建议,后来上线后出问题了,背了锅。心里想的是领导说这样做的呀,为什么出问题还…...
aws(学习笔记第二十九课) aws cloudfront hands on
aws(学习笔记第二十九课) 使用aws cloudfront 学习内容: 什么是aws cloudfront练习使用aws cloudfront 1. 什么是aws cloudfront aws cloudfront的整体架构 这里可以看出,aws引入了edge location的概念,用户的client与edge location进行是…...
deepseek自动化代码生成
使用流程 效果第一步:注册生成各种大模型的API第二步:注册成功后生成API第三步:下载vscode在vscode中下载agent,这里推荐使用cline 第四步:安装完成后,设置模型信息第一步选择API provider: Ope…...
【C++八股】内存对⻬
内存对齐是指编译器按照特定规则安排数据在内存中的存储位置,以提高程序的执行效率和可移植性。 内存对齐的原因: 1. 性能优化: 现代处理器通常要求数据在内存中按照特定的边界对齐,以提高内存访问效率。 如果数据未对齐&#x…...
idea连接gitee后.反向创建仓库和分支
文章目录 自动关联你登录的账号填写你的仓库和分支完成后会在gitee上创建一个仓库 (使用idea远程兼容gitee并反向创建仓库和分支) 自动关联你登录的账号 填写你的仓库和分支 完成后会在gitee上创建一个仓库...
汽车自动驾驶辅助L2++是什么?
自动驾驶辅助级别有哪些? 依照SAE(SAE International,Society of Automotive Engineers国际自动机工程师学会)的标准,大致划分为6级(L0-L5): L0人工驾驶:即没有驾驶辅助…...
围棋打谱应用软件设计制作
围棋打谱应用软件设计制作 五子棋游戏是大家耳熟能详的游戏,深受大众喜爱。可见其在智能游戏中的地位。我在本站发了好几篇文章介绍编制方法和算法。而类似的围棋游戏则是智能游戏的顶级存在。今在此基础上编制一款围棋打谱软件。当然这是简单的游戏程序࿰…...
论文笔记-WSDM2025-ColdLLM
论文笔记-WSDM2025-Large Language Model Simulator for Cold-Start Recommendation ColdLLM:用于冷启动推荐的大语言模型模拟器摘要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]|北大丘维声教授《怎样学习线性代数?》(红色字体为博主注释)
文章目录 说明一、线性代数的内容简介二、学习线性代数的用处三、线性代数的特点四、学习线性代数的方法五、更新时间记录 说明 文章中红色字体为博主敲录完丘教授这篇文章后所加,刷到这篇文章的读者在首次阅读应当跳过红色字体,先通读一读文章全文&…...
使用 C++ 和 gRPC 的常见陷阱及解决方案
文章目录 1. 环境配置的陷阱1.1 依赖版本冲突或混淆1.2 gRPC 工具缺失 2. 编译和链接的陷阱2.1 运行时库不匹配(/MT vs /MD)2.2 未解析的外部符号 3. Protobuf 文件生成的陷阱3.1 工具版本不匹配3.2 生成文件运行时库不一致 4. 运行时的陷阱4.1 缺少 DLL…...
《深度学习实战》第2集:卷积神经网络(CNN)与图像分类
《深度学习实战》第2集:卷积神经网络(CNN)与图像分类 引言 卷积神经网络(Convolutional Neural Network, CNN)是深度学习在计算机视觉领域的核心工具。从早期的 LeNet 到现代的 ResNet 和 Vision Transformer…...
多摩川编码器通信避坑指南:STM32 RS485接线、供电不稳、通信失败的排查与修复
多摩川编码器与STM32的RS485通信实战:从硬件设计到故障排查的完整指南 当你在深夜的实验室里盯着示波器上杂乱的波形,反复检查代码却依然无法与多摩川编码器建立通信时,那种挫败感每个嵌入式工程师都深有体会。RS485通信看似简单,…...
Gazebo插件配置踩坑记:publishWheelTF=true 如何让你的ROS TF树‘打群架’
Gazebo插件与ROS TF树的冲突解析:从publishWheelTF参数看仿真数据流设计 当你在Rviz中看到机器人轮子像喝醉了一样轻微抖动,终端不断刷出TF_REPEATED_DATA警告时,背后往往是一场关于TF树控制权的"隐形战争"。这场战争的主角通常是…...
C语言memcpy函数的用法
我们参考用户的问题和提供的引用信息来回答。用户询问memcpy函数的使用方法以及是否可以频繁使用。 引用 提到:memcpy需要提供拷贝的内存长度,易错且使用不便,且长度过大会导致性能下降。同时提到strcpy内部可能调用memcpy,并指出…...
当大模型开始控制设备:我是怎么理解 Agent 架构的
一、前言:什么是 OFA VQA 模型? OFA(One For All)是字节跳动提出的多模态预训练模型,支持视觉问答、图像描述、图像编辑等多种任务,其中视觉问答(VQA)是最常用的功能之一——输入一张…...
Stata实战:用5种方法搞定分组回归系数差异检验(附完整代码与避坑指南)
Stata分组回归系数差异检验:5种方法的深度实操与选择逻辑 当研究国有企业与非国有企业的薪酬激励效果差异时,分组回归系数检验是绕不开的实证关卡。但面对reghdfe高维固定效应下的报错警告、结果不显著或方法选择困惑,许多研究者往往陷入技术…...
从零构建大模型实战:数据处理与 GPT-2 完整实现
前言大模型的核心能力源于高质量数据与高效模型架构。数据收集与预处理是大模型训练的基石,直接决定模型的泛化能力、知识覆盖度与生成质量;而基于 Transformer 解码器的 GPT 类模型,则是当前开源大模型的主流架构。本文从开源数据集处理、数…...
【C# .NET 11 AI推理加速黄金法则】:11个生产环境已验证的避坑点,错过=多花300%GPU成本
第一章:C# .NET 11 AI推理加速避坑总纲与成本影响模型在 C# .NET 11 环境中集成 AI 推理(如 ONNX Runtime、ML.NET 或自定义 TensorRT 封装)时,性能瓶颈常隐匿于运行时配置、内存生命周期与硬件亲和性策略之中。忽视这些细节将直接…...
为什么你的文章没人读?聊聊文章可读性
文章可读性不是“写得简单”就完事我以前以为,只要把字写短一点、句子弄直白点,别人就能轻松看懂我的文章。后来才发现,事情没那么简单。文章可读性其实不只是关于词汇难易或句子长短,它更像是一种“读者友好度”——你有没有站在…...
Qwen2.5-7B-Instruct实战落地:医疗问诊初筛与症状结构化记录生成
Qwen2.5-7B-Instruct实战落地:医疗问诊初筛与症状结构化记录生成 1. 项目背景与价值 医疗问诊是医疗服务的第一道关口,传统的人工问诊方式存在效率低、标准化程度不高、容易遗漏关键信息等问题。特别是在基层医疗机构和线上问诊场景中,医生…...
别再凭感觉选模型了!R语言pROC包实战:用Delong检验科学比较两个模型的AUC差异
R语言模型评估实战:用Delong检验科学比较AUC差异的完整指南 在数据科学项目中,我们常常需要面对一个关键决策:从多个候选模型中选择最优解决方案。许多从业者会直接比较AUC值的大小,但这种做法存在明显缺陷——它忽略了统计显著性…...
