当前位置: 首页 > news >正文

stm32之基本定时器的使用

在上文我们使用到了HAL库的自带的延时函数,HAL_Delay();我们来看一下函数的原型

__weak void HAL_Delay(uint32_t Delay)
{uint32_t tickstart = HAL_GetTick();uint32_t wait = Delay;/* Add a freq to guarantee minimum wait */if (wait < HAL_MAX_DELAY){wait += (uint32_t)(uwTickFreq);}while ((HAL_GetTick() - tickstart) < wait){}
}

我们可以看到实际上就是通过软件去延时,导致cpu死等,很浪费cpu的资源。这里我们介绍新知识定时器通过人为的去设置时间,来执行相关程序。比如每五秒翻转LED的电平

目录

一定时器

1.1概述

1.2 分类

二基本定时器

2.1 基本定时器:

2.2 主要特性

2.3定时器的计算模式及溢出条件

2.4 定时器溢出时间计算方式

三stm32cubemx配置

四代码分析


一定时器

1.1概述

:通过使用精准的时基,通过硬件的方式,实现定时功能

1.2 分类

这里我们介绍的是常规定时器,那这些又有什么区别呢?

 我们可以看到 基本定时器只有一些最基本的定时功能,而通用定时器则比基本定时器高级,可用于输入捕获(捕获红外信号等)、输出比较,也具有基本定时器的功能。

而高级定时器则在通用定时器的基础上还具备其他的功能。

二基本定时器

2.1 基本定时器:

                          TIM6/TIM7 

2.2 主要特性

                        :16位递增计数器(计数值:0~65535)

                        16位预分频器(分频系数:1~65536)

                         可用于触发DAC

                          在更新事件(计数器溢出)时,会产生中断/DMA请求

这里我们看到中断联想到我们上文说的,中断会有一个触发条件,这里触发条件就是计数器溢出(就是计数器的值到了我们设定的阈值即定时的时间到了),然后在中断相关函数里面去编写触发中断时,需要执行的代码。

2.3定时器的计算模式及溢出条件

这里就是定时器的不同计数模式,这里简单了解就好

2.4 定时器溢出时间计算方式

 这里我们详细介绍一下

Ft是定时器的时钟源频率:是来自未分频的时钟源

 这里我们先打开stm32参考手册

可以看到TIM6/TIM7是在APB2总线上的。这里我们打开STM32CUBEMX,以上节串口的复制,重新命名,打开配置时钟的地方

 可以看到时钟源是72mHZ

 PSC:设置预分频系数,将预分频时钟(CK_PSC)进行1~65536之间任意值分频,得到计数时钟

ARR:为计数器设置计数边界或重载值。比如计数器递增计数时,记到多少发生溢出;递减计数时,从多少开始往下计数

这里我们再看一下公式

我们这里使用定时器6,实现每1s翻转LED0的电平

即每1s定时器更新中断,再中断处理函数里面去翻转LED0的电平

即Tout=1s 这里我们一般先设置PSC为7200-1 得到arr得值

这里设置PSC为7199 即(PSC+1 )=Ft 所以ARR+1为多少 Tout就是多少毫秒

1=(ARR+1)*(7199+1)/72000000    

所以我们这里设置ARR为9999

三stm32cubemx配置

然后点击生成就好

四代码分析

这里需要注意,在cubemx配置好后,我们要打开定时器得中断即

HAL_TIM_Base_Start_IT(&htim6);/* 使能定时器x及其更新中断 */

然后我们写中断处理函数

同样中断处理函数原型是弱定义,这里我们重新定义,并在函数里面先判断是否是TIM6 如果是则翻转电平

逻辑就是每过1s进入定时器6的中断处理函数,翻转LED0的电平

http://www.lryc.cn/news/335731.html

相关文章:

  • 单片机为什么还在用C语言编程?
  • IO流的基础详解
  • 实战攻防 | 记一次项目上的任意文件下载
  • 熔断之神:探寻Hystrix的秘密与实践指南
  • Web功能测试测试点总结!
  • 关于vue3的简单学习
  • windows server 2019 -DNS服务器搭建
  • 使用 XCTest 进行 iOS UI 自动化测试
  • 【Python】FANUC机器人OPC UA通信并记录数据
  • Linux 中断处理
  • 人大金昌netcore适配,调用oracle模式下存储过程\包,返回参数游标
  • pandas常用的一些操作
  • 【鸿蒙开发】系统组件Row
  • Hadoop和zookeeper集群相关执行脚本(未完,持续更新中~)
  • 蓝桥杯算法题:栈(Stack)
  • JavaWeb-监听器
  • 系统架构设计基础知识
  • Vue自定义指令介绍及使用方法
  • React 组件生命周期函数的用法和示例代码
  • 【nginx运维】[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
  • 浏览器工作原理与实践--虚拟DOM:虚拟DOM和实际的DOM有何不同
  • arm工作模式、arm9通用寄存器、异常向量表中irq的异常向量、cpsr中的哪几位是用来设置工作模式以及r13,r14,15别名是什么?有什么作用?
  • 电脑上音频太多,播放速度又不一致,如何批量调节音频播放速度?
  • pe格式从入门到图形化显示(十)-扩展最后一个节
  • 设计模式之创建型模式---建造者模式
  • 如何从零开始训练一个语言模型
  • Python 设计一个监督自己的软件1
  • 商家转账到零钱权限开通操作攻略
  • 【DAC‘ 2022】Kite: A Family of Heterogeneous Interposer Topologies
  • 数据结构—堆