資源簡(jiǎn)介
stm32 延遲的源代碼 delay.h 包含 sys.h 使用時(shí)包含進(jìn)工程目錄

代碼片段和文件信息
#include?“delay.h“
//////////////////////////////////////////////////////////////////////////////////? ?
//如果需要使用OS則包括下面的頭文件即可.
#if?SYSTEM_SUPPORT_OS
#include?“includes.h“ //ucos?使用 ??
#endif
////////////////////////////////////////////////////////////////////////////////// ?
//本程序只供學(xué)習(xí)使用,未經(jīng)作者許可,不得用于其它任何用途
//ALIENTEK?STM32開發(fā)板
//使用SysTick的普通計(jì)數(shù)模式對(duì)延遲進(jìn)行管理(適合STM32F10x系列)
//包括delay_usdelay_ms
//正點(diǎn)原子@ALIENTEK
//技術(shù)論壇:www.openedv.com
//創(chuàng)建日期:2010/1/1
//版本:V1.7
//版權(quán)所有,盜版必究。
//Copyright(C)?廣州市星翼電子科技有限公司?2009-2019
//All?rights?reserved
//********************************************************************************
//V1.2修改說明
//修正了中斷中調(diào)用出現(xiàn)死循環(huán)的錯(cuò)誤
//防止延時(shí)不準(zhǔn)確采用do?while結(jié)構(gòu)!
//V1.3修改說明
//增加了對(duì)UCOSII延時(shí)的支持.
//如果使用ucosIIdelay_init會(huì)自動(dòng)設(shè)置SYSTICK的值使之與ucos的TICKS_PER_SEC對(duì)應(yīng).
//delay_ms和delay_us也進(jìn)行了針對(duì)ucos的改造.
//delay_us可以在ucos下使用而且準(zhǔn)確度很高更重要的是沒有占用額外的定時(shí)器.
//delay_ms在ucos下可以當(dāng)成OSTimeDly來用在未啟動(dòng)ucos時(shí)它采用delay_us實(shí)現(xiàn)從而準(zhǔn)確延時(shí)
//可以用來初始化外設(shè)在啟動(dòng)了ucos之后delay_ms根據(jù)延時(shí)的長(zhǎng)短選擇OSTimeDly實(shí)現(xiàn)或者delay_us實(shí)現(xiàn).
//V1.4修改說明?20110929
//修改了使用ucos但是ucos未啟動(dòng)的時(shí)候delay_ms中中斷無法響應(yīng)的bug.
//V1.5修改說明?20120902
//在delay_us加入ucos上鎖,防止由于ucos打斷delay_us的執(zhí)行,可能導(dǎo)致的延時(shí)不準(zhǔn)。
//V1.6修改說明?20150109
//在delay_ms加入OSLockNesting判斷。
//V1.7修改說明?20150319
//修改OS支持方式以支持任意OS(不限于UCOSII和UCOSIII理論上任意OS都可以支持)
//添加:delay_osrunning/delay_ostickspersec/delay_osintnesting三個(gè)宏定義
//添加:delay_osschedlock/delay_osschedunlock/delay_ostimedly三個(gè)函數(shù)
//////////////////////////////////////////////////////////////////////////////////??
static?u8??fac_us=0; //us延時(shí)倍乘數(shù) ???
static?u16?fac_ms=0; //ms延時(shí)倍乘數(shù)在ucos下代表每個(gè)節(jié)拍的ms數(shù)
#if?SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS定義了說明要支持OS了(不限于UCOS).
//當(dāng)delay_us/delay_ms需要支持OS的時(shí)候需要三個(gè)與OS相關(guān)的宏定義和函數(shù)來支持
//首先是3個(gè)宏定義:
//????delay_osrunning:用于表示OS當(dāng)前是否正在運(yùn)行以決定是否可以使用相關(guān)函數(shù)
//delay_ostickspersec:用于表示OS設(shè)定的時(shí)鐘節(jié)拍delay_init將根據(jù)這個(gè)參數(shù)來初始哈systick
//?delay_osintnesting:用于表示OS中斷嵌套級(jí)別因?yàn)橹袛嗬锩娌豢梢哉{(diào)度delay_ms使用該參數(shù)來決定如何運(yùn)行
//然后是3個(gè)函數(shù):
//??delay_osschedlock:用于鎖定OS任務(wù)調(diào)度禁止調(diào)度
//delay_osschedunlock:用于解鎖OS任務(wù)調(diào)度重新開啟調(diào)度
//????delay_ostimedly:用于OS延時(shí)可以引起任務(wù)調(diào)度.
//本例程僅作UCOSII和UCOSIII的支持其他OS請(qǐng)自行參考著移植
//支持UCOSII
#ifdef? OS_CRITICAL_METHOD //OS_CRITICAL_METHOD定義了說明要支持UCOSII
#define?delay_osrunning OSRunning //OS是否運(yùn)行標(biāo)記0不運(yùn)行;1在運(yùn)行
#define?delay_ostickspersec OS_TICKS_PER_SEC //OS時(shí)鐘節(jié)拍即每秒調(diào)度次數(shù)
#define?delay_osintnesting? OSIntNesting //中斷嵌套級(jí)別即中斷嵌套次數(shù)
#endif
//支持UCOSIII
#ifdef? CPU_CFG_CRITICAL_METHOD //CPU_CFG_CRITICAL_METHOD定義了說明要支持UCOSIII
#define?delay_osrunning OSRunning //OS是否運(yùn)行標(biāo)記0不運(yùn)行;1在運(yùn)行
#define?delay_tickspersec OSCfg_TickRate_Hz //OS時(shí)鐘節(jié)拍即每秒調(diào)度次數(shù)
#define?delay_intnesting? OSIntNestingCtr //中斷嵌套級(jí)別即中斷嵌套次數(shù)
#endif
//us級(jí)延時(shí)時(shí)關(guān)閉任務(wù)調(diào)度(防止打斷us級(jí)延遲)
void?delay_osschedlock(void)
{
#ifdef?CPU_CFG_CRITICAL_METHOD??? //使用UCOSIII
OS_ERR?err;?
OSSchedLock(&err); //UCOSIII的方式禁止調(diào)度,防止打斷us延時(shí)
#else //否則UCOSII
OSSchedLock(); //UCOSII的方式禁止調(diào)度,防止打斷us延時(shí)
#endif
}
//us級(jí)延時(shí)時(shí)恢復(fù)任務(wù)調(diào)度
void?delay_osschedunlock(void)
{
#ifdef?CPU_CFG_CRITIC
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????7681??2015-03-23?15:40??stm32?delay.h?延時(shí)文件\delay.c
?????文件????????1837??2019-01-15?23:10??stm32?delay.h?延時(shí)文件\delay.h
?????文件?????????876??2015-03-12?20:20??stm32?delay.h?延時(shí)文件\sys.c
?????文件????????2804??2019-01-15?23:13??stm32?delay.h?延時(shí)文件\sys.h
?????目錄???????????0??2019-01-17?17:47??stm32?delay.h?延時(shí)文件\
- 上一篇:馬賽克去除
- 下一篇:dseo13b.exe
評(píng)論
共有 條評(píng)論