[技术问答] 问下定时器的赋值

[复制链接]
8392|12
 楼主| sparrow054 发表于 2021-9-7 18:19 | 显示全部楼层 |阅读模式
timerConfig.loadValue = (48000000 / (1000 - 1));//定时器时钟只能是外设总线时钟
请问括号里的值,是什么意思,
为什么要这么写

整个函数是这样的
void TIMER_InitHardwr(void)
{
        TIMER_ConfigType timerConfig = {0};
       
        timerConfig.loadValue = (48000000 / (1000 - 1));//定时器时钟只能是外设总线时钟
        timerConfig.linkMode = 0;//不使用多定时器进行链接
        timerConfig.interruptEn = 1;//使能中断
        timerConfig.timerEn = 1;//使能定时器
       
        TIMER_SetCallback(TIMER2,TIM2_IRQnCallBack);//设置中断回调函数
        TIMER_Init(TIMER2,&timerConfig);
}


RunningX 发表于 2021-9-8 09:09 | 显示全部楼层
这么写是为了用户更好理解周期值的设置计算;48000000是APB时钟频率;用来设置1ms的周期时,就是1000分之一。
 楼主| sparrow054 发表于 2021-9-9 11:14 | 显示全部楼层
9032061397b39f20c2.png
我看这里只写了个初始值和计数规则。
所以,还是有点不太理解,1ms是如何计算的,就是一个计数时长,和装载值的关系。

那ST的定时器来说,会有个分频设置,设置好之后就是一个计数,用时多少,比如1us,
然后再有个装载初始值设置,比如设置1000,就是1ms。
zsm123 发表于 2021-9-14 10:04 | 显示全部楼层
本帖最后由 zsm123 于 2021-9-14 10:09 编辑

有个疑问, 为什么是

48000000 / (1000 - 1);

而不是

48000000 / 1000 - 1;
=========================


从示例代码来看, 应该这样写, 楼主的代码有问题
  1. #define Delay1ms    (48000000/1000-1)
  2. #define Delay10ms   (48000000/100-1)



RunningX 发表于 2021-9-14 10:09 | 显示全部楼层
zsm123 发表于 2021-9-14 10:04
有个疑问, 为什么是

48000000 / (1000 - 1);

48000000 / 1000 - 1;这个是对的
 楼主| sparrow054 发表于 2021-9-14 18:45 | 显示全部楼层
额~~~还是没明白
yubing823 发表于 2021-10-14 11:20 | 显示全部楼层
48000000,代表频率。1000振动了1000次,但是你是从0开始计数的,计数到999代表已经振动了1000次。。。。。。。。。
周期应该是 (x+1)/48000000.
 楼主| sparrow054 发表于 2021-10-14 17:23 | 显示全部楼层
是启动定时器后,第一个频率脉冲后是0,第二个频率脉冲后是1么?
yubing823 发表于 2021-10-15 14:41 | 显示全部楼层
sparrow054 发表于 2021-10-14 17:23
是启动定时器后,第一个频率脉冲后是0,第二个频率脉冲后是1么?

先搞懂计数器。向上计数方式,就是从0开始,向下计数就是从999开始。
 楼主| sparrow054 发表于 2021-10-18 17:49 | 显示全部楼层
yubing823 发表于 2021-10-15 14:41
先搞懂计数器。向上计数方式,就是从0开始,向下计数就是从999开始。

恩恩,懂了!!
单片小菜 发表于 2021-10-27 14:54 | 显示全部楼层
每天明白,这个数据是怎么计算出来的?
kiwis66 发表于 2021-11-1 10:02 | 显示全部楼层
yubing823 发表于 2021-10-15 14:41
先搞懂计数器。向上计数方式,就是从0开始,向下计数就是从999开始。

恩,这个很关键
leeanfux 发表于 2021-11-1 20:38 | 显示全部楼层
48000000/1000就是1ms的计数值,就是计数器计到48000=48K时,就是1ms。减去1是因为要减到0,而不是减到1才触发中断。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

128

主题

725

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部