【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,要不然等一下会在黑白交替的时候会有好多抖动,如果不滤波的话,这些抖动也会算在计数中。

c 复制代码
#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;

相关推荐
可待电子单片机设计定制(论文)6 小时前
【STM32设计】基于STM32的智能门禁管理系统(指纹+密码+刷卡+蜂鸣器报警)(代码+资料+论文)
stm32·单片机·嵌入式硬件
不可思议迷宫7 小时前
Verilog编程实现一个分秒计数器
单片机·嵌入式硬件·fpga开发
life_yangzi9 小时前
关于单片机IAP升级的那点事儿|智能设置中断向量表
单片机·嵌入式硬件
了一li11 小时前
STM32实现一个简单电灯
stm32·单片机·嵌入式硬件
可待电子单片机设计定制(论文)13 小时前
【STM32设计】数控直流稳压电源的设计与实现(实物+资料+论文)
stm32·嵌入式硬件·mongodb
march_birds14 小时前
FreeRTOS 与 RT-Thread 事件组对比分析
c语言·单片机·算法·系统架构
小麦嵌入式14 小时前
Linux驱动开发实战(十一):GPIO子系统深度解析与RGB LED驱动实践
linux·c语言·驱动开发·stm32·嵌入式硬件·物联网·ubuntu
触角0101000116 小时前
STM32F103低功耗模式深度解析:从理论到应用实践(上) | 零基础入门STM32第九十二步
驱动开发·stm32·单片机·嵌入式硬件·物联网
昊虹AI笔记16 小时前
使用STM32CubeMX和Keil在STM32上创建并运行一个简单的FreeRTOS多任务程序
stm32·单片机·嵌入式硬件
王光环17 小时前
单片机使用printf,不用微库
单片机·嵌入式硬件