Bootstrap

11-STM32的外部时钟

11-STM32的外部时钟

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.当触发控制器的信号来自于APB1或APB2,该脉冲信号被称为定时器的“内部时钟”信号

2.在STM32F103上,每个定时器 有四个输入通道,从TI1到TI4,其中TI3和TI4并没有接入到出发控制器

STM32为每个输入通道都接入了配套的输入滤波器和边沿检测器

  • 滤波器:过滤一些微小的抖动
  • 边沿检测器:根据配置检测输入信号的边沿并输出一个脉冲,有以下三种类型:

在这里插入图片描述

3.通道一输出的脉冲信号有TI1FP1于TI1FP2、

​ 通道二来说输出的脉冲信号有TI2FP1和TI2FP2

但TI1FP2和TI2FP1目前不会用到,另外通道一上还有一根称为TI1_ED的信号也来到了触发控制器前。

TI1FP1和TI2FP2都可以配置是由上升沿触发、下降沿触发还是双边沿触发,而TI1_ED只能由双边沿触发产生。

这三个信号会进入到触发器中进行选择,触发器还有一个独立的外部时钟信号——外部触发器ETR(),他会经过极性选择、边沿检测、预分频以及输入滤波几个步骤,且其边沿检测只能对上升沿触发,但极性选择可以反转上升沿与i下降沿,两个配合可以实现上升沿检测和下降沿检测。而预分频器的作用是:因为输入到触发器的ETR信号最快只能是内部时钟频率的四分之一,预分频器可以使其慢下来,随后一个滤波,滤掉抖动信号,作为触发器的备选信号

上面四个信号选择的进入到触发器中,被称为外部时钟模式1

ETR信号还可以独立进入触发控制器,这条路径称之为外部时钟模式2

循迹模块

又称为红外光电开关

其原理是,有两个传感器,其中一个透明蓝色的小灯泡可以发射红外光,而另一个黑色小灯泡可以接收红外光,黑色小灯泡检测到的红外光强度,会通过模块上的AO,以模拟量的形式输出出来,接收到的红外光越强,电压越低,其中还有一个电位器,可通过螺丝刀调节其阻值,改为此模块的检测阈值(灵敏度),当红外光强度大于阈值时,模块上的小灯就会亮起(电压变低,输出低电平)

当红外光强度小于阈值时,模块上的小灯就会熄灭(电压变高,输出高电平)

在这里插入图片描述

因此当模块面前有可以反射红外光的物体时,DO引脚就会输出 低电平,当模块面前没有物体或黑色物体(会吸收红外光)时会输出高电平

实验:从循迹模块输入的信号进行计数。

1.选择外部时钟作为时钟源:

在这里插入图片描述

该芯片上TIM1和TIM2才有外部时钟源,选择后来到参数设置

在这里插入图片描述

本次只用到计数功能,不要对自动重转载器和预分频器进行设置。

且用OLED显示出来,需要将I2C1打开。

在这里插入图片描述

且为每个外设单独生成.c/.h文件。

在这里插入图片描述

将oled的显示驱动中的font.c oled.c font.h oled.h放在程序对应Inc 和 Src中

在main.c中:

/* USER CODE BEGIN Includes */
#include "oled.h"
#include <stdio.h>
/* USER CODE END Includes */

XXXX
    
    
 /* USER CODE BEGIN 2 */
  HAL_Delay(20);
  OLED_Init();
  HAL_TIM_Base_Start(&htim2);
  int counter= 0;
  char message[20]="";
  /* USER CODE END 2 */

xxxx
/* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
	  
	  OLED_NewFrame();
	 	  counter = __HAL_TIM_GET_COUNTER(&htim2);
	 	  sprintf(message,"counter :  %d",counter);
	 	  OLED_PrintString(0, 0, message, &font16x16, OLED_COLOR_NORMAL);

	 	  OLED_ShowFrame();


	 	  HAL_Delay(100);
	 	 /* USER CODE BEGIN 3 */
    
  }
  /* USER CODE END 3 */

运行后可以使用循迹模块进行计数,可并不是按照那样运行的

下面使用模块中的输入滤波器:

原理:

绝大数下抖动的脉冲宽度都远远窄于真正的脉冲信号,所以滤波器会按照一定的采样频率f检验每个经过它的脉冲,如何N次脉冲依旧没有结束,则判定此脉冲有效,输出一个脉冲信号到定时器。而假若N次内的某次,发现脉冲已经结束,这说明脉宽不足忽视掉此脉冲

在这里插入图片描述

绝大数情况设为15即可采样频率于内部时钟有关

至此已经实现了外部时钟模式2的相关代码逻辑,

外部时钟模式1

选择从模式,

在这里插入图片描述

使用输入滤波器设置为15

在这里插入图片描述

那么就从外部时钟模式2的改到外部时钟模式1 但也是ETR输入

也可以改为其他几个 只要输入引脚不变则无需更改线路接口。

在这里插入图片描述

TI1_ED 为双边沿检测,之前检测19 会变成 38

在这里插入图片描述

;