STM32(七)———TIM定时器(基本and通用)

文章目录

  • 前言
  • 一、通用定时器TIM简介
    • 1.STM32F10X系列总共最多有八个定时器:
    • 2.三种STM32定时器的区别:
    • 3.STM32 的通用定时器功能:
    • 4.计数器模式
  • 二、基本定时器
    • 1.基本定时器的结构框图
    • 2.定时时间的计算
    • 3.定时器的结构体和库函数
  • 总结


前言

一个学习STM32的小白~ 有错误评论区或私信指出

一、通用定时器TIM简介

1.STM32F10X系列总共最多有八个定时器:

在这里插入图片描述

2.三种STM32定时器的区别:

在这里插入图片描述

3.STM32 的通用定时器功能:

  • 16 位/32 位(仅 TIM2 和 TIM5)向上、向下、向上/向下自动装载计数器
    (TIMx_CNT),注意:TIM9~TIM14 只支持向上(递增)计数方式
  • 16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为 1~ 65535 之间的任意数值
  • 4 个独立通道(TIMx_CH14,TIM9TIM14 最多 2 个通道),这些通道可以用来作为:
    • 输入捕获
    • 输出比较
    • PWM 生成(边缘或中间对齐模式) ,注意:TIM9~TIM14 不支持中间对齐模式
    • 单脉冲模式输出
  • 可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用 1 个定时器控制另外一个定时器)的同步电路。
    • 如下事件发生时产生中断/DMA(TIM9~TIM14 不支持 DMA):
    • 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
    • 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
    • 输入捕获
    • 输出比较
    • 支持针对定位的增量(正交)编码器和霍尔传感器电路(TIM9~TIM14 不支持)
    • 触发输入作为外部时钟或者按周期的电流管理(TIM9~TIM14 不支持)

4.计数器模式

通用定时器可以向上计数、向下计数、向上向下双向计数模式

  • 向上计数模式:计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件
  • 向下计数模式:计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件
  • 中央对齐模式(向上/向下计数):计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数

在这里插入图片描述

二、基本定时器

1.基本定时器的结构框图

  1. 时钟源
  2. 控制器
  3. 时基单元
    在这里插入图片描述
    时钟源
  • 时钟源来自RCC的TIMx_CLK(属于内部的CK_INIT)
    控制器
  • 控制器用于控制定时器:复位、使能、计数、触发ADC
    涉及到的寄存器:CR1/2,DIER,EGR,SR
    时基(定时器的心脏)
  • 定时器最重要的就是时基部分:包括预分频器、计数器、自动重装载寄存器
    • 预分频器:16位预分频器(1~65536)PSC对内部时钟CK_PSC进行分频之后,得到计数器时钟CK_INT=CK_PSC/(PSC+1)
    • CNT在计数器时钟的驱动下开始计数,计数一次的时间为1/CK_INT
    • 计数器、重装在寄存器:定时器使能(CEN置1)后,计数器CNT在CK_CNT驱动下计数,当TNT值与ARR的设定值相等时就自动生成事件并CNT自动清零,然后自动重新开始计数,如此重复以上过程。

影子寄存器
1.PSC和ARR都有影子寄存器,功能框图上有个影子
2.影子寄存器的存在起到一个缓冲的作用,用户值->寄存器->影子寄存器->起作用,
如果不使用影子寄存器则用户值在写到寄存器之后则里面起作用,ARR影子,
TIMx_CR1:APRE位控制。

2.定时时间的计算

  • PSC=72-1,定时器的频率 = 72M/(PSC+1) = 1MHZ
  • ARR = 1000 -1,从0计数到999,则计了1000次
  • 中断周期T = 1000 * 1 /1 000 000 = 1ms

3.定时器的结构体和库函数

时基初始化结构体:typedef struct{uint16_t TIM_Prescaler;    
uint16_t TIM_CounterMode;       
uint16_t TIM_Period;           
//分频因子      
//计数模式,基本定时器只能向上计数
//自动重装载值
uint16_t TIM_ClockDivision;     
uint8_t TIM_RepetitionCounter;  //重复计数值,基本定时器没有,高级定时器
专用
} TIM_TimeBaseInitTypeDef;  
常用的库函数:
//外部输入时钟分频因子,基本定时器没有
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* 
TIM_TimeBaseInitStruct);void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* 
TIM_TimeBaseInitStruct);void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState 
NewState);void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, 
uint16_t TIM_PSCReloadMode);void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState 
NewState);  
FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);

练习:

如何实现500ms的定时?

void tim_Init(void)
{TIM_TimeBaseInitTypeDef  tim_InitStructure;NVIC_InitTypeDef nvic_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);tim_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//不分频tim_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数tim_InitStructure.TIM_Prescaler = 36000-1;//预分频tim_InitStructure.TIM_Period = 1000-1;//ARR自动重装TIM_ClearFlag(TIM2,TIM_FLAG_Update);TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);TIM_TimeBaseInit(TIM2,&tim_InitStructure);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);nvic_InitStructure.NVIC_IRQChannel = TIM2_IRQn;nvic_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;nvic_InitStructure.NVIC_IRQChannelSubPriority = 1;nvic_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&nvic_InitStructure);TIM_Cmd(TIM2,ENABLE);}

定时器控制LED闪烁

软件流程设计

  • 初始化系统
    • 初始化定时器和LED的IO时钟
    • 初始化LED的引脚IO
  • 定时器中断中驱动LED灯
#include "tim.h"
#include "stm32f10x.h"                  // Device headervoid tim_Init(void)
{TIM_TimeBaseInitTypeDef  tim_InitStructure;NVIC_InitTypeDef nvic_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);tim_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//不分频tim_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数tim_InitStructure.TIM_Prescaler = 36000-1;//预分频tim_InitStructure.TIM_Period = 1000-1;//ARR自动重装TIM_ClearFlag(TIM2,TIM_FLAG_Update);//清楚更新事件标志位防止一进来就更新TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//开中断TIM_TimeBaseInit(TIM2,&tim_InitStructure);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);nvic_InitStructure.NVIC_IRQChannel = TIM2_IRQn;nvic_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;nvic_InitStructure.NVIC_IRQChannelSubPriority = 1;nvic_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&nvic_InitStructure);TIM_Cmd(TIM2,ENABLE);//开定时器}void TIM2_IRQHandler(void)
{static uint16_t Count;if(TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET){if(Count++ % 2 == 1){GPIO_ResetBits(GPIOA,GPIO_Pin_1);}else{GPIO_SetBits(GPIOA,GPIO_Pin_1);}}TIM_ClearFlag(TIM2,TIM_IT_Update);//清除中断标志位}

总结

定时器非常重要!!!
注:定时器中断要软件开启(TIM_ITConfig),要开启定时器(TIM_cmd)!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/855468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#——文件读取BufferedStream类详情

文件读取BufferedStream类 BufferedStream字节流临时存储 缓存区是内存中字节块,用于缓存数据,减少对操作系统调用失败的次数,缓存区可以提升数据 用法: // 创建一个缓存区对象 参数是stream对象,指定字节临时存储的路径 Buffe…

如何利用机器学习算法进行数据分析和挖掘,数据优化、预处理、特征提取等老板吩咐的工作

在利用机器学习算法进行数据分析和挖掘时,数据优化、预处理和特征提取是非常重要的步骤。 1. 数据收集 收集相关数据,这是整个过程的起点和基础。数据可以来自多个来源,如数据库、API、网络爬虫等。 2. 数据预处理 数据预处理是保证数据质…

如何实现ElementUI动态表头?

可能看到这个标题,有些小伙伴会有些疑惑,动态表头是个什么东西,怎么没听说过? 其实动态表头在企业的项目中用途还是非常广泛的,比如erp系统什么的 那么动态表头是什么呢?说简单点就是让ElementUI的Table表格可以实现自定义表头展示+表头拖拽排序的一个功能 这个东西我…

<Rust><iced>基于rust使用iced构建GUI实例:如何将svg格式转为ico格式图片?

前言 本专栏是Rust实例应用。 环境配置 平台:windows 软件:vscode 语言:rust 库:iced、iced_aw 概述 本文是专栏第4篇实例,依旧是一个图像格式转换程序,基于rust的svg库resvg、图像处理库image以及文件处理库rfd。 流程是先用resvg获取svg图片的数据并将其转为png数据…

20.Dcoker跨宿主机容器通信之overlay

Dcoker跨宿主机容器通信之overlay http://www.cnblogs.com/CloudMan6/p/7270551.html 环境准备,三台机器,主机名为docker01(192.168.111.11)、docker02(192.168.111.12)、docker03(192.168.111…

电子竞赛5——作息时间控制器

一 . 题目要求 用单片机制作作息时间控制器;用四位数码管显示实时时钟(时、分,24小时制、12小时制),有秒闪,小时十位有零消隐;可用数字键或、-键校时(可快速、-)被校位&…

【ARMv8/ARMv9 硬件加速系列 4 -- 加解密 Cryptographic Extension 介绍】

文章目录 ARMv8.0 Cryptographic ExtensionFEAT_AESFEAT_PMULLFEAT_SHA1FEAT_SHA256ARMv8.2 扩展FEAT_SHA512FEAT_SHA3FEAT_SM3FEAT_SM4ARMv8.0 Cryptographic Extension ARMv8.0引入了加密扩展(Cryptographic Extension),旨在加速加密和解密操作。这一扩展通过新增专用指令…

redis雪崩问题怎么解决

Redis雪崩问题通常发生在大量缓存同时过期,导致所有请求直接打到数据库上,从而可能压垮数据库。解决这一问题的关键在于分散缓存失效时间,避免集中失效。此外,还可以通过限流、降级、预热等策略来进一步缓解压力。 下面是一个综合…

C++代码编写风格:Header-Only与声明实现分离的选择

C代码编写风格:Header-Only与声明实现分离的选择 最近看到一些小伙伴问到了几个比较有趣的问题,这里总结一下,这些都是实际面试中出现过的问题,看看你知道多少,考察一下底子。 面试问题1:你通常编写代码的风…

JAVA云HIS医院管理系统源码 云HIS系统的应用场景

JAVA云HIS医院管理系统源码 云HIS系统的应用场景 云HIS是针对中小医疗健康机构推出的一套基于云端的诊所云HIS服务平台,包括内部管理系统、临床辅助决策系统、体检系统、客户管理与服务系统、健康管理系统、知识管理系统、医患沟通系统、线上营销系统、其他外部系…

降价潮背后:中国产业大模型落地的卡点到底在哪?

“技术是不会以任何商业行为或者人们的意愿所改变它的上限和下限的,它需要的时间是恒定的。” 如果说中国大模型市场最核心的话题是什么?降价则必然是其中之一。 从目前的参赛玩家来看,不论是字节豆包,还是阿里、百度、腾讯、科…

PostgreSQL源码分析——常量表达式化简

常量表达式化简 常量表达式可以进行化简,可降低执行器计算表达式的代价。在逻辑优化阶段,会判断是否可以进行常量表达式化简,如果可以,则在执行器执行之前就预先对常量表达式树进行计算,计算出常量后,以新…

Linux系统之mtr命令的基本使用

Linux系统之mtr命令的基本使用 一、mtr命令介绍二、mtr命令使用帮助2.1 mtr命令的帮助信息2.2 mtr帮助信息解释 三、安装mtr工具四、mtr命令的基本使用4.1 直接使用4.2 设定ping次数4.3 禁用DNS解析4.4 显示IP地址4.5 调整间隔 五、总结 一、mtr命令介绍 mtr命令是一个网络诊断…

Multisim软件仿真之频谱分析仪

网络上有很多Multisim文件,有些是不能复现的,比如频谱仪,按照下面链接去操作,怎么也测试不出来波形,multisim频谱仪使用_multisim输入输出端口-CSDN博客。 原因分析: 1、博主设置参数未讲全,按…

Oracle基本数据类型

在Oracle数据库中,数据类型是描述数据存储格式的属性。不同的数据类型允许存储不同种类的数据。以下是Oracle中的一些基本数据类型: 1. 字符数据类型 - CHAR(size): 定长字符数据,最大长度为2000字节。 - VARCHAR2(size): 变长字符数据…

Redis 常见问题

什么是Reids Redis是一个使用C语言写的开源的高性能key-value非关系型数据库. Redis中包含string, list ,set, zset, hash 等数据类型. Redis的数据都基于缓存的, 每秒可以处理10万次读写, 是已知最快的key-value 数据库. Redis可以实现写入磁盘, 保证数据安全. Redi…

【GUI软件】小红书蒲公英数据批量采集!高效筛选优质博主,助力品牌商

文章目录 一、背景介绍1.0 爬取目标1.1 演示视频1.2 软件说明 二、代码讲解2.0 关于接口2.1 爬虫采集模块2.2 cookie获取2.3 软件界面模块2.4 日志模块 三、获取采集软件 一、背景介绍 1.0 爬取目标 众所周知,蒲公英是小红书推出的优质创作者商业合作服务平台&…

海思SS928/SD3403开发笔记1——使用串口调试开发板

该板子使用串口可以调试,下面是win11 调试 该板子步骤 1、给板子接入鼠标、键盘、usb转串口 2、下载SecureCRT,并科学使用 下载地址: 链接:https://pan.baidu.com/s/11dIkZVstvHQUhE8uS1YO0Q 提取码:vinv 3、安装c…

2024最新宝塔面板8.1.0企业版开心版

官方更新记录 【增加】增加【网站】-【HTML项目】 【优化】优化Docker模块使用体验 【优化】优化文件压缩和解压的速度 【修复】修复在上一版本中出现的所有已知问题 开心版更新记录 1.在 PHP切换页面,出现报错弹窗属于正常情况,是因爲没安装 企业…

uni-app实现扫码

uni.scanCode(OBJECT) 调起客户端扫码界面,扫码成功后返回对应的结果。 平台差异说明 AppH5微信小程序支付宝小程序百度小程序抖音小程序、飞书小程序QQ小程序快手小程序京东小程序√x√√√√√√√ OBJECT 参数说明 参数名类型必填说明平台差异说明onlyFromC…