OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2129|回复: 3

在我用TIM4和TIM时候,会影响Systick定时器的延时时间

[复制链接]

2

主题

9

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2019-4-24
在线时间
11 小时
发表于 2019-4-24 18:53:17 | 显示全部楼层 |阅读模式
1金钱
  //用于数码管计数
        TIM_DeInit( TIM2 );                  //将TIM寄存器重置为缺省值
        TIM_InternalClockConfig( TIM2 );    //SMS =000采用内部时钟给TIM2提供时钟源( TIMxCLK( 72MHz ) -> CK_INT -> CK_PSC -> CK_CNT )
  TIM_TimeBaseStructure.TIM_Period=2000;      //2000*1/1000=1S
  TIM_TimeBaseStructure.TIM_Prescaler=35999;   //35999+1/72M=1/2000;
  TIM_TimeBaseStructure.TIM_ClockDivision=0;
  TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);

  TIM_ClearFlag( TIM2, TIM_FLAG_Update ); //清除溢出中断标志位
        TIM_ARRPreloadConfig( TIM2, DISABLE ); //禁止ARR预装载缓冲器
        TIM_ITConfig( TIM2,TIM_IT_Update,ENABLE );// 打开更新事件中断
  TIM_Cmd(TIM2,ENABLE);                     //使能TIM2
  //数码管扫描
  TIM_DeInit( TIM6 );                  //将TIM6寄存器重置为缺省值
        TIM_InternalClockConfig( TIM6 );   
  TIM_TimeBaseStructure.TIM_Period=10;      //扫描周期5ms  
  TIM_TimeBaseStructure.TIM_Prescaler=35999;   
  TIM_TimeBaseStructure.TIM_ClockDivision=0;
  TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM6,&TIM_TimeBaseStructure);

  TIM_ClearFlag( TIM6, TIM_FLAG_Update ); //清除溢出中断标志位
        TIM_ARRPreloadConfig( TIM6, DISABLE ); //禁止ARR预装载缓冲器
        TIM_ITConfig( TIM6,TIM_IT_Update,ENABLE );// 打开更新事件中断
  TIM_Cmd(TIM6,ENABLE);                     //使能TIM6

  //温度采集
  TIM_DeInit(TIM5);                  
  TIM_TimeBaseStructure.TIM_Period=300;      //150ms  
  TIM_TimeBaseStructure.TIM_Prescaler=35999;   
  TIM_TimeBaseStructure.TIM_ClockDivision=0;
  TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure);
  TIM_ClearFlag(TIM5, TIM_FLAG_Update );
        TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE );
  TIM_Cmd(TIM5,ENABLE);

除此以外我PWM3用了ch2和ch4控制电机转速。
我试了下,定时器4和定时器5无论哪个使用,我用delay_ms时候,都会使原有的时间变短许多。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2019-4-24
在线时间
11 小时
 楼主| 发表于 2019-4-24 18:54:44 | 显示全部楼层
这是nvic分组。把TIM4或者5屏蔽后,延时时间正常
void NVIC_Cfg()
{
  NVIC_InitTypeDef NVIC_InitStructure;        
  NVIC_PriorityGroupConfig( NVIC_PriorityGroup_2 ); //选择中断分组2
        //选择TIM2的中断通道 计数
  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //抢断式中断优先级设置为1
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应式中断优先级设置为0
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断
        NVIC_Init( &NVIC_InitStructure ); //将配置应用到NVIC中
  
  //选择TIM6的中断通道  数码管
  NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢断式中断优先级设置为1
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应式中断优先级设置为0
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断
        NVIC_Init( &NVIC_InitStructure ); //将配置应用到NVIC中
  
   //选择TIM7的中断通道 按键
  NVIC_InitStructure.NVIC_IRQChannel = TIM7_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init( &NVIC_InitStructure );
  //PWM
   NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init( &NVIC_InitStructure );
  //温度
  NVIC_InitStructure.NVIC_IRQChannel =TIM5_IRQn  ;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init( &NVIC_InitStructure );
}
回复

使用道具 举报

8

主题

293

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1001
金钱
1001
注册时间
2018-8-16
在线时间
327 小时
发表于 2019-4-24 19:47:04 | 显示全部楼层
不应该出现这种情况,检查中断服务函数是否不合理,以及检查Systick的中断服务函数,看看延时逻辑有没问题。
你这样贴出来的东西没法判断。
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2019-4-24
在线时间
11 小时
 楼主| 发表于 2019-4-24 20:06:16 | 显示全部楼层
brucewoo 发表于 2019-4-24 19:47
不应该出现这种情况,检查中断服务函数是否不合理,以及检查Systick的中断服务函数,看看延时逻辑有没问题 ...

中断服务函数应该是没问题的。我就多加了个传递ds18b20温度数据。只要加了TIM5和TIM4就会出现延时不正确
滴答定时器没写中断服务函数
我现在只能换成软件延时来解决
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 15:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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