赞
踩
本文目的是主要介绍通过STM32F103C8T6采用定时器Timer方式实现时间的精准控制,相当于给CPU上了一个闹钟,CPU平时处理其它任务,当定时时间到了以后,处理定时相关的任务。请设置一个5秒的定时器,每隔5秒从串口发送“hello windows!”;同时设置一个2秒的定时器,让LED等周期性地闪烁。
※ 在stm32CubeMX环境配置下,延时功能都是通过循环、delay/Hal_delay函数等实现,可参考博主的博客进行学习:https://blog.csdn.net/qq_52199251/article/details/127274537
※ 本文主要讲解采用定时器Timer方式实现时间的精准控制,并且利用定时器实现串口通信以及LED周期闪烁。
加油,看到这个博客的人,祝你开心一整天
※ 通过定时器Timer方式实现时间的精准控制,相当于给CPU上了一个闹钟,CPU平时处理其它任务,当定时时间到了以后,处理定时相关的任务。请设置一个5秒的定时器,每隔5秒从串口发送“hello windows!”;同时设置一个2秒的定时器,让LED等周期性地闪烁。
所需工具:
1、芯片: STM32F103C8T6
2、STM32CubeMx软件
3、IDE: MDK-Keil软件
4、STM32F1xx/STM32F4xxHAL库
● 单片机的定时/计数器,故名思义就是用于精确定时一段时间后
,执行特定代码程序的用途。使用定时器会比使用软件延时函数(delay)更加精准
,举例应用如,基于STM32的频率计。定时器往往结合中断程序一起使用。
● 以STM32F103系列产品为例,其拥有:
4个通用定时器(TIM2~TIM5)
2个高级控制定时器(TIM1和TIM8),功能更强大
2个基本定时器(TIM6和TIM7),主要用于产生DAC触发信号 1个实时时钟(RTC)
2个看门狗定时器
1个系统滴答定时器(SysTick时钟),主要用于精确延时(delay函数)
通用定时器结构:
定时器时钟源结构图:
将八个定时器进行划分如下:
定时器名称 | 功能等级 |
---|---|
TIM1 | 高级控制定时器 |
TIM8 | 高级控制定时器 |
TIM2 | 通用定时器 |
TIM3 | 通用定时器 |
TIM4 | 通用定时器 |
TIM5 | 通用定时器 |
TIM6 | 基本定时器 |
TIM7 | 基本定时器 |
※ TIM1和ITIM8定时器的功能包括:
● 16位向上、向下、向上/下自动装载计数器
● 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65535之间的任意数值
● 多达4个独立通道:
输入捕获
输出比较
PWM生成(边缘或中间对齐模式)
单脉冲模式输出
● 死区时间可编程的互补输出
● 使用外部信号控制定时器和定时器互联的同步电路
● 允许在指定数目的计数器周期之后更新定时器寄存器的重复计数器
● 刹车输入信号可以将定时器输出信号置于复位状态或者一个已知状态
※ 如下事件发生时产生中断/DMA:
更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
输入捕获
输出比较
刹车信号输入
● 支持针对定位的增量(正交)编码器和霍尔传感器电路
● 触发输入作为外部时钟或者按周期的电流管理
※ 通用TIMx (TIM2、TIM3、TIM4和TIM5)定时器功能包括:
● 16位向上、向下、向上/向下自动装载计数器
● 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值
● 4个独立通道:
输入捕获
输出比较
PWM生成(边缘或中间对齐模式)
单脉冲模式输出
● 使用外部信号控制定时器和定时器互连的同步电路
● 如下事件发生时产生中断/DMA:
更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
输入捕获
输出比较
● 支持针对定位的增量(正交)编码器和霍尔传感器电路
● 触发输入作为外部时钟或者按周期的电流管理
※ TIM6和TIM7定时器的主要功能包括:
● 16位自动重装载累加计数器
● 16位可编程(可实时修改)预分频器,用于对输入的时钟按系数为1~65536之间的任意数值分频
● 触发DAC的同步电路
● 在更新事件(计数器溢出)时产生中断/DMA请求
※ 我们用定时器来定时1s,那么这个计数值我们应该设置为多少?
● 先来设置16位预分频的分频系数,我们设置为7200。
● 所以 = 10000HZ,经过预分频后72Mhz变成了10000hz
● 所以,T = =,即:在10000hz频率下,计数10000次,需要花费1s的时间。换而言之就是,在10000hz频率下,想要延时1s就需要计数10000次。所以,此时计数值我们设置为10000。
※ 所以,计算值设置为多少,需要先知道预分频的系数,才能计算出来。
相应库函数:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。