你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

NUCLEO-G071RB之——3、32位定时器TIM2测试

[复制链接]
七哥 发布时间:2019-1-15 11:06
本帖最后由 toofree 于 2019-1-15 12:32 编辑
# @# \% M+ [' c  N4 S$ y
5 q  T) s8 y/ z; f4 C' v5 ?( ?
NUCLEO-G071RB之——3、32位定时器TIM2测试

- j! x% V  r3 ?$ L- A  STM32G071有一个32位定时器TIM2,有必要测试一下。
  直接使用STM32CubeMX中下载的STM32Cube_FW_G0_V1.0.0软件包,复制样例程序“STM32Cube_FW_G0_V1.0.0\Projects\NUCLEO-G071RB\Examples\TIM\TIM_TimeBase”,改名为“TIM_TimeBase_TIM2_32bits”进行测试。

01.jpg


# k* w' p- Z5 a# O& m$ O; G3 w& {

打开STM32CubeMX工程文件“TIM_TimeBase.ioc”,TIM2参数设置,预分频系数和自动装载值在程序中做了宏定义。

02.jpg


- J+ G7 M, Z. I' V

使用TIM2中断功能

03.jpg

: w, R" S* Y5 d  x1 o

使用设置内部时钟,设置系统时钟和TIM2时钟为56MHz。为了确定TIM2的时钟源,有必要在用户手册中确认。

04.jpg

* X+ j/ m! k* w0 c2 B/ d. r

在用户手册中时钟树关系,找到TIM2时钟源,对应为STM32CubeMX中的TPCLK。

11.jpg


3 E0 L5 \8 e+ {0 g( S. n

用户手册中可以看到,TIM2和TIM3几乎相同,除了TIM2的计数寄存器和自动装载寄存器是32位。

TIM2的计数寄存器为32位

12.jpg


6 u7 @% D( K* Z7 d+ P

TIM2的自动装载寄存器为32位,TIM2/TIM3的预分频寄存器均为16位。

13.jpg


+ W1 l- a% w, n; l0 ~0 q. N4 w! N

打开Keil工程,打开"readme.txt"文件,有本工程相关说明。虽是英文,但不难看懂,故无需解释。

20.jpg


# {5 ^1 U6 H' t) R/ L/ ]; j

“main.c”文件中,主函数main,套路比较清晰。无非是设置时钟、设置LED、初始化设置TIM2、中断方式开启TIM2。

21.jpg


; {+ ?" |# O0 d+ v& h, C; T0 Q% U

系统时钟设置,可对照上面STM32CubeMX工程文件中的时钟树理解。

22.jpg


( `1 n% T( M  k( D( s+ i: T

TIM2初始化函数中,使用了两个关键的宏定义,预分频和自动装载值。TIM2的中断回调函数,进一次中断,LED4状态翻转一次。

23.jpg

  x: l( v9 {: V

在“main.h”文件中有预分频和自动装载值宏定义。调用SystemCoreClock来计算预分频系数,预分频寄存器为16位,系数最小为0,最大为65535,因此这里的“10000”也不是乱选。相对来说自动装载参数设置就比较随意一些,32位数,从0到4294967295随意搞。只要这两个宏定义中的“10000”被相同的数代替,那得到的计数器中断频率始终保持1Hz。

24.jpg

$ j  ^1 k! k( C8 w; n% x3 i

先按编译默认工程,下载到开发板,可以看到时钟初始化完成后的SystemCoreClock时钟,的确为56MHz。

31.jpg

5 H9 j4 n. L  y$ s2 d8 P, R7 p( d

修改两个宏定义中的常数“10000”为“56000000”,这里用56000000,因为此数大于24位的最大值16777216,为了验证TIM2计数器的确为32位,而不是16位或24位。

32.jpg

' Q7 Y) C) y8 ^3 g1 I: b3 f

重新编译工程,Debug跟踪执行,可以看到TIM2的自裁装载寄存器ARR值为“3567DFF”,SystemCoreClock时钟为“3567E00”。

33.jpg


9 M# b" c# T& W* C4 {

SystemCoreClock时钟“3567E00”,对应十进制的“56000000”。

34.jpg


+ c7 m2 c. Y4 F4 _1 Z) R) m. T& w

全速运行程序,可以看到板上LD4以0.5Hz的频率在闪烁。

本实验验证TIM2定时器的确为32位,32位定时器的好处就是,可以定好长好长的时间。16位的预分频寄存器和32位计数器配合,相当于一个48位的计数器,即便定时器时钟为100MHz,那么最大计数周期为(2^48-1)/100000000 = 2814749秒 = 32.5天。

(相同的方法,也可以测试TIM3为16位定时器。)


1 g0 G! o9 l! [. U4 H
: r- t' I. R( W& D. m) M

* E9 _! l* h1 Y, j4 M4 t, j; H9 ^8 m4 x. M0 Q4 Q# A
赞 收藏 评论4 发布时间:2019-1-15 11:06

举报

4个回答
STM1024 回答时间:2019-1-15 11:53:55
学习一下,我也正在研究LPTIM
mzy2364 回答时间:2019-1-15 12:11:10
谢谢分享
Kevin_G 回答时间:2019-1-17 17:47:47
LPTIM精度怎么样?
七哥 回答时间:2019-5-13 12:59:42
Kevin201707 发表于 2019-1-17 17:47
0 ~: Y) J( T7 m" ?# e9 K* e7 sLPTIM精度怎么样?

) s( d" l8 h1 G; b硬件定时器精度,取决于晶振精度和频度稳定度。
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版