STMCU小助手
发布时间:2023-3-10 18:15
|
在嵌入式应用时,往往需要对代码执行时间进行计算,RT-Thread的系统时钟通常以1ms为单位,无法精确计算1ms以下的操作耗时,可以使用自带的硬件定时器进行操作。# o ]9 \% f. P0 c; B+ f$ K - D4 u- \# v$ V3 K3 N' N0 F RT-Thread自带定时器外设,但操作相对较复杂,在仅用技术的情况下,可以通过操作寄存器来实现。4 ]" R X5 V3 W ( x( O( R! O7 g% z5 ~ 由《STM32F4xx中文参考手册.pdf》可知,定时器1-14均挂载在APB1和APB2下,启用定时器之前需要开启对应的时钟。 . ^ h' b0 H* T5 u; L
* A# @! t5 P! K8 ~/ T 不同定时器的时钟频率是不一样的,结合CubeMX配置的时钟,可以获知定时器的输入时钟。. n; U, F3 F' p _ / A! {1 ?. x4 w4 F
' C0 W s0 ], D6 o, ^: z7 E 假如我们使用的是定时器3,其挂载在APB1下,APB1的的外设频率是42MHz,而定时器自带二倍频,所以其时钟输入为84MHz。. y: E" E# Y/ G2 l& _6 r, o 那么一个测试程序如下:9 ?3 m2 L# Q0 h
1.开启定时器3的时钟使能;: N& ]5 Y0 D! l+ B* M 2.设置计数值为0,也就是从0开始计数; 3.设置自动重装载值为65535,因为定时器默认是向上计数的,即记到65535后会变成0;3 R/ C! b, d- s, K* M& y; r/ z 4.设置预分频为8400,因为输入信号为84MHz,经过预分频后,定时器的计数频率为84000000/8400=10000Hz=10kHz,也就是每过100us会加1; 5.启用定时器,开始计数; 6.模拟一个500ms的操作; 7.关闭定时器,结束计数;9 R' k' `6 i# _1 m { 8.打印计数值; ! h0 o$ N; c/ O8 ] 多次执行看看效果:
% k9 M7 W9 {3 K" [. @, j 可以看出上述结果在499ms到500ms之间。 由于RT-Thread自带的延时操作是基于滴答定时器的,当执行该内容不是因为时间片到期,而是因为上一个线程转入挂起状态导致的,就会出现这种计数值差1ms以内的情况。2 u4 d' u6 I" n/ Y f2 w" q . f* Z3 L5 J9 o2 G2 @. _ 上述操作可以很方便的在代码中使用,前提是使用的定时器未在工程中使用。3 i- j Q1 F$ ~$ C3 N8 u0 R* h1 t ———————————————— 版权声明:小盼你最萌哒' q; X6 v+ C1 N9 V1 l6 P$ H4 K 如有侵权请联系删除( E; E+ ~4 `6 E# b9 |" p |
【福利三:雨露均沾·逢7狂欢】之四:用一个定时器同步另外两个定时器输出PWM
【逢7发帖赢大礼】STM32开发之WIFI实时时钟
【逢7发帖赢大礼】STM32开发之指纹识别!
【逢7发帖赢大礼】STM32开发之环境空气质量监测
【逢7发帖赢大礼】STM32开发之人体实时运动信息监测!
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
【逢7发帖赢大礼】全网最简单的Arduino_STM32开发环境搭建教程!
STM32F4中文用户手册
STM32F400、STM32F402 Cortex-M4超值单片机
SPI 高温读错最后一位?STM32F42xx 官方根治方案
微信公众号
手机版