STM32之延時功能


本文介紹如何使用STM32 SysTick系統定時器實現延時功能。

本文適合對單片機及C語言有一定基礎的開發人員閱讀,MCU使用STM32F103VE系列。

 

1.1.    介紹

SysTick—系統定時器是CM3內核中的一個24bit 的向下遞減的計數器,計數器每計數一次的時間為 1/SYSCLK,當計數器值遞減到0的時候,將自動重裝載計數初值,開始新一輪計數系統,可以用SysTick實現簡單的延時函數。

1.2.    說明

SysTick_Config()函數設置計數器重裝載值,將當前值設置為0,並使能定時器。

1.3.    操作

直接調用delay_us()和delay_ms()函數即可。

 

 1 void delay_us(__IO uint32_t us)
 2 {
 3     uint32_t i;
 4     
 5     //將一次計數器時間設置為1us
 6     SysTick_Config(SystemCoreClock / 1000000);
 7     
 8     for(i = 0; i < us; i++)
 9     {
10         // 當計數器的值減小到0的時候,CTRL寄存器COUNTFLAG會置1
11         while( !((SysTick->CTRL) & SysTick_CTRL_COUNTFLAG_Msk) );
12     }
13     // CTRL寄存器ENABLE寄存器置零,關閉SysTick定時器
14     SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
15     
16 }
17 
18 void delay_ms(__IO uint32_t ms)
19 {
20     uint32_t i;    
21 
22     //將一次計數器時間設置為1ms
23     SysTick_Config(SystemCoreClock / 1000);
24     
25     for(i = 0; i < ms; i++)
26     {
27         // 當計數器的值減小到0的時候,CTRL寄存器COUNTFLAG會置1
28         while( !((SysTick->CTRL) & SysTick_CTRL_COUNTFLAG_Msk) );
29     }
30     // CTRL寄存器ENABLE寄存器置零,關閉SysTick定時器
31     SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
32 }

 

main()函數

1 int main(void)
2 {    
3     while (1)
4     {
5         delay_us(100);
6         delay_ms(100);
7     }
8 }

 

仿真結果

 編譯完成后,點擊開始仿真,單步執行,可以在下方狀態欄查看程序執行時間。

      

可以看到在delay_us(100)函數執行前后時間差距大約是0.0001s,也就是100us,而delay_ms(100)函數執行前后時間差距大約是0.1s,也就是100ms,因此延時功能正確。

 

源碼下載:(不包括工程文件和庫文件)

https://files.cnblogs.com/files/greatpumpkin/Delay.zip


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM