stm32f103定时器,STM32F103的11个定时器详解

发布者:数字驿站最新更新时间:2023-09-20 来源: elecfans关键字:stm32f103  定时器  看门狗 手机看文章 扫描二维码
随时随地手机看文章

  STM32F系列属于中低端的32位ARM微控制器,该系列芯片是意法半导体(ST)公司出品,其内核是Cortex-M3。该系列芯片按片内Flash的大小可分为三大类:小容量(16K和32K)、中容量(64K和128K)、大容量(256K、384K和512K)。

  这篇文章主要谈谈STM32F103的11个定时器的详细介绍,一起来了解一下。


  STM32F103的11个定时器详解

  STM32F103系列的单片机一共有11个定时器,其中:2个高级定时器、4个普通定时器、2个基本定时器、2个看门狗定时器、1个系统嘀嗒定时器。

  出去看门狗定时器和系统滴答定时器的八个定时器列表:

  stm32f103定时器,STM32F103的11个定时器详解

  8个定时器分成3个组;TIM1和TIM8是高级定时器、TIM2-TIM5是通用定时器、TIM6和TIM7是基本的定时器,这8个定时器都是16位的,它们的计数器的类型除了基本定时器TIM6和TIM7都支持向上,向下,向上/向下这3种计数模式。

  计数器三种计数模式

  向上计数模式:从0开始,计到arr预设值,产生溢出事件,返回重新计时 向下计数模式:从arr预设值开始,计到0,产生溢出事件,返回重新计时 中央对齐模式:从0开始向上计数,计到arr产生溢出事件,然后向下计数,计数到1以后,又产生溢出,然后再从0开始向上计数。(此种技术方法也可叫向上/向下计数)

  基本定时器(TIM6,TIM7)的主要功能: 只有最基本的定时功能,。基本定时器TIM6和TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动。

  通用定时器(TIM2~TIM5)的主要功能: 除了基本的定时器的功能外,还具有测量输入信号的脉冲长度( 输入捕获) 或者产生输出波形( 输出比较和PWM)。

  高级定时器(TIM1,TIM8)的主要功能: 高级定时器不但具有基本,通用定时器的所有的功能,还具有控制交直流电动机所有的功能,你比如它可以输出6路互补带死区的信号,刹车功能等等。

  通用定时器的时钟来源; a:内部时钟(CK_INT);b:外部时钟模式1:外部输入脚(TIx);c:外部时钟模式2:外部触发输入(ETR);d:内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器。

  通用定时期内部时钟的产生:

  从截图可以看到通用定时器(TIM2-7)的时钟不是直接来自APB1,而是通过APB1的预分频器以后才到达定时器模块。

  当APB1的预分频器系数为1时,这个倍频器就不起作用了,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB1时钟频率的两倍。

  自动装在寄存器arr值的计算: Tout= ((arr+1)*(psc+1))/Tclk;Tclk:TIM3的输入时钟频率(单位为Mhz)。 Tout:TIM3溢出时间(单位为us)。

  计时1S,输入时钟频率为72MHz,加入PSC预分频器的值为35999,那么: ((1+psc )/72M)*(1+arr )=((1+35999)/72M)*(1+arr)=1秒 则可计算得出自动窗装载寄存器arr=1999。

  通用定时器PWM工作原理

  以PWM模式2,定时器3向上计数,有效电平是高电平,定时器3的第3个PWM通道为例:

  定时器3的第3个PWM通道对应是PB0这引脚,三角顶点的值就是TIM3_ARR寄存器的值,上图这条红线的值就TIM3_CCR3 当定时器3的计数器(TIM3_CNT)刚开始计数的时候是小于捕获/比较寄存器(TIM3_CCR3)的值,此时PB0输出低电平,随着计数器(TIM3_CNT)值慢慢的增加。

  当计数器(TIM3_CNT)大于捕获/比较寄存器(TIM3_CCR3)的值时,这时PB0电平就会翻转,输出高电平,计数器(TIM3_CNT)的值继续增加,

  当TIM3_CNT=TIM3_ARR的值时,TIM3_CNT重新回到0继续计数,PB0电平翻转,输出低电平,此时一个完整的PWM信号就诞生了。

  PWM输出模式

  STM32的PWM输出有两种模式:

  模式1和模式2,由TIMx_CCMRx寄存器中的OCxM位确定的(“110”为模式1,“111”为模式2)。区别如下:

  110:PWM模式1,在向上计数时,一旦TIMx_CNT

  在向下计数时,一旦TIMx_CNT》TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。

  111:PWM模式2-在向上计数时,一旦TIMx_CNTTIMx_CCR1时通道1为有效电平,否则为无效电平。 由以上可知:

  模式1和模式2正好互补,互为相反,所以在运用起来差别也并不太大。而从计数模式上来看,PWM也和TIMx在作定时器时一样,也有向上计数模式、向下计数模式和中心对齐模式

  PWM的输出管脚:不同的TIMx输出的引脚是不同(此处设计管脚重映射) TIM3复用功能重映射:注:重映射是为了PCB的设计方便。值得一提的是,其分为部分映射和全部映射

  PWM输出频率的计算:PWM输出的是一个方波信号,信号的频率是由TIMx的时钟频率和TIMx_ARR这个寄存器所决定的;输出信号的占空比则是由TIMx_CRRx寄存器确: 占空比=(TIMx_CRRx/TIMx_ARR)*100% PWM频率的计算公式为:

  其中F就是PWM输出的频率,单位是:HZ; ARR就是自动重装载寄存器(TIMx_ARR); PSC 就是预分频器(TIMx_PSC); 72M就是系统的频率;STM32 高级定时器PWM的输出。

  一路带死区时间的互补PWM的波形图

  STM32F103VC这款单片机一共有2个高级定时器TIM1和TIM8,这2个高级定时器都可以同时产生3路互补带死区时间的PWM信号和一路单独的PWM信号,具有刹车输入功能,在紧急的情况下这个刹车功能可以切断PWM信号的输出 还具有支持针对定位的增量(正交)编码器和霍尔传感器电路。

  高级控制定时器(TIM1 和TIM8) 由一个16位的自动装载计数器组成,它由一个可编程的预分频器驱动,它适合多种用途,包含测量输入信号的脉冲宽度( 输入捕获) ,或者产生输出波形(输出比较、PWM、嵌入死区时间的互补PWM等)。

  使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几个毫秒的调节。高级控制定时器(TIM1 和TIM8) 和通用定时器(TIMx) 是完全独立的,它们不共享任何资源。

  死区时间

  H桥电路为避免由于关断延迟效应造成上下桥臂直通,有必要设置死区时间,死区时间可有效地避免延迟效应所造成的一个桥臂未完全关断,而另一桥臂又处于导通状态,避免直通炸开关管。

  死区时间越大,电路的工作也就越可靠,但会带来输出波形的失真以及降低输出效率。 死区时间小,输出波形要好一些,但是会降低系统的可靠性,一般这个死区时间设置为us级。

  元器件死区时间是不可以改变的,它主要是取决于元器件的制作工艺和材料!原则上死区时间当然越小越好。设置死区时间的目的,其实说白了就是为了电路的安全。最佳的设置方法是:在保证安全的前提下,设置的死区时间越小越好。以不炸功率管、输出不短路为目的。

  STM32死区时间探究

  设置寄存器:就是刹车和死区控制寄存器(TIMx_BDTR),这个寄存器的第0—7位,这8个位就是用来设置死区时间的,使用如下:

  以TIM1为例说明其频率是如何产生的。定时器1适中产生路线:

  系统时钟-》 AHB预分频 -》 APB2预分频 –》 TIM1倍频器–》 产生TIM1的时钟系统

  流程图看可以看出,要想知道TIM1的时钟,就的知道系统时钟,AHB预分频器的值,还有APB2预分频器的值,只要知道了这几个值,即可算出TIM1的时钟频率?

  这些值从何来,在“SystemInit()”这个时钟的初始化函数中已经给我们答案了,在这个函数中设置的系统时钟是72MZ,AHB预分频器和APB2预分频器值都是设置为1,由此可算出:TIM1时钟频率:

  72MHZ了,TDTS=1/72MHZ=13.89ns

  Tdtg死区时间步进值,它的值是定时器的周期乘以相应的数字得到的。

  下面看看官方给的公式如何使用,如下:

  DTG[7:5]=0xx=》DT=DTG[6:0]×Tdtg,Tdtg=TDTS

  首先由DTG[7:5]=0xx可以知道的是:DTG的第7位必须为0,剩余的0~6这7位可配置死区时间,假如TIM1的时钟为72M的话,那么由公式Tdtg=TDTS可计算出:TDTS=1/72MHZ=13.89ns。

  有了这个值,然后通过公式DT=DTG[6:0]×Tdtg即可计算出DT的值。

  如果DTG的第0~6位均为0的话,DT=0

  如果DTG的第0~6位均为1的话,DT=127*13.89ns=1764ns 如果TIM1的时钟为72M的话,

  公式1可设置的死区时间0~1764ns,也就是说:

  如果你的项目需要输出的PWM信号要求的死区时间是0——1764ns的时候你就可以用公式1

  同样可计算出4个公式的死去区间,如下:

  公式1:DT=0~1764ns

  公式2:DT=1777.9ns~3528.88ns 公式3:DT=3555.84ns~7000.56ns 公式4:DT=7111.68ns~14001.12ns

  如何设置死区时间

  假如我们设计了一个项目要求输出的PWM信号中加入一个3us的死区时间因为3us这个值在第二个公式决定的死区范围之内所以选择第二个公式。3000/(13.89*2)=108, 所以DTG[5:0]=108-64=44

  所以DTG=127+44+32=203=0XCB,TIM1-》BDTR|=0Xcb

  这里为什么要在加上一个32那?在公式2中DTG的第5位是一个X,也就是说这一位可以设置为高电平,也可以设置为低电平,在这里我们将这一位设置为了高电平,所有要在加上一个32.如此而已!


关键字:stm32f103  定时器  看门狗 引用地址:stm32f103定时器,STM32F103的11个定时器详解

上一篇:STM32定时器触发ADC的时序话题
下一篇:STM32系列里RTC的亚秒特性及功能(上)

推荐阅读最新更新时间:2024-11-16 20:36

STM32F103_TIM3输出PWM波实现全彩呼吸灯
一、LED灯 1. 必须是全彩RGB_LED灯 2. 通过不同的红绿蓝三色LED混合出256种颜色,同电脑画图里的调色RGB888,每个灯各用8位控制其亮度,其中全灭表示黑色。 二、 1. LED亮度等级表 /* LED亮度等级 PWM表,指数曲线 ,此表使用工程目录下的python脚本index_wave.py生成*/ const uint16_t indexWave = { 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 11, 12
[单片机]
一种嵌入式时钟管理器的设计与实现
目前,在嵌入式产品的研发中,低档微处理器软件多采用裸机开发模式实现。在这种开发模式中,常有如下需求: (1)在经历特定的时间段后,执行特定操作; (2)根据给定周期执行特定操作。 传统的作法是利用前后台方式:设定硬件定时器,使其在后台以特定周期对各相关操作的标志变量作计数操作;前台则不断对各标志变量巡回查询,若发现标志变量达到预定值,则执行特定操作。可见,上述需求需直接操作硬件定时器实现,其过程繁琐,且需要用户对相关硬件有深入了解。因此,本文设计、实现了一种使用方便的低端系统时钟管理器。 本时钟管理器适用于可提供至少一个硬件定时器的处理器。其为用户提供了有益、友好的裁剪途径,以满足不同目标系统的实际需要。通过裁剪,该时钟管
[单片机]
一种嵌入式时钟管理器的设计与实现
STM32延时函数的四种方法:普通延时(2种)、SysTick 定时器延时(2种)
STM32延时函数的三种方法:普通延时、SysTick 定时器延时(1.中断方式;2.非中断方式) 单片机编程过程中经常用到延时函数,最常用的莫过于微秒级延时delay_us( )和毫秒级delay_ms( )。 1.普通延时法 (1)普通延时法1 这个比较简单,让单片机做一些无关紧要的工作来打发时间,经常用循环来实现,不过要做的比较精准还是要下一番功夫。下面的代码是在网上搜到的,经测试延时比较精准。 //粗延时函数,微秒 void delay_us(u16 time) { u16 i=0; while(time--) { i=10; //自己定义 while(i--) ;
[单片机]
STM32延时函数的四种方法:普通延时(2种)、SysTick <font color='red'>定时器</font>延时(2种)
avr定时器T0,T1,T2初始化配置及其说明
#include iom16v.h #include macros.h unsigned char shi,fen,miao; unsigned char t=0; #define DATA_T0_INIT 156 #define DATA_T1_INIT 31249 #define DATA_T2_INIT 156 unsigned int T0_CAPT=0; //T0/C0溢出中断向量端口 #pragma interrupt_handler Timer0_over:iv_TIMER0_OVF //T0/C0比较匹配中断向量端口 #pragma interrupt_handler Timer0_COMP:iv_TIMER
[单片机]
M16的T1 16位定时器一共有15种工作模式,其他2个8位定时器
分5种工作类型 1 普通模式 WGM1=0 跟51的普通模式差不多,有TOV1溢出中断,发生于TOP时 1 采用内部计数时钟 用于 ICP捕捉输入场合---测量脉宽/红外解码 (捕捉输入功能可以工作在多种模式下,而不单单只是普通模式) 2 采用外部计数脉冲输入 用于 计数,测频 其他的应用,采用其他模式更为方便,不需要像51般费神 2 CTC模式 WGM1=4,12 跟51的自动重载模式差不多 1 用于输出50%占空比的方波信号 2 用于产生准确的连续定时信号 WGM1=4时, 最大值由OCR1A设定,TOP时产生OCF1A比较匹配中断
[单片机]
如何利用外部中断和定时器测量信号频率?
摘要:利用定时器产生PWM波。然后利用32的外部中断和定时器来测量32输出的波形硬件:STM32F103C8T6核心板、示波器、串口调试助手所用到的的引脚为PA8和PA0。测量方案:在第一次外部中断(上升沿触发)到之时,开启定时器,同时计数器清零。然后等待第二次中断到来,在第二次外部中断(上升沿触发)到之时,获取计数器的计数值,同时关闭计数器。因为知道了计数器计数一个数的时间,所以在第二次外部中断(上升沿触发)到之时,获取计数器的计数值,通过这个值就知道一个脉冲的时间周期。时间周期的倒数就是外部信号的频率。 一、利用TIM1的CH1产生PWM波pwm.c #include “pwm.h” void TIM1_PWM_Init(
[单片机]
如何利用外部中断和<font color='red'>定时器</font>测量信号频率?
按键控制音阶声音输出
/* 程序效果:用按键控制音符的输出,用单片机定时器控制频率,驱动喇叭发出不同的声音。一个简单的电子琴。 */ #include reg52.h //头文件 #define uchar unsigned char //宏定义 #define uint unsigned int sbit fmq=P3^4; //定义蜂鸣器的引脚 uchar code freq ={ //这些音乐频率我也不懂,关键是我不懂音律 0xA9,0xEF,//00220HZ ,1 //0 0x93,0xF0,//00233HZ ,1# 0x73,0xF1,//00247HZ ,2 0x49,0xF2,//00262HZ ,2# 0x07,0xF3,//
[单片机]
Msp430定时器的介绍及其基本应用
Msp430定时器的介绍及其基本应用 Msp430单片机一共有5种类型的定时器。 看门狗定时器(WDT)、基本定时器(Basic Timer1)、8位定时器/计数器(8-bit Timer/Counter)、定时器A(Timer_A)和定时器B(Timer_B)。但是这些模块不是所有msp430型号都具有的功能。 1、看门狗定时器(WDT) 学过电子的人可能都知道,看门狗的主要功能就是当程序发生故障时能使受控系统重新启动。 msp430中它是一个16位的定时器,有看门狗和定时器两种模式。 2、基本定时器(Basic Timer1) 基本定时器是msp430x3xx和msp430F4
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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