打印
[技术问答]

问下定时器的赋值

[复制链接]
7812|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者

我看这里只写了个初始值和计数规则。
所以,还是有点不太理解,1ms是如何计算的,就是一个计数时长,和装载值的关系。

那ST的定时器来说,会有个分频设置,设置好之后就是一个计数,用时多少,比如1us,
然后再有个装载初始值设置,比如设置1000,就是1ms。

使用特权

评论回复
地板
zsm123| | 2021-9-14 10:04 | 只看该作者
本帖最后由 zsm123 于 2021-9-14 10:09 编辑

有个疑问, 为什么是

48000000 / (1000 - 1);

而不是

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


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



使用特权

评论回复
5
RunningX| | 2021-9-14 10:09 | 只看该作者
zsm123 发表于 2021-9-14 10:04
有个疑问, 为什么是

48000000 / (1000 - 1);

48000000 / 1000 - 1;这个是对的

使用特权

评论回复
6
sparrow054|  楼主 | 2021-9-14 18:45 | 只看该作者
额~~~还是没明白

使用特权

评论回复
7
yubing823| | 2021-10-14 11:20 | 只看该作者
48000000,代表频率。1000振动了1000次,但是你是从0开始计数的,计数到999代表已经振动了1000次。。。。。。。。。
周期应该是 (x+1)/48000000.

使用特权

评论回复
8
sparrow054|  楼主 | 2021-10-14 17:23 | 只看该作者
是启动定时器后,第一个频率脉冲后是0,第二个频率脉冲后是1么?

使用特权

评论回复
9
yubing823| | 2021-10-15 14:41 | 只看该作者
sparrow054 发表于 2021-10-14 17:23
是启动定时器后,第一个频率脉冲后是0,第二个频率脉冲后是1么?

先搞懂计数器。向上计数方式,就是从0开始,向下计数就是从999开始。

使用特权

评论回复
10
sparrow054|  楼主 | 2021-10-18 17:49 | 只看该作者
yubing823 发表于 2021-10-15 14:41
先搞懂计数器。向上计数方式,就是从0开始,向下计数就是从999开始。

恩恩,懂了!!

使用特权

评论回复
11
单片小菜| | 2021-10-27 14:54 | 只看该作者
每天明白,这个数据是怎么计算出来的?

使用特权

评论回复
12
kiwis66| | 2021-11-1 10:02 | 只看该作者
yubing823 发表于 2021-10-15 14:41
先搞懂计数器。向上计数方式,就是从0开始,向下计数就是从999开始。

恩,这个很关键

使用特权

评论回复
13
leeanfux| | 2021-11-1 20:38 | 只看该作者
48000000/1000就是1ms的计数值,就是计数器计到48000=48K时,就是1ms。减去1是因为要减到0,而不是减到1才触发中断。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

128

主题

725

帖子

2

粉丝