STM32学习笔记:通用定时器基本设定

发布者:czc天天最新更新时间:2018-08-17 来源: eefocus关键字:STM32  通用定时器  基本设定 手机看文章 扫描二维码
随时随地手机看文章

STM32 包含11个定时器,其中TIM2~TIM5为通用定时器。


通用定时器挂载在低速外设总线APB1上,其时钟来源于输入为APB1的一个倍频器,只要APB1的时钟分频数不为1,TIMx的时钟频率就会为APB1时钟频率的2倍,即72MHz 。




配置通用定时器需要4步(以配置TIM2为例):


(1)配置系统时钟


RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);倍

开启TIM2与GPIOA的时钟,其中TIM2挂载在APB1上,GPIOA挂载在APB2上;

(2)配置NVIC


NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置NVIC中断分组2,2位抢占优先级,2为子优先级

NVIC_InitStructure.NVIC_IRQChannel = TIM2_UP_IRQn;//设置中断为TIM2上升中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//抢占优先级1

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;//子优先级3

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能中断

NVIC_Init(&NVIC_InitStructure);

(3)配置GPIO


GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;//PA0,PA1,PA2,PA3

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//设置为端口复用模式    

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

(4)配置TIMER


TIM_DeInit(TIM2);

TIM_TimeBaseStructure.TIM_Period = arr;           

TIM_TimeBaseStructure.TIM_Prescaler = psc;           

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;  

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  

TIM_ARRPreloadConfig(TIM2, ENABLE);  

TIM_Cmd(TIM2, ENABLE); 

[cpp] view plain copy

  

1.利用TIM_DeInit将TIMER设置为缺省值;

2.TIM_Period设置自动装入的值,累计(TIM_Period+1)个时钟脉冲后产生更新或中断;


3.TIM_Prescaler设置预分频系数,定时器的时钟频率=72Mhz/(TIM_Prescaler+1);


定时器频率=((1+TIM_Prescaler )/72M)*(1+TIM_Period )


       例:如果想要设置定时器频率为1秒,可以设置


TIM_Prescaler=35999,TIM_Period=1999 //2Khz的频率,计数到2000



TIM_Prescaler=7199,TIM_Period=9999 //10KHz的频率,计数到10000


两种不同的参数设置都会使定时器的频率为1秒,但是在作为PWM输出时会有细度不同的问题,后者的细度更高些,作者更倾向于第二种配置。


4.TIM_ClockDivision设置时钟分割,可设置为TIM_CKD_DIV1,TIM_CKD_DIV2,TIM_CKD_DIV4,


当设置为TIM_CKD_DIV1时:

       TDTS = Tck_tim

当设置为TIM_CKD_DIV2时:

       TDTS = 2Tck_tim

当设置为TIM_CKD_DIV4时:

       TDTS = 4Tck_tim;


TIM_ClockDivision的作用就是在未分频之前根据要求建立新的分频器,确定定时器,确定一定的延时时间,在此时间内完成一定预期的功能,一般不太用,所以无论是定义上文中的哪个值对原本定时器的频率都毫无影响,不过并不是没有作用的,以后会有能用到的地方。



5.TIM_CounterMode设置计数模式,可以设置为向上计数、向下计数和中央对齐计数,其中比较常用的为向上计数模式TIM_CounterMode_Up和向下计数方式TIM_CounterMode_Down;


6.TIM_RepetitionCounter设置重复溢出次数,就是多少次溢出后会给你一次中断,一般设置为0,只有高级定时器才有用;


7.TIM_ARRPreloadConfig设置是否使用 预装载缓冲器;


8.TIM_Cmd来开启定时器TIM2;


关键字:STM32  通用定时器  基本设定 引用地址:STM32学习笔记:通用定时器基本设定

上一篇:STM32定时器时间的计算方法
下一篇:STM32的时钟分割

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

STM32—RTC
什么是RTC ? RTC:实时时钟(Real-Time Clock),利用RTC可以实现产品的精确计时,比如平时用的笔记本电脑、电子日历等都有RTC模块,当主电源断电时,RTC的模块用电池来供电,继续进行计时。STM32中的RTC和定时器有点类似,有一个32位的计数器,可以计数2的32次方,大约可以计时136年。 RTC的结构框图 RTC的时钟源(STM32L1系列,其它系列的芯片时钟源会略有不同,但都是这三类): (1) LSE 32.768kHz (2)HSE,最大1Mhz (3)LSI,内部低速时钟,L1系列是37k,F2系列是32K,F4系列是40K,频率不一样,预分频值的设定也不一样。 RT
[单片机]
<font color='red'>STM32</font>—RTC
STM32的硬件CRC32使用
最近用到STM32的CRC32模块,看一下官网的Lib,感觉用起来十分简单.但是,你会发现直接使用起来会出现,与很多在线CRC32的网站或者PC端的CRC32校验工具计算结果不一致! 简直就是无语...... 搜索了一下,在21IC的论坛上面有关使用STM32的CRC32的大讨论,不过是09年的帖子.主要定论是STM32的CRC32与目前大多数的PC端软件使用的一些数据顺序及方法不一致.这里主要推荐看一下这个链接: STM32内置CRC模块的使用 讨论的很火. 如果真如,那帖子说的那样.那么作为MCU这端,是有必要进行转换,要适应潮流.当然这里不是说ST不好. 按照帖子的结论: 1、每个字节的位序相反。stm32f是按32位,高位
[单片机]
<font color='red'>STM32</font>的硬件CRC32使用
【实验五】窗口看门狗实验
一、实验目的 1)了解STM32窗口看门狗; 2)了解STM32窗口看门狗与独立看门狗的异同; 3)会使用窗口看门狗; 4)利用STM32窗口看门狗的中断功能来喂狗。 二、STM32 窗口看门狗简介 窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新,看 门狗电路在达到预置的时间周期时,会产生一个MCU复位。在递减计数器达到窗口寄存器数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新, 那么也将产生一个MCU 复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。 简而言之,窗口看门狗有两个门限就上窗口和下窗口;下
[单片机]
STM32 USB学习笔记2
主机环境:Windows 7 SP1 开发环境:MDK5.14 目标板:STM32F103C8T6 开发库:STM32F1Cube库和STM32_USB_Device_Library STM32Cube库中提供了一些有关USB的例程,在其工程目录下的Applications目录中,这里打开STM3210E_EVAL目录,可以看到如下例程: 这里选取一个简单的例子CDC_Standalone,为一个USB通信例程,具体实现是一个USB转串口的功能,相当于USB串口线。把示例里面的inc和src目录下的文件拷贝到新建工程中,这里是把跟usb通信相关的文件放到了vcp目录下。文件目录结构如下:
[单片机]
<font color='red'>STM32</font> USB学习笔记2
stm32几种输出模式解析
推挽输出:可以输出高,低电平,连接数字器件;推挽结构一般指两个三极管分别受腹部的信号的控制,总是在一个三极管导通时,另一个截止。 输出0时,N-MOS导通,P-MOS高阻,输出0。 输出1时,N-MOS高阻,P-MOS导通,输出1(不需要外部上拉电路) 开漏模式:输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行,适合做电流驱动,器吸收电流的能力相对较强 输出0时,N-MOS导通,P-MOS不激活,输出0。 输出1时,N-MOS高阻,P-MOS不激活,输出1,(需要外部上拉电路) 另外,在输出模式下,通常要设置输出速度,这个速度指的是I/O口驱动电路的响应速度,而不是输出信号的速度,输出信号的输出速度取决
[单片机]
STM32入门编程总结(时钟+GPIO)
时钟,单片机的时钟好比人的心脏,时钟歇了,单片机也就停止工作了,51单片机就一个时钟,12M、11.0592M居多,11.0592M这么有零有整奇葩的频率主要是为了51单片机串口通信波特率能正好是个整数;STM32单片机有四个时钟,HSI、HSE、LSI、LSE,HIS是内部高速时钟(RC振荡器)8Mhz,经过倍频器后,单片机主频上限可以达到64Mhz,HSE是外部高速晶振8Mhz,经过倍频器后单片机主频上限可以达到72Mhz,LSI是内部低速40Khz时钟(RC振荡器),可以为RTC(实时时钟类似于DS1302)提供时钟,也可以为独立看门狗提供时钟,LSE是32.768khz晶振,为RTC提供时钟,32.768khz这么有零有整
[单片机]
STM32入门学习笔记之低功耗实验
13.1 STM32低功耗模式概述 STM32在系统或电源复位后,芯片处于运行状态,此时HCLK为CPU提供时钟,内核执行程序代码,当CPU不需要继续运行时,可以采用低功耗模块来降低芯片的运行电流,STM32有3种低功耗模式: (1)睡眠模式:内核停止,外设继续运行 (2)待机模式:1.8V的内核电源被关闭,SRAM内容丢失,PLL,HIS,HSE振荡器断电,此模式下最低电流2uA (3)停机模式:停止所有时钟,此模式下最低电流20uA 上述三种模式的配置与唤醒条件如下表所示。 模式 进入操作 唤醒 睡眠 WFI指令 任一中断 WFE指令 唤醒事件 待机 PDDS位+SLEEPDEEP位+WFI或者WFE WKUP
[单片机]
STM32 IAP 升级功能
IAP In Application Programming 可通过USB,CAN,UART,I2C,SPI等接口实现 IAP流程 Bootloader程序:接收升级程序,更新到flash指定地址;跳转到指定地址执行 STM32设置 ①:为Bootloader预留0x10000空间 ②:设置APP程序的起始地址 ③:中断向量表的偏移量设置 ④:生成bin文件 详见:https://blog.csdn.net/zhangxuechao ⑤:代码更新FLASH固件,执行FLASH代码 举例 //appxaddr:应用程序的起始地址 //appbuf:应用程序CODE. //appsize:应用程序大小(字节).
[单片机]
<font color='red'>STM32</font> IAP 升级功能
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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