九、STM32定时器讲解 - 通用定时器实战

news2024/11/23 13:49:18

目录

1.三种定时器的区别

2.通用定时器的特点描述

3.计数器模式

4.通用定时器工作过程

5.计数器时钟计算方法、

5.1定时器的输入时钟频率 - TimeClockFren

5.2计数器时钟计算方法

6.定时器相关寄存器

7.定时器库函数结构体

8.通用定时器函数

9.定时器中断配置过程

10.项目实战 - 通用定时器中断闪烁灯


1.三种定时器的区别

STM32F1xxx系列总共有8个定时器:分别是2个高级定时器 + 4个通用定时器 + 2个基本定时器。 

 

2.通用定时器的特点描述

  1. 位于APB1低速总线上
  2. 16位向下,向上/向下(中间对齐模式)计数模式,自动重装载计数器(TIMx_CNT)
  3. 16位可编程(可以实现修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为1-65535任意数值
  4. 四个独立通道(TIMx_CH1-4),通道用来支持:
    1. 输入捕获
    2. 输出比较
    3. PWM生成
    4. 单脉冲模式输出
  5. 可使用外部信号(TIM_EIR)控制定时器和定时器互联的同步电路。
  6. 定时器中断/事件产生:六个独立的IRQ/MDA请求生成器
    1. 更新:计数器 向上/向下溢出,计数器初始化(软件或者外部/内部触发)
    2. 触发事件:计数器的启动,停止,初始化或者由内部/外部触发计数
    3. 输入捕获
    4. 输出比较
    5. 支持针对定位的增量编码器或者霍尔传感器电路
    6. 触发输入作为外部时钟或者按周期的电流管理

        STM32通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获),或者产生输入波形(输出比较和PWM)等。

        定时器的预分频器和RCC时钟控制预分频器,脉冲长度和波形周期可以在us到ms之间调整,每个通用定时器都是完全独立,没有互相共享任何内存。

3.计数器模式

  1. STM32通用定时器可以 向上、向下、向上/向下双向计数模式
    1. 向上计数模式:计数值从0计数到自动加载值(TIM_ARR),产生一个计数溢出事件,然后重新从0开始计数
    2. 向下计数方式:计数器从自动载入的值(TIM_ARR)开始向下计数到0,产生一个计数溢出事件,然后从计数装入值重新开始
    3. 中央对齐模式:计数器从0开始到(自动载入值-1),产生计数溢出事件,然后向下计数到1,产生定时器溢出事件,然后从0开始计数。

4.通用定时器工作过程

  1.  时钟部分:(时钟来源)
    1. 内部时钟APB1倍频器
    2. 外部引脚,通用定时器2,3,4
    3. 其他定时器
    4. 外部通道
  2. 时基单元:
    1. 预分频(除法)
    2. 计数器时钟
    3. 自动重装载值
  3. 输入部分:
    1. 输入引脚
    2. 边缘检测
  4. 输出部分:
    1. 输出比较寄存器(周期 ---- 重装载值、占空比 ---- 比较值)

5.计数器时钟计算方法、

5.1定时器的输入时钟频率 - TimeClockFren

除非APB1分频系数为1,否则通用定时器时钟为APB1的两倍.

举例:

AHB = 72M

APB1 = 36M(分频系数为2)

通用定时器时钟为 36 * 2 = 72M

5.2计数器时钟计算方法

TimeOut = ((Prescaler + 1) * (Period + 1) ) / TimeClockFren;

  • TimeOut:定时器溢出时间(单位为us),多少触发(进入)一次TIM中断。
  • Prescaler:分频TIM时钟的预分频器值。
  • Period:计数重载值,TIM计数当超过这个值,则重新计数。
  • TimeClockFren:定时器的输入时钟频率(单位MHZ),也就是当前使用的TIM所用的CLOK的时钟频率。如果不清楚,可通过相关参数得到。

 例如:

 Tout = 1s = 10 000 (9999 + 1)*7200(分频系数 7199+1)/72M(72000 000)

6.定时器相关寄存器

  1. 控制寄存器:控制计数方向
  2. 预分频寄存器:分频系数 (PSC+1)/ N = CNT
  3. 计数器寄存器CNT:当前计数值
  4. 自动重装载寄存器:重装载值

7.定时器库函数结构体

typedef struct
{
  uint16_t TIM_Prescaler;        //分割TIM时钟的预分频值。

  uint16_t TIM_CounterMode;      //设置计数模式

  uint16_t TIM_Period;           //自动重装载值

  uint16_t TIM_ClockDivision;    //时钟分频 

  uint8_t TIM_RepetitionCounter;  //高级定时器使用
} TIM_TimeBaseInitTypeDef;  

8.通用定时器函数

//定时器初始化
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
//定时器使能
void TIM_Cmd(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);

9.定时器中断配置过程

  1. 使能时钟,定时器时钟
  2. 配置定时器结构体
  3. 开启定时器中断,配置中断结构体
  4. 中断服务函数

定时器配置LED每秒闪烁一次

Tout = [自动重装载值(ARR+1)*  分频系数(PSC+1)]/Tclk(分频器时钟)

Tout = 10 000 (9999 + 1)*7200(分频系数 7199+1)/72M(72000 000)

10.项目实战 - 通用定时器中断闪烁灯

9-通用定时器中断闪烁灯 · 宋小康/stm32f103c8t6 - 码云 - 开源中国 (gitee.com)

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

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

相关文章

图论算法:树上倍增法解决LCA问题

文章目录树上倍增法: LCA问题树上倍增法: LCA问题 树上倍增法用于求解LCA问题是一种非常有效的方法。 倍增是什么? 简单来说,倍增就是 1 2 4 8 16 … 2^k 可以发现倍增是呈 2的指数型递增的一类数据,和二分一样&…

黑马程序员 Linux 教程

目录Linux 简介不同应用领域主流操作系统Linux 系统历史Linux 系统版本Linux 安装安装方式网卡设置安装 SSH 连接工具使用 FinalShell 连接到 LinuxLinux 和 Windows 目录结构对比Linux 目录介绍Linux 常用命令Linux 命令初体验Linux 命令使用技巧Linux 命令格式文件目录操作命…

Python的文件编码,复制,缓冲,删除

能力有限,仅供参考 本篇博文是上一篇博文( Python的文件读取,写入)的后续,也是python文件管理的一部分,废话不多说,现在就开始。 1. 编码 在实际工作学习中,你可以遇到乱码的问题…

c语言递归 累和 ,累乘积,斐波那契数列,字符串长度

目录 递归使用场景 1:使用递归的方式计算 Sn123..100 2:计算 n!n*(n-1)*(n-2)*......*1; 3:计算输出斐波那契数列前20项,并按每行4个数的格式输出(2019年) 4: 用递归和非递归两种方式编写函数strlength()。该函数…

Nacos 入门微服务项目实战

Nacos 核心源码精讲 - IT贱男 - 掘金小册全方位源码精讲,深度剖析 Nacos 注册中心和配置中心的核心思想。「Nacos 核心源码精讲」由IT贱男撰写,375人购买https://s.juejin.cn/ds/BuC3Vs9/ Hi,大家好,欢迎大家来学习《Nacos 核心源…

2022黑马Redis跟学笔记.基础篇(一)

2022黑马Redis跟学笔记.基础篇 一1.Redis入门1.1.认识NoSQL1.1.1.结构化与非结构化1.1.2.关联和非关联1.1.3.查询方式1.1.4.事务1.1.5.总结1.2.认识Redis1.3.安装Redis步骤一:安装Redis依赖步骤二:上传安装包并解压步骤三:启动(1).默认启动(2…

开发微服务电商项目演示(三)

一,nginx动静分离第1步:通过SwitchHosts新增二级域名:images.zmall.com第2步:将本次项目的易买网所有静态资源js/css/images复制到nginx中的html目录下第3步:在nginx的核心配置文件nginx.conf中新增二级域名images.zma…

论文阅读:MINE: Towards Continuous Depth MPI with NeRF for Novel View Synthes

中文标题:基于连续深度多平面和神经辐射场的新视角合成 本文只介绍与NeRF原文不同的部分 创新点 对单一图像进行密集三维重建,完成新视角合成与深度估计的工作。从单个图像生成连续和遮挡绘制的三维重建。MINE借鉴NeRF可以生成连续的深度图像。 解决…

leaflet上传CSV文件,在地图上显示图形(示例代码054)

第054个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中加载CSV文件,将图形显示在地图上。CSV(逗号分隔值)文件是一种简单且开放的文件格式,以纯文本形式存储表格数据。 几乎所有电子表格和数据库软件都可以导入/导出这种文件格式。 直接复制下面的 vue+ope…

Navicat无法连接MySQL报错1251的解决方法

日期:2023年2月10日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方&#xf…

C++中的智能指针

1.RAII 与引用计数了解 Objective-C/Swift 的程序员应该知道引用计数的概念。引用计数这种计数是为了防止内存泄露而产生的。 基本想法是对于动态分配的对象,进行引用计数,每当增加一次对同一个对象的引用,那么引用对象的引用计数就会增加一次…

[AAAI 2022] TransFG: A Transformer Architecture for Fine-grained Recognition

Contents TransFG ArchitectureExperimentsReferencesTransFG Architecture Overlapping patch split:ViT 是把图片分成一系列不重叠的 patches,作者认为这可能会破坏 discriminative regions. 为了解决上述问题,作者提出使用 Overlapping patch split,划分的 patch 数 N …

消息中间件RabbitMQ

文章目录1. 协议2. RabbitMQ架构原理3.内存管理4.磁盘控制5. RabbiMQ 插件管理6. 死信6.1 死信队列6.2 延时插件7. 高可用集群方案7.1 普通集群模式7.2 镜像集群模式7.3 基于HAproxyKeepalived搭建高可用8.可靠性投递8.1 消息从生产者发送到Broker两种确认机制8.2 消息从Exchan…

数据Kylin(三):Kylin配置

Kylin配置 一、kylin.metadata.url 指定元数据库路径,默认值为 kylin_metadata@hbase 二、kylin.metadata.sync-retries 指定元数据同步重试次数,默认值为 3 三、kylin.env.hdfs-working-dir 指定 Kylin 服务所用的 HDFS 路径,默认值为 /kylin,请确保启动 Kylin 实例的用户…

【面试题】对闭包的理解?什么是闭包?

大厂面试题分享 面试题库后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库闭包的背景由于js中只有两种作用域,全局作用域和函数作用域,而在开发场景下,将变量暴露在全局作用域下的时候…

云盘满了怎么办?阿里云服务器云盘扩容操作了解一下

1.背景 2.确定扩容云盘类型与控制台操作 3.ECS实例内部扩容操作说明 3.1 ECS实例内部执行扩容分区 3.2 ECS实例内部执行扩容文件系统 1.背景软件应用的数据库所在服务器磁盘使用率已经达到97%,服务器操作实例如下: 一旦使用达到上限,所有的数…

python基于django的 大学生健康管理系统

随着时代的发展,大学生的数量与日预增但是相对的也出现了很多心理问题,大学生因为各类心理引发的社会问题已经受到了很多人的关注,所以如何更好的培养大学生正确的心理健康问题是现在很多大学多面临的一个重要的问题。 系统设置了三种身份的登录,包括管理员,医生和学生。其中管…

SpringBoot 实现 Excel 导入导出,百万数据量,性能爆表!

最近我做过一个MySQL百万级别数据的excel导出功能,已经正常上线使用了。这个功能挺有意思的,里面需要注意的细节还真不少,现在拿出来跟大家分享一下,希望对你会有所帮助。原始需求:用户在UI界面上点击全部导出按钮&…

最近面试了一位5年的测试,一问三不知,还反怼我...

最近看了很多简历,很多候选人年限不小,但是做的都是一些非常传统的项目,想着也不能通过简历就直接否定一个人,何况现在大环境越来 越难,大家找工作也不容易,于是就打算见一见。 在沟通中发现,由…

ISYSTEM调试实践8-winIDEA Analyzer功能1

前面几篇介绍了ISYSTEM的基本调试界面和功能,相比我之前用过的IDE,除了几种断点方式和脚本功能以外,应该都是比较简单,稍微操作一下就可以直接上手,后续我将介绍winIDEA的Analyzer 功能。 1 Analyzer简介 iSYSTEM An…