打印

STM32定时器2中断延时误差问题

[复制链接]
3985|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
litin|  楼主 | 2013-3-11 10:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个定时器2是春风电源里的 数码管动态扫描和按键扫描中断函数
在中段函数里放置断点,仿真界面里观察每次的断点间隔时间都是在2MS以上
/*********************************************************************************
* 函数名称: Time2_Configuration        数码管动态扫描和按键扫描
* 功    能: 定时器2初始化,3mS (其前面的时钟设为72M啊应该1mS?,软件仿真为2MS)
                         72000000HZ / 36分频 = 2000000HZ   1 / 2000000HZ = 0.0000005s = 0.5us
                         每个加1的脉冲周期为0.5us * 2000设定值 =  1ms
* 参    数: 无
* 返回值  : 无
**********************************************************************************/
void Time2_Configuration(void)
{
                 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
                 //TIM_Period设置了在下一个更新事件装入活动的自动重装载寄存器周期的值。它的取值必须在0x0000和0xFFFF之间
                 TIM_TimeBaseStructure.TIM_Period = 2000;                                                              //设置定时器周期
                 //TIM_Prescaler设置了用来作为TIMx时钟频率除数的预分频值。它的取值必须在0x0000和0xFFFF之间
                 TIM_TimeBaseStructure.TIM_Prescaler = 36;                                                  //设置定时器时钟分频值        它的取值必须在0x0000和0xFFFF之间
                 TIM_TimeBaseStructure.TIM_ClockDivision = 0;                                                  //时钟分割
                 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;              //设置定时器向上计数
                 TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;                                     //设置定时器重装载值
                 TIM_TimeBaseInit(TIM2, & TIM_TimeBaseStructure);                                     //配置定时器2        
               
                TIM_ClearFlag(TIM2, TIM_FLAG_Update);                                                //清除中断标志(UIF)防止配置完成打开中断时立即产生中断
                 TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE );                 //使能定时器2允许更新中断(UIE)
                 //*******************************************************************************
                 //*使能定时器2功能(CEN)
                 //*在软件设置了CEN位后,外部时钟、门控模式和编码器模式才能工作。触发模式可以自动地
                 //*通过硬件设置CEN位。 在单脉冲模式下,当发生更新事件时,CEN被自动清除。
                 //********************************************************************************/        
                TIM_Cmd(TIM2, ENABLE);                                                                                                   //使能定时器2功能(CEN)
}
沙发
fact888| | 2013-7-27 10:38 | 只看该作者
TIM_TimeBaseStructure.TIM_Prescaler = 36;                                                  //设置定时器时钟分频值        它的取值必须在0x0000和0xFFFF之间
这个35

使用特权

评论回复
板凳
haibian826| | 2013-7-27 11:07 | 只看该作者
预分频,设置的时候,要减一

使用特权

评论回复
地板
litin|  楼主 | 2013-9-1 11:46 | 只看该作者
谢谢大家

使用特权

评论回复
5
604603487| | 2013-9-1 12:20 | 只看该作者
2000-1
35也要减,因为有零

使用特权

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

本版积分规则

3

主题

19

帖子

1

粉丝