ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU

[STM32F1] 是否是我下面程序设置的问题呢?

[复制链接]
104|14
 楼主 | 2019-1-16 17:55 | 显示全部楼层 |阅读模式
定时器,使用库,希望可以实现中断延时,达到毫秒级
下边这样配置后,中断的延时大概2ms多一点(测试过)
void TimDelay1(u16 Time)//使用定时器4 以中断方式延时 ms
{
  TIM_ClearITPendingBit(TIM4, TIM_IT_CC1);
  TIM_SetCompare1(TIM4, TIM4->CNT + Time);
  TIM_ITConfig(TIM4, TIM_IT_CC1,ENABLE);
}

void TimDelay2(u16 Time)//使用定时器4 以中断方式延时 ms
{
  TIM_ClearITPendingBit(TIM4, TIM_IT_CC2);
  TIM_SetCompare2(TIM4, TIM4->CNT + Time);
  TIM_ITConfig(TIM4, TIM_IT_CC2,ENABLE);
}

void TimDelay3(u16 Time)//使用定时器4 以中断方式延时 ms
{
  TIM_ClearITPendingBit(TIM4, TIM_IT_CC3);
  TIM_SetCompare3(TIM4, TIM4->CNT + Time);
  TIM_ITConfig(TIM4, TIM_IT_CC3,ENABLE);
}

void TimDelay4(u16 Time)//使用定时器4 以中断方式延时 ms
{
  TIM_ClearITPendingBit(TIM4, TIM_IT_CC4);
  TIM_SetCompare4(TIM4, TIM4->CNT + Time);
  TIM_ITConfig(TIM4, TIM_IT_CC4,ENABLE);
}
| 2019-1-16 17:57 | 显示全部楼层
你的程序,好有问题。。更新中断和比较寄存器有什么关系
 楼主 | 2019-1-16 18:01 | 显示全部楼层
定时器这里我刚刚接触,程序运行时间不对,所以找问题找到了这里~我也是感觉很困惑,所以贴出来 看看是哪里的问题,怎样解决
| 2019-1-16 18:03 | 显示全部楼层
用的是更新中断,不需要TIM_IT_CC4这个东西
 楼主 | 2019-1-16 18:06 | 显示全部楼层

if (TIM_GetITStatus(TIM4, TIM_IT_CC2) != RESET)
  {
        //用户代码
        E32_TIMER0TimerBeat++;//定时器0计时心跳
        E16_ECUCommData_time++;

通过中断,每计数一次,就可以进中断一次  而这里我希望进来一次的时间是ms级
| 2019-1-16 18:09 | 显示全部楼层
然后呢?你是怎么应对这个的呢
 楼主 | 2019-1-16 18:12 | 显示全部楼层
理想是:通过TIM_IT_CC4 这个库函数来实现捕获和与中断源比较,我的时间计数
| 2019-1-16 18:17 | 显示全部楼层
感觉到,这个库函数有些。。。
 楼主 | 2019-1-16 18:19 | 显示全部楼层
能给个实际的方案什么的嘛?比如不用这个,我要用哪一个才能实现功能呢?
 楼主 | 2019-1-16 18:21 | 显示全部楼层

唉,还是没有什么结果,算了,先结贴吧,多谢大家啦
| 2019-2-11 13:05 | 显示全部楼层
库里边有自带的延时函数啊
| 2019-2-11 15:11 | 显示全部楼层
ms级别的应该没有啥问题呀
| 2019-2-12 13:00 | 显示全部楼层
看不出来什么问题
| 2019-2-12 15:19 | 显示全部楼层
对比一下官方例程
| 2019-2-12 17:10 | 显示全部楼层

如果只是做个定时,使用更新中断就可以了【当然使用比较事件做计数事件也是可以的,依然是
一个周期中断一次,配置就要啰嗦些,比方开启相应输出功能等】。

关键是将时基参数搞对。时钟源频率、分配比、计数周期。

/* Time base configuration */
  TIM_TimeBaseStructure.TIM_Period = xxx;
  TIM_TimeBaseStructure.TIM_Prescaler = ??;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

  TIM_TimeBaseInit(TIMx, &TIM_TimeBaseStructure);

扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

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