【STM32基础学习】定时器使用(HSE时钟倍频PLL 72M)

发布者:w2628203123最新更新时间:2021-09-22 来源: eefocus关键字:STM32  定时器使用 手机看文章 扫描二维码
随时随地手机看文章

1、STM32F103ZE 定时器资源介绍

共有 11 个定时器


包括 2 个高级控制定时器、4 个通用定时器、2个基本定时器(TIM6/TIM7),以及 2 个看门狗定时器和 1 个系统定时器(SysTick)。

这里写图片描述

2、基本定时器

包括 TIM6 和 TIM7 两个定时器模块


由计数器寄存器(TIMx_CNT)(和51的TH/TL一样一样的。。。。)、预分频寄存器(TIMx_PSC)、自动重装载寄存器(TIMx_ARR)三部分构成。


3、定时器时钟

时钟源有三个,HSI、HSE 和 PLL。

HSI - 由 内部 RC 振荡器产生8MHz,精度较差,对时钟精度不敏感的情况下使用;


HSE - 由 外部时钟源产生8MHz信号;


PLL - 是将 HSI 或者 HSE 的时钟倍频后提供的时钟频率


AHB 域和 APB2最大时钟频率为 72MHz,而 APB1 域允许的最大时钟频率为 36MHz。

这里写图片描述

图红色圈住的,注释“自动进行1倍或2倍 倍频”这个怎么理解呢?


就是前面的分频器加入进行1分频(就是不分频),那么后面倍频器就进行1倍频。前面的分频器进行2分频,那么后面的倍频器就进行2倍频!


当AHB提供的时钟源是72M时,那么APB1的预分频器最小需要配置成2分频!


AHB、APB 和定时器都具有预分频器,并且定时器自身还具备在特定条件下 2 倍频的功能,因此计算定时器的计数频率要充分考虑所有的影响因素,


定时器时钟 CK_CNT = CK_PSC/ (TIM_Prescaler + 1),其中 TIM_Prescaler 为定时器预分频系数,系数加 1 为实际定时器分频数。


可能还有疑问,可以重新回到前面的预分频0到3的变化,再感受下。

这里写图片描述

实际编程

这里写图片描述

4、关于基本定时器的编程步骤

固件库函数中没有针对基本定时器的配置函数,但是基本定时器我们可以看做是通用寄存器的阉割版,只是部分功能少了,所以可以直接像通用寄存器一样操作也是可以的。


1、配置结构体成员

这里写图片描述

2、 NVIC 中断优先级设置

这里写图片描述

3、清除中断标志位


TIM_ClearITPendingBit(TIM_TypeDef* TIMx, u16 TIM_IT) 中断标志位清除函数预先清除标志位。避免困扰!


4、中断初始化


TIM_ITConfig(TIM_TypeDef* TIMx, u16 TIM_IT, 

FunctionalState NewState)

;TIMx 的 x 为 1~8,表示使用哪个定时器;TIM_IT 表示中断源类型,

NewState 为中断是否使能

这里写图片描述

STM32 的定时器有 6 种中断源类型,这 6 个中断源不仅都可以触发中断,每种类型还可以单独设置中断使能。

这里写图片描述

(基本定时器重点关注TIM_IT_Update)


TIM_IT_Update:表示更新事件中断,比如计数器向上溢出/向下溢出,计数器初始化等都可以导致定时器的标志位更新,基本定时器通常都是用这个中断源!


TIM_IT_CC1~4:都是捕获/比较中断,即外部信号输入捕获、输出比较,高级和通用寄存器有这个功能,基本定时器没有这个功能!(学习可类比51中的PCA)。


TIM_IT_Trigger:表示触发事件中断。和 51 单片机的外部计数器功能类似,STM32 也可以通过外部信号实现定时器的启动、停止、初始化等,这种中断源叫触发中断源。这个功能应用比较少,基本定时器也没有,高级和通用寄存器具有这个功能。


5 、使能定时器


TIM_Cmd(TIM_TypeDef* TIMx,

FunctionalState NewState)


一般上中断服务函数是放在, stm32f10x_it.c 文件中的,但是使用时要特别注意,该文件还有9个与异常中断相关的函数,只需再后面添加自己的中断服务函数即可,不要删除已有的异常。


###5、定时时间代码的一点困惑记录

这里写图片描述

72M进行7200分频,然后分之一,对应的每计一个数的时间。

乘以100000,对应计这么多数的时间,便有了总的定时时间。


至于为什么72M呢?

这里写图片描述

课程中的两个细节记录:


①、清除中断标志位

这里写图片描述

似乎是很小的毛病,要是让自己来做,可能就会直接忽略的东西,但是他们却鲜明的写了出来,并告诉读者这里的误区,反思自己为什么考虑不到或者习惯性的选择忽略呢?其实你我之间普通人的差距本不大,无不是这些细节成就了个人,向工程师致敬,向工程师看齐。


②、中文版翻译的一点关于自动重装载影子寄存器的错误

这里写图片描述

关键字:STM32  定时器使用 引用地址:【STM32基础学习】定时器使用(HSE时钟倍频PLL 72M)

上一篇:【STM32小知识】TIM6的时钟频率疑问
下一篇:【STM32基础学习】八种GPIO模式总结

推荐阅读最新更新时间:2024-11-07 20:49

STM32 V3.5固件库下SysTick的使用
SysTick定时器被捆绑在NVIC中,用于产生SysTick异常(异常号:15)。在以前,操作系统还有所有使用了时基的系统,都必须一个硬件定时器来产生需要的 滴答 中断,作为整个系统的时基。滴答中断对操作系统尤其重要。例如,操作系统可以为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统 心跳 的节律。 Cortex-M3处理器内部包含了一个简单的定时器。因为所有的CM3芯片都带有这个定时器,软件在不同 CM3器件间的
[单片机]
STM32 串口烧写 FLASH 外部字库 UCGUI显示 自我学习总结
最近学习TFT显示问题,在多种汉字显示方面有点难,主要是字库太大,几个字库就不得了。开始是使用SD卡向外部FLASH---W25X16写,完全能够完成。后来觉得这样比较麻烦,有时候还没有SD接口,于是打算用串口写一下试一试,网上有很多人说会丢失数据,在后面的试验中暂时没有发现。 我是在我前段时间学习的UCGUI的基础基础上修改的。 主要功能是----启动开发板,首先写入地址指令----必须十六进制----比如---2A 23 00 05 00 03 23 2A-----其中2A,23为验证码,前后都有,第3,4位是地址码,前面就表示将要写入的起始地址是0x05*4096,第5,6位是为了写入数据将要从起始地址连续擦除的扇区
[单片机]
<font color='red'>STM32</font> 串口烧写 FLASH 外部字库 UCGUI显示 自我学习总结
STM32的上拉和下拉电阻
STM32F10X I/O可以通过配置寄存器使能弱上拉或下拉电阻,根据datasheet,这个电阻为:min=20K, typ=30K, max=40K。 STM32F10X I/O的输入可以配置为floating/pull up/pull down三种方式。 对STM32F10X来说,系统reset后I/O的状态为Floating input。所以如果有电路的输入依赖于I/O的电平,必须设置合适的上拉或下拉电阻,否则会出现不定态或者毛刺。 STM32F10X JTAG 输入管脚上电复位后的上拉/下拉状态: ● NJTRST: Internal pull-up ● JTDI: Internal pull-up ● JTMS/SWD
[单片机]
GPRS无线终端测试系统电路设计
基于高性能单片机STM32($20.3400)和GPRS无线通信方案实现了对测试点CMMB网络覆盖情况的实时监测,并利用GPS接收器将测试终端的地理位子信息上传到服务器端,完成了对监测终端的精准定位。终端板卡供电方式采用太阳能供电系统,保障其在无电源和人员看守的情况下长期稳定的工作。最后通过综合测试,能实现所有要求的功能,完全满足本次设计的要求。 系统分为测试终端和服务器端,服务器端只需要一台性能良好的个人计算机,而测试终端主要由以下几个模块构成:射频前端模块模块、功率测量与存储模块、GPS接收器、太阳能供电模块、处理器模块及GPRS无线通信模块。各个模块主要是通过STM32($20.3400)微处理器的GPIO口连接与通信。
[单片机]
GPRS无线终端测试系统电路设计
STM32在Ubuntu上编写USB上位机程序实现
libusb 介绍 libusb是开源的C库,使用该库是的用户可以在应用程序中直接访问 USB 设备,无需为 USB 设备编写内核驱动。libusb支持多个平台 (linux, window, ios),所以可以很方便地将应用程序移植到其他平台。 linux libusb 安装 从网上下载libusb的源码,下载地址:http://www.libusb.org/, 下载后编译安装。 # tar jxvf libusb-1.0.20.tar.bz2 # cd libusb-1.0.20 # ./configure # make # sudo make install ubuntu下可以通过以下命令快速安装。
[单片机]
独立看门狗定义及使用场景
【认识STM32】 F1 代表了基础型,基于 Cortex-M3 内核,主频为72MHZ,F4 代表了高性能,基于 Cortex-M4 内核,主频 180M。 【GPIO外设】 一、GPIO的八种工作模式 1、上拉输入:IO口在无输入的情况下,保持高电平。 2、下拉输入:IO口在无输入的情况下,保持低电平。 3、浮空输入:浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。 4、模拟输入:输入信号不经施密特触发器直接接入,输入信号为模拟量而非数字量,其余输入方式输入数字量。 5、推挽输出:可以输出高、低电平,连接数字器件;推挽结构一般是指两个三极管分别受两个
[单片机]
独立看门狗定义及<font color='red'>使用</font>场景
STM32时钟讲解(内部构架说明)
在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。 其实是四个时钟源,如下图所示(灰蓝色),PLL是由锁相环电路倍频得到PLL时钟。  ①、HSI是高速内部时钟,RC振荡器,频率为8MHz。  ②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。  ③、LSI是低速内部时钟,RC振荡器,频率为40kHz。  ④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。  ⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。 其中40kHz的LSI供独立看门狗IW
[单片机]
<font color='red'>STM32</font><font color='red'>时钟</font>讲解(内部构架说明)
STM32配置IIC接口通信方式参考源码
最近在读取SHT3x系列sensor的温度和湿度,用到的是IIC接口。 顺便写了一下STM32的IIC接口。 这次配置的是STM32内部的IIC接口。 注意:读的时候,怎么发送Ack, 和 NAck信号,参考stm的设计文档。 #include Dev_SHT3X.h #include globalDef.h #include stdio.h #define I2C1_OWN_ADDRESS7 0x0A #define I2C_Speed 40000 #define SHT3X_ADDRESS 0x44 /* read out command */ #define CMD_READH_SHX
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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