打印
[STM32F1]

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

[复制链接]
571|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiaxw|  楼主 | 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);
}
沙发
jiajs| | 2019-1-16 17:57 | 只看该作者
你的程序,好有问题。。更新中断和比较寄存器有什么关系

使用特权

评论回复
板凳
jiaxw|  楼主 | 2019-1-16 18:01 | 只看该作者
定时器这里我刚刚接触,程序运行时间不对,所以找问题找到了这里~我也是感觉很困惑,所以贴出来 看看是哪里的问题,怎样解决

使用特权

评论回复
地板
zhenykun| | 2019-1-16 18:03 | 只看该作者
用的是更新中断,不需要TIM_IT_CC4这个东西

使用特权

评论回复
5
jiaxw|  楼主 | 2019-1-16 18:06 | 只看该作者

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

通过中断,每计数一次,就可以进中断一次  而这里我希望进来一次的时间是ms级

使用特权

评论回复
6
jlyuan| | 2019-1-16 18:09 | 只看该作者
然后呢?你是怎么应对这个的呢

使用特权

评论回复
7
jiaxw|  楼主 | 2019-1-16 18:12 | 只看该作者
理想是:通过TIM_IT_CC4 这个库函数来实现捕获和与中断源比较,我的时间计数

使用特权

评论回复
8
wyjie| | 2019-1-16 18:17 | 只看该作者
感觉到,这个库函数有些。。。

使用特权

评论回复
9
jiaxw|  楼主 | 2019-1-16 18:19 | 只看该作者
能给个实际的方案什么的嘛?比如不用这个,我要用哪一个才能实现功能呢?

使用特权

评论回复
10
jiaxw|  楼主 | 2019-1-16 18:21 | 只看该作者

唉,还是没有什么结果,算了,先结贴吧,多谢大家啦

使用特权

评论回复
11
xiaoqizi| | 2019-2-11 13:05 | 只看该作者
库里边有自带的延时函数啊

使用特权

评论回复
12
木木guainv| | 2019-2-11 15:11 | 只看该作者
ms级别的应该没有啥问题呀

使用特权

评论回复
13
磨砂| | 2019-2-12 13:00 | 只看该作者
看不出来什么问题

使用特权

评论回复
14
晓伍| | 2019-2-12 15:19 | 只看该作者
对比一下官方例程

使用特权

评论回复
15
香水城| | 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);

使用特权

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

本版积分规则

825

主题

9762

帖子

4

粉丝