历史上的今天
今天是:2024年12月14日(星期六)
2018年12月14日 | KST-STM32学习之定时器
2018-12-14 来源:eefocus
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 - 由 8MHz的 RC 振荡器产生,精度较差,对时钟精度不敏感的情况下使用;
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呢?

课程中的两个细节记录:
①、清除中断标志位

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

史海拾趣
|
概述 当前全球范围内,每10秒钟就有一个糖尿病患者因并发症死亡,在同一个10秒钟内,又会新增两例糖尿病患者;受糖尿病影响的人口总数约为2.46亿,预计在未来20年内糖尿病患者的数量会上升至3.8亿。糖尿病是一种终身代谢性疾病,若能得到有效 ...… 查看全部问答> |
|
大家好,我是猎头Kevin,现在急聘2位wince和windows平台的驱动开发,base杭州,本科3~4年,月薪8~10K,注大型企业如果技术精湛年薪20万以下都可以谈。有没有人选帮忙推荐啊?我的联系方式是yaochen21@msn.com手机15857144628,急聘中,所以发这里, ...… 查看全部问答> |
|
各位大侠好: 小弟有一事征询大家意见。 最近在WinCE6.0上开发程序,涉及到总线访问的事情,就是需要去读写一个固定的物理地址。问是否要单独写一个 物理地址访问的驱动啊, 在驱动里面MmMapIoSpace后,再去读写物 ...… 查看全部问答> |
|
Tree View Control 在 WinCE6.0 上 无法用鼠标选择 问题是这样的:我在ce6上使用树控件,可以用上下键选择某个节点,但是不能用鼠标来选择,用鼠标时候点击某个节点没反应,选不上。我添加了NM_CLICK消息响应,但是用鼠标点击时候也不能进到这个消息的响应函数中,所以我觉得该控件根本没有收到系统 ...… 查看全部问答> |
|
vxworks里的powerpc-wrs-vxworks-ar等指什么? 一个软件为在vxworks_powerpc下安装写的makefile中有如下几句: “CCROOT=/net/compiler/gcc_mpt_1.02/bin RANLIB = $(CCROOT)/powerpc-wrs-vxworks-ranlib AR = $(CCROOT)/powerpc-wrs-vxworks-ar cq NM = $(CCROOT)/powerpc-wrs-vxworks-nm” ...… 查看全部问答> |
|
说一下背景: 本人09年小二本毕业,毕业后在上海工作一年,后来深圳,算起来总共工作时间为三年,三年说长不长,说短也不短,由于这两三年一直工作在小公司,主要工作就是单片机的底层开发,还有就是arm7, ...… 查看全部问答> |
|
第10课:开发板的启动方式 1.开发板的启动方式指得是什么?启动方式:ARM上电后,从什么硬件介质上加载第一条指令。2.开发板支持几种启动方式开发板一共支持两种启动方式:NandFlash启动和SD卡启动注:开发板的启动方式的选择是通过拨码开关来控制 ...… 查看全部问答> |




