无法得出预想的周期,求教STM32定时器设置

2019-12-19 18:07发布

型号是STM32F103VBT6,晶振8M,系统主频设置72M,预分频72,重装值1000,按道理应该得到1000us周期的脉冲,但实际是大概230us:
中断处理.png (8.34 KB, 下载次数: 0) 下载附件 2018-4-25 09:39 上传
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
prince2010
1楼-- · 2019-12-20 00:05
TIM_Period 没有配置吧?
qaya
2楼-- · 2019-12-20 05:31
prince2010 发表于 2018-4-25 09:53
TIM_Period 没有配置吧?

TIM_Period 应该实际就是设置TIMx->ARR 吧   在启动定时器的时候装入了的,我在中断里也每次都置入了的
UVPOWER
3楼-- · 2019-12-20 06:15
stm32的定时器可以设置自动重载的,不用每次中断都加载。你可以参考一下原子的例程

void TIM3_Int_Init(u16 arr,u16 psc)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能

        TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值         计数到5000为500ms
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  10Khz的计数频率  
        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

        TIM_ITConfig(  //使能或者失能指定的TIM中断
                TIM3, //TIM2
                TIM_IT_Update ,
                ENABLE  //使能
                );
        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中断
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
        NVIC_Init(&NVIC_InitStructure);  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器

        TIM_Cmd(TIM3, ENABLE);  //使能TIMx外设
                                                         
}

void TIM3_IRQHandler(void)   //TIM3中断
{
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
                {
                TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源
                LED1=!LED1;
                }
}
kebaojun305
4楼-- · 2019-12-20 10:15
库的例子中就有完整的程序。
leafstamen
5楼-- · 2019-12-20 11:50
 精彩回答 2  元偷偷看……
qaya
6楼-- · 2019-12-20 12:20
本帖最后由 qaya 于 2018-4-25 15:08 编辑
UVPOWER 发表于 2018-4-25 12:51
stm32的定时器可以设置自动重载的,不用每次中断都加载。你可以参考一下原子的例程

void TIM3_Int_Init(u1 ...


这个我知道。关键是为什么实际结果和计算差这么多

一周热门 更多>