打印

请教达人:关于stm32的TIMx的一个问题

[复制链接]
3745|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vfp8341|  楼主 | 2011-4-11 09:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有篇**上这么说:


TIM_TimeBaseStructure.TIM_Period=2000;
//ARR
的值



TIM_TimeBaseStructure.TIM_Prescaler=0;



TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //
采样分频



TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //
向上计数模式



TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);


TIM_PrescalerConfig(TIM2,0x8C9F,TIM_PSCReloadMode_Immediate);//
时钟分频系数36000,所以定时器时钟为2K



TIM_ARRPreloadConfig(TIM2, DISABLE);//
禁止ARR预装载缓冲器


TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);




TIM_Cmd(TIM2, ENABLE);
//
开启时钟


解释一下,首先得配好ARR,这是必须地。然后配置预分频,为什么我先配为0再用TIM_PrescalerConfig(TIM2,0x8C9F,TIM_PSCReloadMode_Immediate)配呢,原来PSC也有个预装载功能,却不像ARR和CRR那样有相关的位控制立即装载或更新事件装载。也就是说只能更新事件来装载。在上面函数中手工产生了一个更新事件,使PSC立刻生效。



但我发现很多程序对PSC没有先配0再更新,而是只写一次要加载的值就完事儿。到底哪种方法是对的?
沙发
vfp8341|  楼主 | 2011-4-11 12:42 | 只看该作者
。。。。。。。。。

使用特权

评论回复
板凳
airwill| | 2011-4-11 13:00 | 只看该作者
虽然细节地说, 是有区别的, 但最终的结果是都对.
PSC也有个预装载功能, 不产生了一个更新事件, 只是迟一点起作用罢了. 就是(溢出更新)前的那段时间, 有点差别, 之后就一样了. 很多程序对这个差别不介意的话, 就不用关心了.
另外, 先配0再更新的做法没有必要.

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
vfp8341 + 1
地板
vfp8341|  楼主 | 2011-4-11 13:08 | 只看该作者
多谢指点~原来是这麽回事儿。这下有数了。 3# airwill

使用特权

评论回复
5
qiankunhuanying| | 2012-1-9 22:36 | 只看该作者
1# vfp8341 其实你看看TIM_TimeBaseInit这个函数的代码就会发现,在这个函数中也有一个语句是和你后面的那条语句相同的功能。所以,既然你是用TIM_TimeBaseInit这个函数初始化的话就没有必要再加后面TIM_PrescalerConfig这条语句了。


这是我自己的看法,不知道对不对。。。
我也有一个问题需要请教楼主,在TIM_TimeBaseStructure这个结构体中,TIM_Period是应该用2000呢还是2000-1=1999呢??我在其他一些地方发现,很多人用的是想要的值减去1,我没有找到官方材料,不知道具体应该是哪个!!!


谢谢楼主。

使用特权

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

本版积分规则

0

主题

44

帖子

1

粉丝