www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀] 前天學(xué)了下stm的systick,發(fā)現(xiàn)還滿好用的,可以用來精確定時.以前在用CVAVR的時候發(fā)現(xiàn)里面的delay.h非常好用.于是,利用stm32的SysTick做了個精確的延時頭函數(shù). SysTick的配置在void delay_init(u8 SYS

前天學(xué)了下stm的systick,發(fā)現(xiàn)還滿好用的,可以用來精確定時.以前在用CVAVR的時候發(fā)現(xiàn)里面的delay.h非常好用.于是,利用stm32的SysTick做了個精確的延時頭函數(shù).


SysTick的配置在void delay_init(u8 SYSCLK);里面輸入的參數(shù)SYSCLK是你配置的系統(tǒng)時鐘,比如72M,我就調(diào)用delay_init(72);然后就完成了對SysTick的初始化設(shè)置.在后面調(diào)用delay_ms(u32 Nms);delay_us(u32 Nus);就可以得到很準確的延時.


注意:


1,delay_us(u32 Nus);在Nus值很小的時候,誤差比較大,我仿真的時候delay_us(1);實際上得到的是延時了1.5us左右.理論上Nus的值越大,越準確.


2,delay_ms(u32 Nms);的參數(shù)不能太大!更具你系統(tǒng)時鐘來確定.72M的時候Nms的最大值是1864.在其他晶振(<72M)條件下,該值會變大.計算方法:Nms<=0xffffff*8/SYSCLK.


在包括了這個頭函數(shù)之后可以得到很準確的延時,也不會產(chǎn)生中斷,其他中斷可以打斷delay_us,delay_ms的執(zhí)行.


#ifndef __DELAY_H

#define __DELAY_H

//使用SysTick的普通計數(shù)模式對延遲進行管理

//包括delay_us,delay_ms

//正點原子@SCUT

//2008/12/13

static u8 fac_us=0;//us延時倍乘數(shù)

static u16 fac_ms=0;//ms延時倍乘數(shù)

//初始化延遲函數(shù)

void delay_init(u8 SYSCLK)

{

SysTick->CTRL&=0xfffffffb;//選擇內(nèi)部時鐘 HCLK/8

fac_us=SYSCLK/8;

fac_ms=(u16)fac_us*1000;

}

//延時Nms

//注意Nms的范圍

//Nms<=0xffffff*8/SYSCLK

//對72M條件下,Nms<=1864

void delay_ms(u16 nms)

{

SysTick->LOAD=(u32)nms*fac_ms; //時間加載

SysTick->CTRL|=0x01; //開始倒數(shù)

while(!(SysTick->CTRL&(1<<16))); //等待時間到達

SysTick->CTRL&=0XFFFFFFFE; //關(guān)閉計數(shù)器

SysTick->VAL=0X00000000; //清空計數(shù)器

}

//延時us

void delay_us(u32 Nus)

{

SysTick->LOAD=Nus*fac_us; //時間加載

SysTick->CTRL|=0x01; //開始倒數(shù)

while(!(SysTick->CTRL&(1<<16)));//等待時間到達

SysTick->CTRL=0X00000000; //關(guān)閉計數(shù)器

SysTick->VAL=0X00000000; //清空計數(shù)器

}

#endif


另外的一種方法 :


/*---------------------------------

延時模塊函數(shù)

說明:只需在工程中加入delay.c和delay.h

文件,即可用 Delayms(__IO uint32_t nTime);

Delayus(__IO uint32_t nTime)

-----------------------------------*/

#ifndef __DELAY_H

#define __DELAY_H

#include "stm32f10x.h"

/*---------------------------------

描 述:參數(shù)1即為1ms,1000即為1s;只有幾

us的誤差;

-----------------------------------*/

extern void Delayms(__IO uint32_t nTime);


/*---------------------------------

描 述:參數(shù)1即為1us,1000即為1ms;只有幾

us的誤差;

-----------------------------------*/

extern void Delayus(__IO uint32_t nTime);

/*---------------------------------

函數(shù)名:延時調(diào)整形式的delaynus函數(shù),

描 述:參數(shù)1即為1us,1000即為1ms;

-----------------------------------*/

extern void delay_nus(unsigned long n);

/*---------------------------------

函數(shù)名:延時調(diào)整形式的delaynms函數(shù),

描 述:參數(shù)1即為1ms,1000即為1s;

-----------------------------------*/

extern void delay_nms(unsigned long n);

#endif


C 函數(shù)


/*---------------------------------

延時模塊函數(shù)

說明:只需在工程中加入delay.c和delay.h

文件,即可用 Delayms(__IO uint32_t nTime);

Delayus(__IO uint32_t nTime)

-----------------------------------*/

#include"delay.h"

static __IO uint32_t TimingDelay;

/* Private function prototypes -----------------------------------------------*/

/*---------------------------------

函數(shù)名:ms延時函數(shù)

描 述:參數(shù)1即為1ms,1000即為1s;只有幾

us的誤差;

-----------------------------------*/

void Delayms(__IO uint32_t nTime)

{

while(SysTick_Config(SystemCoreClock/1000));

TimingDelay = nTime;

while(TimingDelay != 0);

SysTick->CTRL=0x00; //關(guān)閉計數(shù)器

SysTick->VAL =0X00; //清空計數(shù)器

}

/*---------------------------------

函數(shù)名:us延時函數(shù)

描 述:參數(shù)1即為1us,1000即為1ms;只有幾

us的誤差;

-----------------------------------*/

void Delayus(__IO uint32_t nTime)

{

while(SysTick_Config(SystemCoreClock/1000000));

TimingDelay = nTime;

while(TimingDelay != 0);

SysTick->CTRL=0x00; //關(guān)閉計數(shù)器

SysTick->VAL =0X00; //清空計數(shù)器

}

/*---------------------------------

函數(shù)名:延時輔助函數(shù)

描 述:

-----------------------------------*/

void TimingDelay_Decrement(void)

{

if (TimingDelay != 0x00)

{

TimingDelay--;

}

}

/*---------------------------------

函數(shù)名:systick的中斷函數(shù)

描 述:參數(shù)1即為1us,1000即為1ms;只有幾

us的誤差;

-----------------------------------*/

void SysTick_Handler(void)

{

TimingDelay_Decrement();

}

/*---------------------------------

函數(shù)名:延時調(diào)整形式的delaynus函數(shù),

描 述:參數(shù)1即為1us,1000即為1ms;

-----------------------------------*/

void delay_nus(unsigned long n)

{

unsigned long j;

while(n--)

{

j=12;

while(j--);

}

}

/*---------------------------------

函數(shù)名:延時調(diào)整形式的delaynms函數(shù),

描 述:參數(shù)1即為1ms,1000即為1s;

-----------------------------------*/

void delay_nms(unsigned long n)

{

while(n--)

delay_nus(1030);

}


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

在Linux環(huán)境下的C語言編程中,函數(shù)的可重入性(Reentrancy)是一個至關(guān)重要的概念。它直接關(guān)系到多線程或多任務(wù)環(huán)境下程序的穩(wěn)定性和可靠性。所謂可重入函數(shù),是指一個函數(shù)可以被多個線程或任務(wù)安全地調(diào)用,而不會導(dǎo)致數(shù)...

關(guān)鍵字: Linux 庫函數(shù)

這篇文章想分享筆者在嵌入式開發(fā)過程中常用的庫函數(shù),他們的使用方法,使用場景,使用好處以及頭文件位置。1#include一般我在寫C代碼的時候都會包含此頭文件,因為一旦包含此文件后,你就可以暢快的使用bool數(shù)據(jù)類型,而不...

關(guān)鍵字: 庫函數(shù)

關(guān)注、星標公眾號,直達精彩內(nèi)容來源:知乎作者:Clarence這篇文章想分享筆者在嵌入式開發(fā)過程中常用的庫函數(shù),他們的使用方法,使用場景,使用好處以及頭文件位置。1#include一般我在寫C代碼的時候都會包含此頭文件,...

關(guān)鍵字: 庫函數(shù)

基本概念闡述memcpy和memmove都是C語言的庫函數(shù),相比于?strcpy和?strncpy只能針對于字符類型的數(shù)組(),這兩個函數(shù)可以拷貝其他類型的數(shù)組,對于?memcpy和?memmove的區(qū)別是什么呢?這里,...

關(guān)鍵字: 庫函數(shù) ov

在嵌入式Linux的C語言開發(fā)中,C語言的基本編程依然是最重要的內(nèi)容。

關(guān)鍵字: 嵌入式 C語言 庫函數(shù)

自秋季以來,8英寸晶圓代工產(chǎn)能緊缺,報價調(diào)漲,MCU、MOS,TDDI,閃存,面板等電子元器件進入了愈演愈烈的漲價模式。ST單片機的熱門型號漲幅更是一度達到了60%,并且交期長達3個月。國產(chǎn)替換需求趨勢迫在眉睫,世強硬創(chuàng)...

關(guān)鍵字: 世強元件電商 st MCU

蝴蝶扇動翅膀,便可引發(fā)彼岸的暴風(fēng)雨。STM32這只“蝴蝶”不僅掀起了MCU的風(fēng)暴,還走進了工程師和千家萬戶。

關(guān)鍵字: st MCU mpu

一、什么是物聯(lián)網(wǎng)及物聯(lián)網(wǎng)終端   物聯(lián)網(wǎng)   目前業(yè)界對物聯(lián)網(wǎng)還沒有一個完全統(tǒng)一的概念,但普遍認可的概念是通過射頻識別(RFID)、紅外感應(yīng)器、全球定位系統(tǒng)(GPS)、激光掃描器、環(huán)境傳感器、圖

關(guān)鍵字: st stk6153

汽車可能是用戶必須操作的最尖端的電子設(shè)備。 由于其日益復(fù)雜, 很有必要不斷提高司機和乘客們的舒適和方便的特點。 這些功能涉及了如車頂和門區(qū)控制系統(tǒng),暖通空調(diào)系統(tǒng),雨刷和座椅控制系統(tǒng),照明控制系統(tǒng)

關(guān)鍵字: 汽車電子 st 電子控制 機電一體化

IBM、意法半導(dǎo)體(ST)與 Shaspa 宣佈將攜手推動云端和行動運算在智慧家庭領(lǐng)域的發(fā)展,讓設(shè)備廠商和服務(wù)供應(yīng)商能為消費者帶來創(chuàng)新的居家功能管理和互動方式,透過手勢識別和語音辨識等多種用戶介

關(guān)鍵字: IBM st 智能家居 shaspa
關(guān)閉