TIM_ARRPreloadConfig

我用TIM2定时一秒,可是 不管我将TIM_ARRPreloadConfig设置为DISABLE 还是ENABLE,结果都不变。我都不明白TIM_ARRPreloadConfig有什么作用了;  另外,TIM_TimeBaseStructure.TIM_Prescaler=0还是9我都试过,定时还是一秒;不知道为什么。那位大侠帮忙看看

下面是我的设置:

 

 

 

 

void initTIMER2(void)   //(APB1)

    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
 
 //36mhz/36000=1000=TIM_Period

 TIM_DeInit(TIM2);
 //TIM_InternalClockConfig(TIM2);
 TIM_TimeBaseStructure.TIM_Period=2000;   //ARR的值
 TIM_TimeBaseStructure.TIM_Prescaler=0;    // 分频=TIM_Prescaler+1  预分频为1  
 TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //采样分频
 TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
 TIM_PrescalerConfig(TIM2,35999,TIM_PSCReloadMode_Immediate);//时钟分频系数36000-1,所以定时器时钟为2K  预分频值即刻装入
 TIM_ARRPreloadConfig(TIM2,DISABLE);//禁止ARR预装载缓冲器   ??????
 TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);

 TIM_ClearFlag(TIM2,TIM_FLAG_Update);


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

---------------------------===========================================================----------------------------

我也碰到过和你一样的问题,给你说一下我的理解,如果不正确望大家帮忙纠正!
先说TIM_ARRPreloadConfig设置为DISABLE 和ENABLE的问题,他的作用只是允许或禁止在定时器工作时向ARR的缓冲器中写入新值,以便在更新事件发生时载入覆盖以前的值。在开始初始化的时候你已经把" TIM_TimeBaseStructure.TIM_Period=2000;   //ARR的值  ",后来也一直是这个值,原因是你没有编写中断服务函数或者你在中断服务函数中根本就没有给ARR缓冲器重新写入新值,所以设置为DISABLE 和ENABLE都没有影响。
再说一下TIM_TimeBaseStructure.TIM_Prescaler=0还是9的问题,这个很简单,程序后面调用了TIM_PrescalerConfig(TIM2,35999,TIM_PSCReloadMode_Immediate);这个函数把之前的值给修改了,你可以把这个函数注释掉然后再改前面的值,或者直接改后面的那个35999,应该就不一样了。这两个地方都是给PSR寄存器写入值,为什么后面多此一举又专门调用函数你可以问问其他高手,小弟新手也不甚了解。
建议多看几遍数据手册,多修改程序测试。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值