打印
[STM32F1]

讨论下STM32 通用定时器重装值问题

[复制链接]
2418|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sf116|  楼主 | 2015-5-13 11:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问定时器的重装值要不要和分频系数一样,在目标值的基础上-1?
实测发现,时钟分频7200时,
自动重装载寄存器周期的值如果是10,实测定时器中断周期1.1ms.
自动重装载寄存器周期的值如果是9,  实测定时器中断周期1.0ms.
下面直接上代码、测试结果:
(引用火哥的TIM Base)
void TIM2_Configuration(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
               
                /* 设置TIM2CLK 为 72MHZ */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
    //TIM_DeInit(TIM2);
        
          /* 自动重装载寄存器周期的值(计数值) */
    TIM_TimeBaseStructure.TIM_Period = 10;
        
    /* 累计 TIM_Period个频率后产生一个更新或者中断 */
          /* 时钟预分频数为7200 */
    TIM_TimeBaseStructure.TIM_Prescaler = 7200-1;
        
                /* 对外部时钟进行采样的时钟分频,这里没有用到 */
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
        
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
        
    TIM_ClearFlag(TIM2, TIM_FLAG_Update);
        
    TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
               
    TIM_Cmd(TIM2, ENABLE);                                                                                                                                                
   
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , DISABLE);                /*先关闭等待使用*/   
}
void TIM2_IRQHandler(void)
{
        if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET )
        {        
                TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);
               
                LED1_TOGGLE;
        }                        
}
/* 直接操作寄存器的方法控制IO */
#define digitalToggle(p,i)                {p->ODR ^=i;}                        //输出反转状态
/* 定义控制IO的宏 */
#define LED1_TOGGLE                digitalToggle(GPIOB,GPIO_Pin_0)

沙发
wind~风| | 2015-5-13 23:23 | 只看该作者

使用特权

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

本版积分规则

8

主题

121

帖子

4

粉丝