
在嵌入式应用时,往往需要对代码执行时间进行计算,RT-Thread的系统时钟通常以1ms为单位,无法精确计算1ms以下的操作耗时,可以使用自带的硬件定时器进行操作。 RT-Thread自带定时器外设,但操作相对较复杂,在仅用技术的情况下,可以通过操作寄存器来实现。 由《STM32F4xx中文参考手册.pdf》可知,定时器1-14均挂载在APB1和APB2下,启用定时器之前需要开启对应的时钟。 ![]() ![]() 不同定时器的时钟频率是不一样的,结合CubeMX配置的时钟,可以获知定时器的输入时钟。 ![]() 假如我们使用的是定时器3,其挂载在APB1下,APB1的的外设频率是42MHz,而定时器自带二倍频,所以其时钟输入为84MHz。 那么一个测试程序如下:
1.开启定时器3的时钟使能; 2.设置计数值为0,也就是从0开始计数; 3.设置自动重装载值为65535,因为定时器默认是向上计数的,即记到65535后会变成0; 4.设置预分频为8400,因为输入信号为84MHz,经过预分频后,定时器的计数频率为84000000/8400=10000Hz=10kHz,也就是每过100us会加1; 5.启用定时器,开始计数; 6.模拟一个500ms的操作; 7.关闭定时器,结束计数; 8.打印计数值; 多次执行看看效果: ![]() 可以看出上述结果在499ms到500ms之间。 由于RT-Thread自带的延时操作是基于滴答定时器的,当执行该内容不是因为时间片到期,而是因为上一个线程转入挂起状态导致的,就会出现这种计数值差1ms以内的情况。 上述操作可以很方便的在代码中使用,前提是使用的定时器未在工程中使用。 ———————————————— 版权声明:小盼你最萌哒 如有侵权请联系删除 |