STM32:定时器从模式

今天介绍一下从模式Slave Mode中除了外部时钟模式1的另外3个模式:

分别是Reset Mode:复位模式;Gate Mode:门模式;Trigger Mode:触发模式

外部时钟模式1是给定时器提供计数的信号 ,这三种模式功能是控制定时器的工作状态。

一.复位模式

1.复位模式:

从模式中选择复位模式 对定时器计数状态进行复位,此时外部时钟模式1不能为定时器提供计数信号(被从模式占用) ,我们可以使用另外时钟源:内部时钟 (计时)或ETR(通过外部时钟模式2接入定时器对外部信号进行计数)。

假设这里使用内部时钟源,预分频器设置为0,自动重装载寄存器设置为5。

2.CubeMX:

(1)打开Serial Wire

(2)打开串口:发送数据

(3)TIM2

打开定时器中断,以触发定时器更新中断

过滤器设置15,以过滤掉抖动

保存并生成代码

3.代码:

实现引入上升沿时计数器重新计数,当超过自动重装载值时,串口发送"自动重装载值"且计数器重新开始计数。

(1)头文件

(2)定时器更新中断函数

(3)main函数

复位模式与自动重装载都可以触发定时器更新中断,那我们该如何区分这两者产生的定时器更新中断呢?

定时器更新中断有一个标志位 ,从模式控制器在接收到触发信号后,会设置一个触发器中断标志位 ,所以只要看一下触发器中断标志位是否被置为1,也就可以区分二者了。

其中**__HAL_TIM_GET_FLAG**可以获取定时器标志位的值.

触发器中断标志位:TIM_FLAG_TRIGGER

HAL库未帮我们清0触发器中断标志位,因此再判断触发器中断标志位被置为1后,因此要用**__HAL_TIM_CLEAR_FLAG函数重新清0。**

编译并下载:每5s触发自动重装载中断:输出一次"自动重装载值",并重新计数;通过光电开关引入一个上升沿,输出"从模式触发"并重新计数。

二.门模式

1.门模式:

门模式像控制了时钟信号的一个门,当输入的信号为高电平 时,门打开,时钟信号可以进入定时器,定时器正常计数 。输入信号为低电平 时,门关闭,定时器暂停计数 。若将边沿检测器设置为下降沿,则高低电平对门的开关控制便反过来

2.CubeMX:

3.代码:

门模式下,控制信号出现下降沿或上升沿,从模式控制器就会暂停或继续定时器计数,这两个边沿时刻,也会将触发器中断标志位置1 ,但门模式并不复位计数器的值,也就不再触发定时器更新中断。所以在更新中断中判断触发器的标志位没有意义。

将判断触发器判断标志位的代码放入while函数中,中断程序就会在检测到触发器中断标志位被置1后,清0此标志位并发送"从模式触发"。

编译并下载:当光电开关输出高电平时,正常计数。当光电开关输出低电平时,发送"从模式触发",计数暂停并一直输出同一个数字。

三.触发模式

1.触发模式:

检测到设定的边沿后,让定时器开始计数

2.CubeMX:

3.代码:

代码不需要改动,编译并下载:开始时不计数,输出为0。当我们让光电开关输出一个上升沿时,发送"从模式触发",启动计数。当继续给一个上升沿时,只会发送"从模式触发",计数并不会停止。

触发模式配合单脉冲 :触发模式只能启动定时器计数,不能停止定时器计数,因此我们可以将触发模式会配合单脉冲模式一起使用。(单脉冲模式:定时器不再循环计数。即当计数到自动重装载后,便停止计数。只有当再次引入上升沿时,定时器又重新开始计数。

CubeMX启动单脉冲模式:

保存并生成代码,编译并下载:给一个上升沿时,发送"从模式触发",计数开始。当计数达到自动重装载后,发送"自动重装载值"并停止计数。我们可以继续给一个上升沿,发送"从模式触发"然后计数又开始。
注意:我们发现每次程序启动或按复位按钮都会发送"自动重装载"

这是因为定时器初始化函数MX_TIM2_Init在初始化时,会将定时器更新中断标志位置1 ,因而当我们调用HAL_TIM_Base_Start_IT后,中断机制启动,NVIC就检测到从定时器更新中断标志位为1,触发中断,进而回调了更新中断的回调函数,因此我们在HAL_TIM_Base_Start_IT函数前清0此标志位就可以了。(使用两种清0标志位的函数都可以)

四.总结

复位模式:重新计数,触发更新中断

门模式:根据电平,高电平继续计数,低电平停止计数。(可以通过设置实现反过来的效果)

触发模式:触发信号可以使定时器开始计数,但不能停止计数,可以配合单脉冲模式使用。

相关推荐
崇山峻岭之间1 小时前
单片机舵机实验
单片机·嵌入式硬件
移远通信2 小时前
显示器-调试
单片机·嵌入式硬件·计算机外设
Szime10 小时前
全球首创10位40GSPS超宽带ADC选型参考:国产超高速ADC深智微科技选型支持
科技·单片机·嵌入式硬件·fpga开发
lularible10 小时前
从沙子到车辙(7.4):《兰亭集序》的启示
开源·嵌入式·汽车电子
(Morgan)11 小时前
51单片机期末复习知识点总结
stm32·单片机·嵌入式硬件
榴莲llll13 小时前
应用于计时器/微波炉等产品的高亮LED数显驱动VK16K33C 数码管屏显驱动芯片
单片机
华一精品Adreamer14 小时前
T606 vs 骁龙662/RK3566:主流安卓+4G定制平板芯片横向测评指南
单片机
Zyed14 小时前
[STM32]Day9-Part1USART+串口接收+串口收发
stm32·单片机·嵌入式硬件
l'm coming15 小时前
[linux]内核启动加载驱动文件的流程
linux·arm开发·驱动开发·嵌入式