1. 程式人生 > >stm32中的延時函式

stm32中的延時函式

//粗延時函式,微秒
  • void delay_nus(u16 time)
  • {    
  •    u16 i=0;  
  •    while(time--)
  •    {
  •       i=10;  //自己定義
  •       while(i--) ;    
  •    }
  • }

//毫秒級的延時

  • void delay_nms(u16 time)
  • {    
  •    u16 i=0;  
  •    while(time--)
  •    {
  •       i=12000;  //自己定義
  •       while(i--) ;    
  •    }
  • }

運用SysTick來實現準確定時:

  • SysTick_Config(SystemCoreClock / 10)   函式的形參就是systick重灌定時器的值。
  • systick計數頻率為每秒72000000次,所以7200000次就是1/10秒,也就是100ms。
  • SysTick是1個24bit遞減計數器,通過對SysTick控制與狀態暫存器的設定,可選擇HCLK時鐘(72M)或HCLK的8分頻作為SysTick的時鐘源。//V3.5預設為HCLK時鐘
  • SysTick的重灌暫存器決定了定時器頻率。
  • 若SysTick的時鐘源是72M,   SystemFrequency = 72000000Hz
  • 所以 SysTick_Config(SystemCoreClock / 1000); 就是1ms時基。

SysTick的初始化設定:
void Init_SysTick(void)
{
if(SysTick_Config(SystemCoreClock / 1000)) //注意:3.5庫中 SystemFrequency 被 SystemCoreClock 取代。
while(1);
}


延時函式:
__IO uint32_t TimingDelay;
void delay_ms(__IO uint32_t nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}

中斷函式:
extern __IO uint32_t TimingDelay;
void SysTick_Handler(void)
{
if (TimingDelay != 0x00)

TimingDelay--;
}
}



delay_ms(1000);

相關推薦

STM32函式,配合系統滴答定時

#include "delay_cfg.h" /////////////////////////////////////////////////////////////////////////////// //////函    數: void Delay_us(UINT32_

C++函式

http://blog.csdn.net/keith_bb/article/details/53055380 部落格clock、time函式 http://blog.csdn.net/tangweide/article/details/7063747 _sleep、dela

Atmel Studio 6函式錯誤的解決方法

錯誤 __builtin_avr_delay_cycles expects an integer constant.    經過查詢發現是標頭檔案版本更新所致。delay.h檔案214行說明如下: Note: The new implementation of _de

STM32通過普通函式來精確

在STM32中處處會用到延時函式,一般而言,對於普通的控制延時,並不會要求特別精確,所以可以使用普通的延時函式,例如 void delay(u32 time) { while(time--);

stm32函式

//粗延時函式,微秒 void delay_nus(u16 time) {        u16 i=0;      while(time--)    {       i=10;  //自己定義    

STM32使用systick定時器定義硬體精準函式

前言 博文基於STM32F103ZET6和標準韌體庫V3.5.0在MDK5環境下開發; 本博文討論的是晶片不執行作業系統的情況下完成1s的延時功能; 如有不足之處還請多多指教; SysTick—系統滴答定時器是什麼? 是一個24位的硬體倒計數定時器; Sys

STM32的SysTick定時器與Delay函式

1.BB一下 原子哥的Delay延時函式,在沒有使用OS的情況下,沒有使用SysTick中斷,而筆者希望通過該中斷記錄系統時間 不使用OS,使用SysTick中斷 不使用OS,不使用SysTick

STM32】SysTick滴答定時器(delay函式講解)

STM32F1xx官方資料:《Cortex-M3權威指南-中文》-第8章最後一個小節:Systick定時器SysTick定時器Systick定時器,是一個簡單的定時器,對於CM3、CM4核心晶片,都有Systick定時器。Systick定時器常用來做延時,或者實時系統的心跳時

stm32 使用正點原子delay函式,主函式失效

最近在做一個東西時,發現一個現象。之前一直沒有發現過,或者發現也沒有仔細研究過,在此為大家分享。 在使用原子哥的延時函式時,發現主函式裡面的延時函式失效了。沒有起任何作用。下面簡單分析一個整個過程。 先直接上程式碼,很簡單的一個例項 int main(void) {

STM32 函式高階用法分析

一、使用場景 第一種情況,在使用普通 STM32 延遲函式,類似於 HAL_Delay(time),由於該函式是使用迴圈去判斷及延時的,所以在執行該函式時整個程式會在此處等待定時器的中斷服務函式修改參量使得迴圈判決條件不成立,從而繼續程式的執行,同時也達到延遲

STM32 SysTick定時器做函式

在STM32中延時函式用的非常廣泛,具體延時函式怎麼使用,下面我們來進行想詳解,本文主要介紹採用SysTick計時器來實驗系統延時: 原理介紹:                  SysTick計時器是一個24位的倒計數定時器,主要用來做作業系統的定時器,每來一個時鐘週期

Linux驅動編寫找不到sleep系列函式的解決辦法

目錄 Linux驅動編寫中找不到sleep系列延時函式的解決辦法 開發環境 問題描述 原因分析 解決辦法 Linux驅動編寫中找不到sleep系列延時函式的解決辦法 開發環境 宿主機:ub

Linux Shell函式

在 linux shell 指令碼中經常需要做一些延時處理。 所以經常要用到 sleep 或 usleep 函式。 下面來說一下 sleep 和 usleep 的區別: sleep : 預設以秒為單位。 usleep : 預設以微秒為單位。 1s = 1000ms

STM32 自定義函式

在stm32除錯過程中加入一個延時,有兩種方式:一種是純計數方式,另一種是使用系統計數器的方式。 現使用系統計數器產生中斷的方式實現,查閱STM32的程式設計手冊可知,STM32有一個24bit的系統計時器,並有STK_CTRL、STK_LOAD、STK_VAL、STK_C

STM32基於systick的函式(V3.5庫函式

/** 滴答定時器systick延時函式 */ #define D13_ON GPIO_ResetBits(GPIOC,GPIO_Pin_13) #define D13_OFF GPIO_SetBits(GPIOC,GPIO_Pin_13) _

利用STM32的SysTick設計精確函式

在專案中使用I2C介面感測器時要求有比較精確的延時,在網上搜了下,如果不想用中斷SysTick定時器可以做到,找到如下資料: 主要仿照原子的《STM32不完全手冊》。SYSTICK 的時鐘固定為HCLK 時鐘的1/8,在這裡我們選用內部時鐘源72M,所以SYSTICK的時

STM32 函式解析

一、函式原型 STM32官方提供的函式庫中,可以找到類似於 HAL_Delay() 這樣的函式。這個函式的就是通過使用定時器,達到一個較為精確的時間延遲,提供給使用者呼叫。 這個函式一般包含在類似於 stm32f4xx_hal.c 這樣的函式中。函式原型如下

DSP兩個函式的區別(轉)

在程式設計的時候可以用CCS自帶的延時函式,在使用時我發現有兩個延時函式都可以用: DELAY_US(1); DSP28x_usDelay(1); 在呼叫DELAY_US(1)這

linux核心函式

第一類延時函式原型是:(忙等) void ndelay(unsigned long nsecs); void udelay(unsigned long usecs); void mdelay(unsigned long msecs); 說明:核心函式 ndelay, ude

C\C++計時、函式

C\C++標準庫中提供了兩種計時函式clock()和time()。其用法如下: (1)clock()函式用法 void timeConsume() { double start,stop,durationTime; start = clo