OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8921|回复: 5

STM8S定时器的预分频器问题

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2014-4-10
在线时间
0 小时
发表于 2014-4-11 20:41:24 | 显示全部楼层 |阅读模式
PSCR contains the value which is loaded in the active prescaler register at each UEV (including when the counter is cleared through the UG bit of the TIM1_EGR register or through the trigger controller when configured in trigger reset mode).
A UEV must be generated so that a new prescaler value can be taken into account.

这是摘自手册中的一段话,就是说写入的预分频值要想生效,就必须产生一个更新事件,但是我看了固件库中的有些例子,在定时器初始化时,写入了预分频值,但是就没有置位UG产生更新事件使写入的预分频值生效,这怎么解释啊?下面是两个定时器初始化的例子,一个置位UG,另一个没有:

static void TIM2_Config(void)
{  /* Time base configuration */      
TIM2_TimeBaseInit(TIM2_PRESCALER_2048, 65535);  
/* Prescaler configuration,这里就是置位UG,使得写入的预分频值生效*/
TIM2_PrescalerConfig(TIM2_PRESCALER_2048, TIM2_PSCRELOADMODE_IMMEDIATE);
  
/* Output Compare Active Mode configuration: Channel1 */
  /*    TIM2_OCMode = TIM2_OCMODE_ACTIVE    TIM2_OutputState = TIM2_OUTPUTSTATE_ENABLE    TIM2_Pulse = CCR1_Val    TIM2_OCPolarity = TIM2_OCPOLARITY_HIGH  */  
TIM2_OC1Init(TIM2_OCMODE_ACTIVE, TIM2_OUTPUTSTATE_ENABLE,CCR1_Val, TIM2_OCPOLARITY_HIGH);    TIM2_OC1PreloadConfig(DISABLE);  
/* Output Compare Active Mode configuration: Channel2 */  
  /*TIM2_Pulse = CCR2_Val  */   
TIM2_OC2Init(TIM2_OCMODE_ACTIVE, TIM2_OUTPUTSTATE_ENABLE,CCR2_Val, TIM2_OCPOLARITY_HIGH);   TIM2_OC2PreloadConfig(DISABLE);
* /* Output Compare Active Mode configuration: Channel3 */
  /*  TIM2_Pulse = CCR3_Val  */  
TIM2_OC3Init(TIM2_OCMODE_ACTIVE, TIM2_OUTPUTSTATE_ENABLE,CCR3_Val, TIM2_OCPOLARITY_HIGH);  TIM2_OC3PreloadConfig(DISABLE);  TIM2_ARRPreloadConfig(ENABLE);  
  /* TIM2 enable counter */
  TIM2_Cmd(ENABLE);
}

static void TIM2_Config(void)
{  /* Time base configuration 这里就没有置位UG,使得写入的预分频值生效*/
TIM2_TimeBaseInit(TIM2_PRESCALER_1, 999);
* /* PWM1 Mode configuration: Channel1 */  
TIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,CCR1_Val, TIM2_OCPOLARITY_HIGH);  TIM2_OC1PreloadConfig(ENABLE);  
/* PWM1 Mode configuration: Channel2 */  
TIM2_OC2Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,CCR2_Val, TIM2_OCPOLARITY_HIGH);  TIM2_OC2PreloadConfig(ENABLE);
* /* PWM1 Mode configuration: Channel3 */         
TIM2_OC3Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,CCR3_Val, TIM2_OCPOLARITY_HIGH);  TIM2_OC3PreloadConfig(ENABLE);
* TIM2_ARRPreloadConfig(ENABLE);   
/* TIM2 enable counter */  
TIM2_Cmd(ENABLE);
}
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-4-11 23:47:37 | 显示全部楼层
这里设置与否,都无所谓。。。
UEV,在每次CNT计数到ARR/溢出时都会产生的。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2014-4-10
在线时间
0 小时
 楼主| 发表于 2014-4-12 19:36:17 | 显示全部楼层
回复【2楼】正点原子:
-------------------------------
非常感谢您的回答,说的很有道理,那刚开始的时候,还没有产生更新事件呢,那么预分频寄存器对应的影子寄存器是怎么获得预分频值的?一直搞不懂这一点。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-4-12 19:55:05 | 显示全部楼层
回复【3楼】xufangjian1989:
---------------------------------
总有个初始值,假定是0,那么这个时候不分频,那么很快,就会有溢出时间,此时更新PSC,那么剩下就走入正轨了。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2014-4-10
在线时间
0 小时
 楼主| 发表于 2014-4-15 08:39:46 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
非常感谢!
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2017-9-16
在线时间
3 小时
发表于 2018-9-5 11:35:29 | 显示全部楼层
我也碰到这个问题,我想使预分频器立刻生效的话就要把UG置位,让他立刻产生一个更新中断,But我发现它还是按照原来的分频值在计数,并没有把预分频器中的值加载进去,难道UG只是把Active分频器中的值清除了,然后还是要等溢出更新事件的时候才能把预分频器的值写进去,好难受啊,貌似通过设置UG位产生的更新时间并不会更新Active分频器中的值。如果我想立刻让TIM3的分频值生效的话,现在的办法只能在初始化的时候把计数器的值写成ARR的值,让他自己溢出来产生一个更新时间,从而达到加载预分频器值的目的,召唤原子哥,为啥设置UG位产生的更新会无效呢?召唤神龙
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 19:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表