你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 2642|回复: 2

STM8S定时器的预分频器问题

[复制链接]

1

主题

2

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2014-4-11 20:48:09 | 显示全部楼层 |阅读模式
 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);
}
回复

使用道具 举报

2

主题

295

回帖

0

蝴蝶豆

初级会员

最后登录
2018-4-6
发表于 2014-4-14 10:34:15 | 显示全部楼层

RE:STM8S定时器的预分频器问题

应该是第一个是立即更新预分频值,第二个是下一个更新事件时更新预分频值, 结果没有多大的出入
回复 支持 反对

使用道具 举报

22

主题

456

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-7-20
发表于 2014-4-20 10:45:04 | 显示全部楼层

RE:STM8S定时器的预分频器问题

第二个语句中有这个
TIM2_ARRPreloadConfig(ENABLE);   
下次更新事件发生时,分频值生效,使能预加载了,第一个是立即生效的
回复 支持 反对

使用道具 举报

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版