标题:
关于STM32单片机嘀嗒定时器SysTIck的疑惑
[打印本页]
作者:
shaofengxu2000
时间:
2023-9-14 09:37
标题:
关于STM32单片机嘀嗒定时器SysTIck的疑惑
各位老师,嵌入式大拿:
本人初学,关于嘀嗒定时器请各位给指点一下,static u32 time;
void Delay(u32 t)
{
time=t;//要计时的数
while(time!=0); //这个地方一直等待,循环---看中断后time值--循环,直到等于0
}
void SysTick_Handler(void)
{
time--;//中断后做一件事情,time-1;
}
int main()
{
SysTick_Config(SystemCoreClock/1000);//确定中断间隔
Delay(200);
}
通过以上代码可以实现延时,那么在Delay中其实就是cpu不断循环,看一下中断继续循环直到目标时间全部结束, 那么这个过程中CPU是不是不可以用来做其他操作?
如果CPU原地打转,那么定时器不就是为了解放CUP的么,嘀嗒的意义何在呢?
还请高手能够指点迷津,不胜感激!
作者:
Hephaestus
时间:
2023-9-14 10:04
这种写法就是死等,不可以进行别的操作,想要解放CUP就不能要BRA。
作者:
shaofengxu2000
时间:
2023-9-14 12:47
Hephaestus 发表于 2023-9-14 10:04
这种写法就是死等,不可以进行别的操作,想要解放CUP就不能要BRA。
谢谢,感觉就是死等
和直接while循环并没有什么区别,要说有就是精确了。
作者:
Y_G_G
时间:
2023-9-14 12:53
SysTIck和软件延时其实并没有本质上的区别,都是死等,无非就是精度,不被打断之类的区别
在一些数码时钟,温度控制......之类,对效率要求不高的地方,用来做精确延时的,因为并不是所有的程序都需要很高效率的
但如果是对CPU效率要求很高的地方,延时就不能用这种方法了
作者:
lkc8210
时间:
2023-9-14 15:21
非死等式
static u32 time = 200;
void SysTick_Handler(void)
{
if(time)time--;//中断后做一件事情,time-1;
}
int main()
{
SysTick_Config(SystemCoreClock/1000);//确定中断间隔
while(1)
{
if(!time)
{
time = 200;
//your code
}
}
}
复制代码
作者:
sttt300
时间:
2023-9-14 15:37
嘀嗒定时器是一直计数,如果中断了,CPU跑去做其他事,再回来,这延时就加长了
嘀嗒定时器设计的目的就是提供一个精确的等待延时,并不是当普通定时器来用
如果有需要在延时的时候去干点别的,就要用普通的定时器Timer
在stm32cubeMX中,SysTick默认的中断优先级时比较低的,会被其他中断打断
而如果不小心在中断中加了嘀嗒定时器的延时,那就会直接卡死
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1