在嵌入式系統(tǒng)與設(shè)備驅(qū)動(dòng)開(kāi)發(fā)的廣闊領(lǐng)域中,時(shí)鐘、定時(shí)器以及延時(shí)函數(shù)扮演著至關(guān)重要的角色。它們不僅是系統(tǒng)時(shí)間管理的基石,更是實(shí)現(xiàn)高效、精確控制硬件行為的關(guān)鍵工具。本文將深入探討這三種機(jī)制在驅(qū)動(dòng)開(kāi)發(fā)中的具體應(yīng)用、實(shí)現(xiàn)方式及注意事項(xiàng),以期為開(kāi)發(fā)者提供全面的理解和實(shí)踐指導(dǎo)。
在常規(guī)的例程中,都少不了測(cè)試I/O控制作用的點(diǎn)亮LED的程序。
單片機(jī)編程過(guò)程中經(jīng)常用到延時(shí)函數(shù),最常用的莫過(guò)于微秒級(jí)延時(shí)delay_us()和毫秒級(jí)delay_ms()。
今天主要分享嵌入式系統(tǒng)中常用的延時(shí)函數(shù)。
/* SystemFrequency / 1000 1ms中斷一次* SystemFrequency / 100000 10us中斷一次* SystemFrequency / 1000000 1us中斷一次*/#define SYSTICKPERIOD 0.000001#define SYSTICKFREQUENCY (1/SYSTICKP
#ifndef _DELAY_H_#define _DELAY_H_#define uint unsigned int#define uchar unsigned charvoid delay_1us( void ); //延時(shí)1usvoid delay_1ms( void ); //延時(shí)nmsvoid delay_nus( uint n );//延時(shí)1msvoid delay_nms
Q:什么是SYSTick定時(shí)器?SysTick 是一個(gè)24 位的倒計(jì)數(shù)定時(shí)器,當(dāng)計(jì)到0 時(shí),將從RELOAD 寄存器中自動(dòng)重裝載定時(shí)初值。只要不把它在SysTick 控制及狀態(tài)寄存器中的使能位清除,就永不停息。Q:為什么要設(shè)置SysTick定時(shí)
注:本文實(shí)踐用到的芯片是cortex-m3系列的STM32F103VET6,文中涉及內(nèi)容覆蓋整個(gè)STM32F1系列M3單片機(jī)。本文適合學(xué)習(xí)STM32的初學(xué)者閱讀。STM32定時(shí)器包含基本定時(shí)器、通用定時(shí)器和高級(jí)定時(shí)器,其中TIM6和TIM7是STM32當(dāng)
#ifndef _DELAY_51_H_#define _DELAY_51_H_#include #define uint unsigned int#define uchar unsigned char//nus延時(shí)void delay_nus( uchar n );//nms延時(shí)void delay_nms( uchar n );//2us延時(shí)void delay_2us( ucha
第二個(gè)實(shí)驗(yàn),這個(gè)實(shí)驗(yàn)是基于第一個(gè)實(shí)驗(yàn)上在編譯函數(shù)中稍加改變而成,1 #include //也有其他的編譯方法,比如第二行可以也成 #define u16 unsigned int / typedef unsigned u16 2 sbit led = P2^0;3 void
//粗延時(shí)函數(shù),微秒void delay_nus(u16time){ u16 i=0; while(time--){i=10;//自己定義while(i--) ; }}//毫秒級(jí)的延時(shí)void delay_nms(u16 time){ u16i=0; while(time--){i=12000;//自己定義while(i--) ; }}運(yùn)用SysTi
/****************************************************** *說(shuō) 明:S3C2440 進(jìn)行微秒級(jí)、毫秒級(jí)延時(shí)函數(shù) ******************************************************/MCLK:405MHzHCLK:135MHzPCLK:67.5MHz在這里定時(shí)
//實(shí)例8:用不同數(shù)據(jù)類(lèi)型控制燈閃爍時(shí)間#include //包含單片機(jī)寄存器的頭文件 /****************************************************** 函數(shù)功能:用整形數(shù)據(jù)延時(shí)一段時(shí)間 ***********************************
先計(jì)算你單片機(jī)的振蕩(時(shí)鐘)周期 T= 1/晶振(11.0592MHZ)
C程序中可使用不同類(lèi)型的變量來(lái)進(jìn)行延時(shí)設(shè)計(jì)。經(jīng)實(shí)驗(yàn)測(cè)試,使用unsigned char類(lèi)型具有比unsigned int更優(yōu)化的代碼,在使用時(shí)應(yīng)該使用unsigned char作為延時(shí)變量。 以某晶振為12MHz的單片機(jī)為例,晶振為12MHz即一個(gè)機(jī)器周期為1us。