資源簡介
stm32 延遲的源代碼 delay.h 包含 sys.h 使用時包含進工程目錄

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