野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11632|回复: 7

STM32F103的嘀嗒定时器和普通定时器冲突

[复制链接]
发表于 2016-11-28 17:32:22 | 显示全部楼层 |阅读模式
大家好,我最近用STM32F103R6,写段程序,发现只要打开定时器3,程序就运行不下去了,初始化程序如下,请各位帮忙看一下

嘀嗒初始化,频率是1000000
void ltk_systick_init(uint32_t systick_hz)
{
    if (SysTick_Config(SystemCoreClock / systick_hz))
    {
        /* ²¶»ñ´íÎó */
        while (1);
    }
}
定时器3初始化
void NVIC_TIM3_Configuration(void)//¶¨Ê±Æ÷3ÖжÏÅäÖÃ
   {
                 NVIC_InitTypeDef NVIC_InitStructure;
            
                 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
           
                  NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
                 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
                 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
                  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
                  NVIC_Init(&NVIC_InitStructure);
   }
void TIM3_Init(void)
    {
                                      //使能定时器TIM_X时钟
                           TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
                                      //计算要定时的时间
                          RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
                                   //自动装载的计数值
                          TIM_TimeBaseStructure.TIM_Period = (100 - 1);//(100-1)±íʾ10ms//TIM_TimeBaseStructure.TIM_Period = (10000 - 1);/////(10000 - 1)±íʾ1s
                                 //自动分频系数
                          TIM_TimeBaseStructure.TIM_Prescaler =7200 ;
                                  //数字滤波器,定时时不涉及此项
                         TIM_TimeBaseStructure.TIM_ClockDivision = 0;
                                 //计数模式设置,设为向上
                        TIM_TimeBaseStructure.TIM_CounterMode=0;
                               //定时基本设置
                       TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);//TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
                              //清除定时器X的中断溢出标志
                        TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
                            //开定时器溢出中断
                       TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);//TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);
                            //使能定时器
                      TIM_Cmd(TIM3, ENABLE);
                            //配置定时器中断
                       NVIC_TIM3_Configuration();        
  }//  
回复

使用道具 举报

发表于 2016-11-28 18:41:58 | 显示全部楼层
肯定是优先级的问题,默认使用固件库变成的时候,systick的优先级为15,不管优先级分组为多少,systick的优先级都是最低的,剩下的就交给你自己了。
回复 支持 反对

使用道具 举报

发表于 2016-11-28 22:40:59 | 显示全部楼层
火哥,请解释解释啊,没听明白你说的,麻烦通俗一点,因为我之前也遇到过这个问题
回复 支持 反对

使用道具 举报

发表于 2016-11-29 09:05:26 | 显示全部楼层
中断服务函数没写吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-29 09:13:29 | 显示全部楼层
本帖最后由 zyx29 于 2016-11-29 11:18 编辑
fire 发表于 2016-11-28 18:41
肯定是优先级的问题,默认使用固件库变成的时候,systick的优先级为15,不管优先级分组为多少,systick的优 ...


我试了一下,屏蔽掉 NVIC_TIM3_Configuration();,就没问题了,我也怀疑是中断优先级设置的问题,这个问题具体怎么解决啊,提高滴答定时器的优先级还是用别的办法      
systick的优先级确实是15,但我开的定时器3优先级是45,怎么会冲突那

回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-29 15:15:41 | 显示全部楼层
flyleaf 发表于 2016-11-29 09:05
中断服务函数没写吧

中断服务函数写了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-29 15:22:41 | 显示全部楼层
大家好,原因找到了,并非是程序不运行,而是反复进定时器3的中断服务函数导致程序运行不下去,因为中断函数没有清中断标志,清了就好了
回复 支持 反对

使用道具 举报

发表于 2016-11-29 16:17:46 | 显示全部楼层
zyx29 发表于 2016-11-29 15:22
大家好,原因找到了,并非是程序不运行,而是反复进定时器3的中断服务函数导致程序运行不下去,因为中断函 ...

厉害 厉害
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-22 16:48 , Processed in 0.037208 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表