欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2407|回復: 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的么,嘀嗒的意義何在呢?
還請高手能夠指點迷津,不勝感激!
回復

使用道具 舉報

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效率要求很高的地方,延時就不能用這種方法了
回復

使用道具 舉報

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. }
復制代碼



回復

使用道具 舉報

ID:647261 發表于 2023-9-14 15:37 | 顯示全部樓層
嘀嗒定時器是一直計數,如果中斷了,CPU跑去做其他事,再回來,這延時就加長了
嘀嗒定時器設計的目的就是提供一個精確的等待延時,并不是當普通定時器來用
如果有需要在延時的時候去干點別的,就要用普通的定時器Timer
在stm32cubeMX中,SysTick默認的中斷優先級時比較低的,會被其他中斷打斷
而如果不小心在中斷中加了嘀嗒定時器的延時,那就會直接卡死

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表