資源簡(jiǎn)介
光強(qiáng)度傳感器驅(qū)動(dòng)芯片 TSL2561 驅(qū)動(dòng)程序 STM32

代碼片段和文件信息
#include?“delay.h“
#include?“sys.h“
//////////////////////////////////////////////////////////////////////////////////? ?
//如果使用ucos則包括下面的頭文件即可.
#if?SYSTEM_SUPPORT_UCOS
#include?“includes.h“ //ucos?使用 ??
#endif
////////////////////////////////////////////////////////////////////////////////// ?
//本程序只供學(xué)習(xí)使用,未經(jīng)作者許可,不得用于其它任何用途
//ALIENTEK?STM32開發(fā)板
//使用SysTick的普通計(jì)數(shù)模式對(duì)延遲進(jìn)行管理
//包括delay_usdelay_ms
//正點(diǎn)原子@ALIENTEK
//技術(shù)論壇:www.openedv.com
//修改日期:2012/9/2
//版本:V1.5
//版權(quán)所有,盜版必究。
//Copyright(C)?廣州市星翼電子科技有限公司?2009-2019
//All?rights?reserved
//********************************************************************************
//V1.2修改說(shuō)明
//修正了中斷中調(diào)用出現(xiàn)死循環(huán)的錯(cuò)誤
//防止延時(shí)不準(zhǔn)確采用do?while結(jié)構(gòu)!
//V1.3修改說(shuō)明
//增加了對(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來(lái)用在未啟動(dòng)ucos時(shí)它采用delay_us實(shí)現(xiàn)從而準(zhǔn)確延時(shí)
//可以用來(lái)初始化外設(shè)在啟動(dòng)了ucos之后delay_ms根據(jù)延時(shí)的長(zhǎng)短選擇OSTimeDly實(shí)現(xiàn)或者delay_us實(shí)現(xiàn).
//V1.4修改說(shuō)明?20110929
//修改了使用ucos但是ucos未啟動(dòng)的時(shí)候delay_ms中中斷無(wú)法響應(yīng)的bug.
//V1.5修改說(shuō)明?20120902
//在delay_us加入ucos上鎖,防止由于ucos打斷delay_us的執(zhí)行,可能導(dǎo)致的延時(shí)不準(zhǔn)。
//////////////////////////////////////////////////////////////////////////////////? ?
static?u8??fac_us=0;//us延時(shí)倍乘數(shù)
static?u16?fac_ms=0;//ms延時(shí)倍乘數(shù)
#ifdef?OS_CRITICAL_METHOD? //如果OS_CRITICAL_METHOD定義了說(shuō)明使用ucosII了.
//systick中斷服務(wù)函數(shù)使用ucos時(shí)用到
void?SysTick_Handler(void)
{ ???
OSIntEnter(); //進(jìn)入中斷
????OSTimeTick();???????//調(diào)用ucos的時(shí)鐘服務(wù)程序???????????????
????OSIntExit();????????//觸發(fā)任務(wù)切換軟中斷
}
#endif
//初始化延遲函數(shù)
//當(dāng)使用ucos的時(shí)候此函數(shù)會(huì)初始化ucos的時(shí)鐘節(jié)拍
//SYSTICK的時(shí)鐘固定為HCLK時(shí)鐘的1/8
//SYSCLK:系統(tǒng)時(shí)鐘
void?delay_init() ?
{
#ifdef?OS_CRITICAL_METHOD? //如果OS_CRITICAL_METHOD定義了說(shuō)明使用ucosII了.
u32?reload;
#endif
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //選擇外部時(shí)鐘??HCLK/8
fac_us=SystemCoreClock/8000000; //為系統(tǒng)時(shí)鐘的1/8??
?
#ifdef?OS_CRITICAL_METHOD? //如果OS_CRITICAL_METHOD定義了說(shuō)明使用ucosII了.
reload=SystemCoreClock/8000000; //每秒鐘的計(jì)數(shù)次數(shù)?單位為K ???
reload*=1000000/OS_TICKS_PER_SEC;//根據(jù)OS_TICKS_PER_SEC設(shè)定溢出時(shí)間
//reload為24位寄存器最大值:16777216在72M下約合1.86s左右
fac_ms=1000/OS_TICKS_PER_SEC;//代表ucos可以延時(shí)的最少單位 ???
SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;??? //開啟SYSTICK中斷
SysTick->LOAD=reload;? //每1/OS_TICKS_PER_SEC秒中斷一次
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;??? //開啟SYSTICK????
#else
fac_ms=(u16)fac_us*1000;//非ucos下代表每個(gè)ms需要的systick時(shí)鐘數(shù)???
#endif
} ????
#ifdef?OS_CRITICAL_METHOD //使用了ucos
//延時(shí)nus
//nus為要延時(shí)的us數(shù). ???? ???
void?delay_us(u32?nus)
{
u32?ticks;
u32?toldtnowtcnt=0;
u32?reload=SysTick->LOAD; //LOAD的值 ???? ?
ticks=nus*fac_us;? //需要的節(jié)拍數(shù) ?? ?
tcnt=0;
told=SysTick->VAL;???????? //剛進(jìn)入時(shí)的計(jì)數(shù)器值
while(1)
{
tnow=SysTick->VAL;
if(tnow!=told)
{ ????
if(tnow else?tcnt+=reload-tnow+told; ????
told=tnow;
if(tcnt>=ticks)break;//時(shí)間超過/等于要延遲的時(shí)間則退出.
}??
};? ????
}
//延時(shí)nms
//nms:要延時(shí)的ms
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-01-18?18:02??TLS2561\
?????目錄???????????0??2017-02-27?20:32??TLS2561\App\
?????目錄???????????0??2017-01-18?20:48??TLS2561\App\delay\
?????文件????????5037??2014-03-20?20:14??TLS2561\App\delay\delay.c
?????文件????????1517??2012-09-13?09:48??TLS2561\App\delay\delay.h
?????目錄???????????0??2017-03-03?16:33??TLS2561\App\gy2561\
?????文件????????5550??2017-03-03?16:33??TLS2561\App\gy2561\gy2561.c
?????文件????????4454??2017-03-03?16:24??TLS2561\App\gy2561\gy2561.h
?????目錄???????????0??2017-02-19?20:23??TLS2561\App\gy30\
?????文件????????1144??2017-02-19?20:23??TLS2561\App\gy30\BH1750.c
?????文件?????????975??2017-02-19?20:23??TLS2561\App\gy30\BH1750.h
?????文件?????????417??2017-02-09?14:57??TLS2561\App\gy30\gy30.c
?????文件?????????885??2017-02-09?14:26??TLS2561\App\gy30\gy30.h
?????目錄???????????0??2017-02-19?20:24??TLS2561\App\iic\
?????文件????????3122??2017-02-19?20:24??TLS2561\App\iic\iic.c
?????文件????????1469??2017-02-09?15:06??TLS2561\App\iic\iic.h
?????目錄???????????0??2017-01-18?21:46??TLS2561\App\led\
?????文件?????????627??2017-01-18?21:46??TLS2561\App\led\led.c
?????文件??????????99??2017-01-18?21:02??TLS2561\App\led\led.h
?????目錄???????????0??2017-02-19?20:56??TLS2561\App\oled\
?????文件???????11890??2014-07-14?23:49??TLS2561\App\oled\bmp.h
?????文件????????8303??2017-02-19?20:50??TLS2561\App\oled\oled.c
?????文件????????2755??2017-02-19?20:56??TLS2561\App\oled\oled.h
?????文件???????13994??2014-05-03?15:48??TLS2561\App\oled\oledfont.h
?????目錄???????????0??2017-01-18?20:50??TLS2561\App\sys\
?????文件?????????616??2012-09-16?19:18??TLS2561\App\sys\sys.c
?????文件????????2672??2012-09-16?19:18??TLS2561\App\sys\sys.h
?????目錄???????????0??2017-01-21?06:39??TLS2561\App\usart\
?????文件????????2476??2017-01-17?18:45??TLS2561\App\usart\usart1.c
?????文件?????????171??2017-01-17?18:44??TLS2561\App\usart\usart1.h
?????目錄???????????0??2017-01-14?12:02??TLS2561\CMSIS\
............此處省略136個(gè)文件信息
評(píng)論
共有 條評(píng)論