当前位置:   article > 正文

【嵌入式系统开发15】STM32F103C8T6下通过定时器Timer方式实现时间的精准控制,实现串口通信并让LED等周期性地闪烁_hal库配置stm32f103c8t6定时器定时时间

hal库配置stm32f103c8t6定时器定时时间

本文目的是主要介绍通过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库


(二)STM32定时器介绍

1.什么是定时器?

● 单片机的定时/计数器,故名思义就是用于精确定时一段时间后,执行特定代码程序的用途。使用定时器会比使用软件延时函数(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基本定时器

2.高级控制定时器(TIM1 & TIM8)

※ TIM1和ITIM8定时器的功能包括:
● 16位向上、向下、向上/下自动装载计数器
● 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65535之间的任意数值
● 多达4个独立通道:

输入捕获
输出比较
PWM生成(边缘或中间对齐模式)
单脉冲模式输出

● 死区时间可编程的互补输出
● 使用外部信号控制定时器和定时器互联的同步电路
● 允许在指定数目的计数器周期之后更新定时器寄存器的重复计数器
● 刹车输入信号可以将定时器输出信号置于复位状态或者一个已知状态
※ 如下事件发生时产生中断/DMA:

更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
输入捕获
输出比较
刹车信号输入

● 支持针对定位的增量(正交)编码器和霍尔传感器电路
● 触发输入作为外部时钟或者按周期的电流管理
在这里插入图片描述

3.通用定时器(TIM2 - TIM5)

※ 通用TIMx (TIM2、TIM3、TIM4和TIM5)定时器功能包括:
● 16位向上、向下、向上/向下自动装载计数器
● 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值
● 4个独立通道:

输入捕获
输出比较
PWM生成(边缘或中间对齐模式)
单脉冲模式输出

● 使用外部信号控制定时器和定时器互连的同步电路
● 如下事件发生时产生中断/DMA:

更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
输入捕获
输出比较

● 支持针对定位的增量(正交)编码器和霍尔传感器电路
● 触发输入作为外部时钟或者按周期的电流管理
在这里插入图片描述

4.基本定时器(TIM6 & TIM7)

※ TIM6和TIM7定时器的主要功能包括:
● 16位自动重装载累加计数器
● 16位可编程(可实时修改)预分频器,用于对输入的时钟按系数为1~65536之间的任意数值分频
● 触发DAC的同步电路
● 在更新事件(计数器溢出)时产生中断/DMA请求
在这里插入图片描述

5.定时器的计数值设置

※ 我们用定时器来定时1s,那么这个计数值我们应该设置为多少?
● 先来设置16位预分频的分频系数,我们设置为7200。
● 所以 在这里插入图片描述= 10000HZ,经过预分频后72Mhz变成了10000hz
● 所以,T = 在这里插入图片描述 =在这里插入图片描述,即:在10000hz频率下,计数10000次,需要花费1s的时间。换而言之就是,在10000hz频率下,想要延时1s就需要计数10000次。所以,此时计数值我们设置为10000。
所以,计算值设置为多少,需要先知道预分频的系数,才能计算出来。
相应库函数:
在这里插入图片描述
在这里插入图片描述

6.技术模式介绍

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/565784
推荐阅读
相关标签