打印
[STM32G4]

定时器

[复制链接]
666|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
NCVRLST|  楼主 | 2022-2-17 09:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要求是到达一定时间去运行相应程序、任务
如计时到t1,运行程序p1;计时到t2,运行程序p2;
但计时与程序运行是脱离开来的,即计时到t1,需继续计时,计时不能中断,也要去执行程序p1.
目前使用的是一定时间精度的定时器中断,对中断次数进行计数,然后执行程序,执行程序的时间产生了很大的时间误差
HAL_TIM_Base_Start_IT(&htim8);
int CNT = 0;
int t1[50]={ };
int t2[50]={ };
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
        static int i=1;
        if(htim->Instance == htim8.Instance)
        {
                CNT++;

                if(CNT == t1[i-1])
                {               
                        程序
                        i++;
                }
        }
}
请问采用定时器方式该如何实现?

使用特权

评论回复
沙发
呐咯密密| | 2022-2-17 10:47 | 只看该作者
说一下定时器,按照你的方式来,计时到T1,中断中执行程序P1,在执行P1的过程中定时器还在计时,并不会随着程序进入中断而停止。如果你的P1执行时间很长,建议调整定时器的分频系数和重装载值,使每次进入定时器中断的间隔时间加长,利用两次中断的长时间来执行P1,如果在下一次中断到来之前P1还是无法运行完成,建议将P1移到外面,只用主函数的while(1)来处理。

使用特权

评论回复
板凳
香水城| | 2022-2-17 15:20 | 只看该作者

你可以考虑用两个定时器这样方便点,定时器中断配置成不同的优先级。即使这样,你还得琢磨下优先级如何安排最合理。

使用特权

评论回复
地板
NCVRLST|  楼主 | 2022-2-17 15:53 | 只看该作者
呐咯密密 发表于 2022-2-17 10:47
说一下定时器,按照你的方式来,计时到T1,中断中执行程序P1,在执行P1的过程中定时器还在计时,并不会随着 ...

我现在就是改到while(1)里面了

使用特权

评论回复
5
fengfengic| | 2022-2-17 19:10 | 只看该作者
是不是单片机在执行指令而不能响应中断,debug一下看看有没有规律。建议先找到原因,如果远超出理想状态去调适和花点时间是很值得,办法总比困难多。

使用特权

评论回复
6
coody| | 2022-2-17 22:11 | 只看该作者
时隙,时间驱动,RTOS,都可以实现。
最简单的,定时器中断于一个常时间,比如1ms,然后计数到要求的时刻,设置信息。

使用特权

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

本版积分规则

3

主题

6

帖子

0

粉丝