打印
[STM8]

STM8 TIM4定时器自动预装载问题

[复制链接]
5508|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
自动预装载使能时,计数器是怎么计数的,是计数到设定的初值产生更新还是像51那样从初值开始计数到最大值溢出,看了一个datasheet,如下:
● 自动预装载已使能(TIM1_CR1寄存器的ARPE位置位)。在此模式下,写入自动重载寄存器的数据将被保存在预装载寄存器中,并在下一个更新事件(UEV)时传送到影子寄存器。
● 自动预装载已禁止(TIM1_CR1寄存器的ARPE位清除)。在此模式下,写入自动重载寄存器的数据将立即写入影子寄存器。


使能与禁止好像都不影响计数定时,没什么区别啊。
沙发
FAQ| | 2014-4-8 19:48 | 只看该作者
这个关键在于是否立即将自动重装载值写入寄存器中。

如果使能自动预装载的话就应该用TIM1_EGR->UG位置1来强制产生UPDATE EVENT(UEV)事件。从而更新自动重装载寄存器里的值。

使用特权

评论回复
板凳
huzi2099| | 2014-4-8 20:08 | 只看该作者
这个例子里没区别,有问题的时候是cnt走到33赋值为31的时候就乱套了.

使用特权

评论回复
地板
xufangjian1989|  楼主 | 2014-4-9 08:40 | 只看该作者
FAQ 发表于 2014-4-8 19:48
这个关键在于是否立即将自动重装载值写入寄存器中。

如果使能自动预装载的话就应该用TIM1_EGR->UG位置1来 ...

非常感谢您的回答,能不能再详细点,一开始自动重载值放在自动重载寄存器TIM4_ARR中,区别是不是立即将预装载寄存器的值(即TIM4_ARR的值)写入影子寄存器,您所说的写入寄存器是不是就是写入影子寄存器,还有那个更新自动重装载寄存器是不是就是更新影子寄存器的值?像下面TIM4的配置,(定时1ms)
void TIM4_Config(void)
{
     TIM4_TimeBaseInit(TIM4_PRESCALER_128,124);
     TIM4_ClearFlag(TIM4_FLAG_UPDATE);
     TIM4_ITConfig(TIM4_IT_UPDATE,ENABLE);
     enableInterrupts();
     TIM4_Cmd(ENABLE);
}
这里就是默认的没有使能自动预装载功能,如果使能了,该怎么实现,感觉使不使能都无所谓的啊?

使用特权

评论回复
5
xufangjian1989|  楼主 | 2014-4-9 08:44 | 只看该作者
FAQ 发表于 2014-4-8 19:48
这个关键在于是否立即将自动重装载值写入寄存器中。

如果使能自动预装载的话就应该用TIM1_EGR->UG位置1来 ...

额,还有啊,计数溢出时不同样产生UEV事件吗,从而更新寄存器的内容,干嘛还要置位UG呢?

使用特权

评论回复
6
温庆瑞| | 2016-10-10 16:08 | 只看该作者
本帖最后由 温庆瑞 于 2016-10-10 16:10 编辑

兄弟,图与说明写的很明了啊:
● 自动预装载功能。如果上向上计数,可以理解为计数器的顶值,就是说给计数器寄存器的一个预装重,计数器第一次计数时,会跑到FF,再次益处计数时才会跑预装的值。,
● 如果不用自动预装载功能。直接用计数器存寄器写入计数值就行,只是翻译与英文写的文皱皱的,让人一下子难理解。不像国文一样有逻辑性很强。

使用特权

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

本版积分规则

8

主题

16

帖子

1

粉丝