STM32定时器基本计数原理解析

发布者:SereneWhisper最新更新时间:2023-05-31 来源: elecfans关键字:STM32  定时器 手机看文章 扫描二维码
随时随地手机看文章

概述

STM32的TIM定时器分为三类:基本定时器、通用定时器和高级定时器。从分类来看就知道STM32的定时器功能是非常强大的,但是,功能强大了,软件配置定时器就相对复杂多了。很多初学者甚至工作了一段时间的人都不知道STM32最基本的计数原理。


虽然STM32定时器功能强大,也分了三类,但他们最基本的计数部分原理都是一样的,也就是我们常常使用的延时(或定时)多少us、ms等。


接下来我会讲述关于STM32最基本的计数原理,详细讲述如何做到(配置)计数1us的延时,并提供实例代码供大家参考学习。


TIM计数原理描述

定时器可以简单的理解为:由计数时钟(系统时钟或外部时钟)一个一个计数,直到计数至我们设定的值,这个时候产生一个事件,告诉我们计数到了。


上面简单的描述懂了之后就是需要理解它们每一步骤的细节,比如:提供的时钟频率是多少、分频是多少等。


基本TIM框图:

pIYBAFwkjUCAFy2YAABqaAo5PmQ987.jpg

通用TIM框图:

o4YBAFwkjWyAXF3BAAEi55IQn58632.png

上面两图截取“STM32F4x5、x7参考手册”建议下载手册参看。

从上面两个TIM框图可以看得出来,通用TIM是包含了基本TIM的功能。也可以说基本定时器是定时器最基本的计数部分,我们该文主要就是围绕这部分来讲述,后续会其他更通用、高级的功能给大家讲述。


重要的几个参数(信息):

1.CK_INT时钟:一般由RCC提供(注意:其频率大部分都是系统时钟的一半,在程序中有一个除2的部分,详情请见RCC部分)。

2.CK_PSC时钟预分频:也就是对CK_INT分频。这个值范围:0 - 65535范围都可以,最好能被CK_INT除尽,这样才方便计算时钟。

3.ARR重载值:这个值相当于是我们设定需要计数的值,也就是说计数到这个设定值就会产生一个事件。

综上:CK_INT和CK_PSC确定计数的时钟频率(1秒计多少数),ARR是设定的计数值。最基本的延时(或定时)就由以上三个参数计算而来。

基本延时源代码分析

笔者以F4标准外设库(同时也建议初学者使用官方的标准外设库)为建立的工程,主要以库的方式来讲述。

考虑大家到以后肯定使用定时器更多功能,笔者提供的软件工程实例是通用定时TIM4。其实,将工程中TIM4改为TIM6(基本定时器)一样可以运行的。


1.RCC时钟

o4YBAFwkjWyAD_lAAAB9-U0Nty0644.png

该函数位于bsp.c文件下面;

重点注意:

A.外设RCC时钟的配置要在其外设初始化的前面;

B.匹配对应时钟。

比如:RCC_APB2外设不要配置在RCC_APB1时钟里面

【如:RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);这样能编译通过,但这是错误的代码】

2.TIM配置

o4YBAFwkjW2AG2QyAACHGOVoELo087.png

该函数位于timer.c文件下面;

该函数就是配置定时器基本计数的函数;

配置为1us的基准:

A.1秒钟计数42M次个脉冲

“TIM基本延时”实例工程中:CK_INT = 84M时钟(SystemCoreClock/2)

“TIM基本延时”实例工程:CK_PSC =84M/42M - 1 = 1 即2分频;

至于为什么要减1?

初学者可以理解为“CK_PSC = 0”时不分频(即1分频);“CK_PSC = 1”时为2分频。

#define TIM4_COUNTER_CLOCK 42000000

#defineTIM4_PRESCALER_VALUE (SystemCoreClock/2/TIM4_COUNTER_CLOCK - 1)

B.1秒钟计数1M次个周期

#define TIM4_PERIOD_TIMING (42 - 1)

即ARR重载值;

由上面“A”得出“1秒钟计数42M次个脉冲”,则记满42个脉冲数需要1us(也就是1秒钟计数1M次个周期)。

3.us(微妙)延时函数

o4YBAFwkjW6AM_EgAACAct0GXmI019.png

该函数位于timer.c文件下面;

上图一个while循环就是1us的时间;上面的一些工作就是配置定时器工作一个周期的时间为1us,这里延时N微妙就应该很好理解了; 其实还有一个函数延时N毫秒,很简单,不描述。

定时中断(拓展)

“定时中断”功能是基于前面基础上进行了一个拓展,增加了计数周期就中断的功能。

笔者单独提供了一个实例:定时1ms中断一次(两工程区别在于时间不是1us,1us中断一次时间太短);

在软件上主要就是增加开启TIM中断、配置NVIC、添加TIM中断函数;

1.使能TIM中断

o4YBAFwkjW6ABDA6AACiScmKL1U074.png

该函数位于(定时中断工程)timer.c文件下面;

功能:使能TIM中断。

2.配置NVIC中断控制器

o4YBAFwkjW-AC5aPAAB83ubSKcU289.png

该函数位于(定时中断工程)bsp.c文件下面;

功能:配置TIM中断控制。

3.中断函数

o4YBAFwkjXCAScI0AAB29WPDDhs306.png

该函数位于(定时中断工程)stm32f4xx_it.c文件下面;

功能:定时周期到进入该中断函数。其中有一个计数减,相当于我们延时工程中while延时N的值。


关键字:STM32  定时器 引用地址:STM32定时器基本计数原理解析

上一篇:基于STM32的WEB服务器设计
下一篇:STM32定时器介绍

推荐阅读最新更新时间:2024-11-12 15:09

STM32的IO外部中断EXTI的使用
一、前言 在之前针对 STM32 的G PI O相关API函数及配置使用进行了详细的介绍,GPIO作为输入引脚时,调用相关读 信号 引脚函数接口就可以在程序的循环中,轮询的对输入信号进行读取 检测 操作,除了轮询的方式访问输入引脚,还可以通过另外一种叫做外部中断的方式来对引脚的输入信号进行检测,本篇首先介绍下EX TI 的结构,接着介绍外部中断的相关概念,对STM32的IO外部中断EXTI有个初步的了解,在此基础上重点围绕IO外部中断EXTI的使用展开分析。 图1 外部中断设计 二、EXTI结构 EXTI(Ex te rnal interrupt/event controller)—外部中断/事件 控制器 ,管理了控制器的
[单片机]
<font color='red'>STM32</font>的IO外部中断EXTI的使用
STM32的DMA多通道多数据AD转换
描述:用ADC连续采集11路模拟信号,并由DMA传输到内存。ADC配置为扫描并且连续转换模式,ADC的时钟配置为12MHZ。在每次转换结束后,由DMA循环将转换的数据传输到内存中。ADC可以连续采集N次求平均值。最后通过串口传输出最后转换的结果。 程序如下: #i nclude stm32f10x.h //这个头文件包括STM32F10x所有外围寄存器、位、内存映射的定义 #i nclude eval.h //头文件(包括串口、按键、LED的函数声明) #i nclude SysTickDelay.h #i nclude UART_INTERFACE.h #i nclude #define N 50 //每通道采50次
[单片机]
stm32_CAN总线知识
一、CAN总线的特点: bxCAN主要特点 ● 支持CAN协议2.0A和2.0B主动模式 ● 波特率最高可达1兆位/秒 ● 支持时间触发通信功能 发送 ● 3个发送邮箱 ● 发送报文的优先级特性可软件配置 ● 记录发送SOF时刻的时间戳 接收 ● 3级深度的2个接收FIFO ● 可变的过滤器组: ─ 在互联型产品中,CAN1和CAN2分享28个过滤器组 ─ 其它STM32F103xx系列产品中有14个过滤器组 ● 标识符列表 ● FIFO溢出处理方式可配置 ● 记录接收SOF时刻的时间戳 时间触发通信模式 ● 禁止自动重传模式 ● 16位自由运行定时器 ● 可在最后2个数据字节发送时间戳 管理 ● 中断可屏蔽 ● 邮箱占用
[单片机]
stm32_CAN总线知识
STM32的通用定时器的配置
STM32的通用定时器为:TIM2、TIM3、TIM4和TIM5 在使用通用定时器时利用库函数直接设置定时器如下: 1. 使能定时器TIM_X的时钟:(X=2、3、4、5) RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIMX,ENABLE); 2. 计算要定时的时间,根据定时时间来设定分频数和最大计数值(以向上计数为例子),其中计算关系如下: 系统时钟(一般为72MHZ) =定时器分频数 *计数值 假如分频数为7200,则定时器时钟为:72MHZ/7200=10KHZ,定时器每次计数时间间隔为1/10000秒,假如定时1秒,则要计数10000次,因此计数器的最大计数值为9999,
[单片机]
暗室定时器电路图
暗室定时器电路图
[模拟电子]
暗室<font color='red'>定时器</font>电路图
stm32学习之五
按键输入的学习(key_polling): 目标:通过按键的输入,实现LED灯的反转等操作。 要实现按键的输入的读取,必须要实现一个key.c和key.h的文件的编写,这里,利用库函数的编写原则(仿照 库函数的编写方法),获取按键的动作。 首先,编写key.h函数: #ifndef _KEY_H #define _KEY_H #include stm32f10x.h #define KEY_ON 0 #define KEY_OFF 1 void key_Init(void); uint8_t key_Scan( GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin ); void de
[单片机]
STM32之外部中断和中断控制器
在外部中断和中断控制器中,我们首先阐述嵌套向量中断控制器(NVIC),他和处理器核的接口紧紧相连。可以实现低延时的中断处理和处理晚到的中断。主要具有以下几个特点: 1.60个可屏蔽中断通道; 2.16个可编程的优先等级; 3.低延时的异常和中断处理; 4.电源管理控制; 5.系统控制寄存器的实现。 其中每一个STM32系列芯片都会有一个产品向量表,博友们可以在相关 产品说明书中查看具体的中断问题。 接下来介绍中断优先级 在M3中有两个优先级的概念-抢占优先级和响应优先级。每一个中断源都必须指定这两种优先级。这里的中断抢占其实和89C51差不多,高中断优先级可以抢占正在进行中断处理的低中断优先级,也就是我们所说的中断嵌套。学习过51
[单片机]
STM32 DHT11串口打印源程序
1.硬件准备: USB转TTL工具一个 核心板STM32F103C8T6 DHT11传感器 2.软件准备: 串口调试助手 2.硬件连线 USB转TTL的RX----32板子上的PA9 USB转TTL的TX----32板子上的PA10 DHT11的DAT连接PB14 3.程序源码 #include dht11.h ////////////////////////////////////////////////////////////////////////////////// #include delay.h //////////////////////////////////////////////////////
[单片机]
<font color='red'>STM32</font> DHT11串口打印源程序
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved