找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1896|回复: 5
打印 上一主题 下一主题
收起左侧

关于STM32单片机嘀嗒定时器SysTIck的疑惑

[复制链接]
跳转到指定楼层
楼主
ID:898536 发表于 2023-9-14 09:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位老师,嵌入式大拿:
本人初学,关于嘀嗒定时器请各位给指点一下,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的么,嘀嗒的意义何在呢?
还请高手能够指点迷津,不胜感激!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:883242 发表于 2023-9-14 10:04 | 只看该作者
这种写法就是死等,不可以进行别的操作,想要解放CUP就不能要BRA。
回复

使用道具 举报

板凳
ID:898536 发表于 2023-9-14 12:47 | 只看该作者
Hephaestus 发表于 2023-9-14 10:04
这种写法就是死等,不可以进行别的操作,想要解放CUP就不能要BRA。

谢谢,感觉就是死等和直接while循环并没有什么区别,要说有就是精确了。
回复

使用道具 举报

地板
ID:401564 发表于 2023-9-14 12:53 | 只看该作者
SysTIck和软件延时其实并没有本质上的区别,都是死等,无非就是精度,不被打断之类的区别
在一些数码时钟,温度控制......之类,对效率要求不高的地方,用来做精确延时的,因为并不是所有的程序都需要很高效率的
但如果是对CPU效率要求很高的地方,延时就不能用这种方法了
回复

使用道具 举报

5#
ID:161164 发表于 2023-9-14 15:21 | 只看该作者
非死等式
  1. static u32 time = 200;

  2. void SysTick_Handler(void)
  3. {
  4.         if(time)time--;//中断后做一件事情,time-1;
  5. }
  6. int main()
  7. {
  8.         SysTick_Config(SystemCoreClock/1000);//确定中断间隔
  9.         while(1)
  10.         {
  11.                 if(!time)
  12.                 {
  13.                         time = 200;
  14.                         //your code
  15.                 }
  16.         }
  17. }
复制代码



回复

使用道具 举报

6#
ID:647261 发表于 2023-9-14 15:37 | 只看该作者
嘀嗒定时器是一直计数,如果中断了,CPU跑去做其他事,再回来,这延时就加长了
嘀嗒定时器设计的目的就是提供一个精确的等待延时,并不是当普通定时器来用
如果有需要在延时的时候去干点别的,就要用普通的定时器Timer
在stm32cubeMX中,SysTick默认的中断优先级时比较低的,会被其他中断打断
而如果不小心在中断中加了嘀嗒定时器的延时,那就会直接卡死

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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