打印
[STM32F1]

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

[复制链接]
293|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiaxw|  楼主 | 2020-11-18 23:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
定时器,使用库,希望可以实现中断延时,达到毫秒级
下边这样配置后,中断的延时大概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| | 2020-11-18 23:15 | 只看该作者
你的程序,好有问题。。更新中断和比较寄存器有什么关系

使用特权

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

使用特权

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

使用特权

评论回复
5
jiaxw|  楼主 | 2020-11-18 23:27 | 只看该作者

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

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

使用特权

评论回复
6
jlyuan| | 2020-11-18 23:34 | 只看该作者
然后呢?你是怎么应对这个的呢

使用特权

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

使用特权

评论回复
8
wyjie| | 2020-11-18 23:42 | 只看该作者
感觉到,这个库函数有些。。。

使用特权

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

使用特权

评论回复
10
hanwe| | 2020-11-18 23:48 | 只看该作者
库里边有自带的延时函数啊

使用特权

评论回复
11
gongche| | 2020-11-18 23:53 | 只看该作者
ms级别的应该没有啥问题呀

使用特权

评论回复
12
zhuhuis| | 2020-11-18 23:56 | 只看该作者
看不出来什么问题

使用特权

评论回复
13
dingy| | 2020-11-19 19:35 | 只看该作者
对比一下官方例程

使用特权

评论回复
14
chenjunt| | 2020-11-19 19:40 | 只看该作者
如果只是做个定时,使用更新中断就可以了

使用特权

评论回复
15
hanwe| | 2020-11-19 19:43 | 只看该作者
当然使用比较事件做计数事件也是可以的,依然是
一个周期中断一次,配置就要啰嗦些,比方开启相应输出功能等

使用特权

评论回复
16
wangzsa| | 2020-11-19 19:49 | 只看该作者
关键是将时基参数搞对。时钟源频率、分配比、计数周期。

使用特权

评论回复
17
wangpe| | 2020-11-19 19:53 | 只看该作者

/* 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);

使用特权

评论回复
18
jiaxw|  楼主 | 2020-11-19 19:56 | 只看该作者

好的,我明天去单位试一下,多谢各位大侠了哈        

使用特权

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

本版积分规则

825

主题

9762

帖子

4

粉丝