資源簡介
stm32測試用例 5個串口初始化, 實現全部串口隊列緩存,前三個串口DMA存儲,測試可用。.........

代碼片段和文件信息
#include?“delay.h“???
//////////////////////////////////////////////////////////////////////////////////? ?
//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的執行,可能導致的延時不準。
//////////////////////////////////////////////////////////////////////////////////? ?
static?u8??fac_us=0;//us延時倍乘數
static?u16?fac_ms=0;//ms延時倍乘數
#ifdef?OS_CRITICAL_METHOD? //如果OS_CRITICAL_METHOD定義了說明使用ucosII了.
//systick中斷服務函數使用ucos時用到
void?SysTick_Handler(void)
{ ???
OSIntEnter(); //進入中斷
????OSTimeTick();???????//調用ucos的時鐘服務程序???????????????
????OSIntExit();????????//觸發任務切換軟中斷
}
#endif
//初始化延遲函數
//當使用ucos的時候此函數會初始化ucos的時鐘節拍
//SYSTICK的時鐘固定為HCLK時鐘的1/8
//SYSCLK:系統時鐘
void?delay_init() ?
{
#ifdef?OS_CRITICAL_METHOD? //如果OS_CRITICAL_METHOD定義了說明使用ucosII了.
u32?reload;
#endif
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //選擇外部時鐘??HCLK/8
fac_us=SystemCoreClock/8000000; //為系統時鐘的1/8??
?
fac_ms=(u16)fac_us*1000;//非ucos下代表每個ms需要的systick時鐘數???
} ????
#ifdef?OS_CRITICAL_METHOD //使用了ucos
//延時nus
//nus為要延時的us數. ???? ???
void?delay_us(u32?nus)
{
u32?ticks;
u32?toldtnowtcnt=0;
u32?reload=SysTick->LOAD; //LOAD的值,相當于周期值 ???? ?
ticks=nus*fac_us;? //需要的節拍數 ?? ?
tcnt=0;
told=SysTick->VAL;???????? //剛進入時的計數器值
while(1)
{
tnow=SysTick->VAL;
if(tnow!=told)
{ ????
if(tnow tcnt+=told-tnow;//這里注意一下SYSTICK是一個遞減的計數器就可以了.
else?tcnt+=reload-tnow+told; ????
told=tnow;
if(tcnt>=ticks)break;//時間超過/等于要延遲的時間則退出.
}??
};? ????
}
//延時nms
//nms:要延時的ms數
void?delay_ms(u16?nms)
{
if(OSRunning==TRUE)//如果os已經在跑了 ????
{ ??
if(nms>=fac_ms)//延時的時間大于ucos的最少時間周期?
{
??? OSTimeDly(nms/fac_ms);//ucos延時
}
nms%=fac_ms; //ucos已經無法提供這么小的延時了采用普通方式延時????
}
delay_us((u32)(nms*1000)); //普通方式延時此時ucos無法啟動調度.
}
#else//不用ucos時
//延時nus
//nus為要延時的us數. ???? ???
void?delay_us(u32?nus)
{
u32?temp; ???? ?
SysTick->LOAD=nus*fac_us;?//時間加載 ?? ?
SysTick->VAL=0x00;????????//清空計數器
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk?;??????????//開始倒數 ?
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待時間到達 //bit16置一說明時間到,跳出循環???
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;???????//關閉計數器
SysTick->VAL?=0X00;???????//清空計數器 ?
}
//延時nms
//注意nms的范圍
//SysTick->LOAD為24位寄存器所以最大延時為:
//nms<=0xffffff*8*1000/SYSCLK
//SYSCLK單位為Hznms單位為ms
//對72M條件下nms<=1864?
void?delay_ms(u16?nms)
{
u32?temp; ??
SysTick->LOAD=(u32)nms*fac_ms;//時間加載(SysTick->LOAD為24bit)
SysTick->VAL?=0x00;???????????//清空計
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-12-05?09:22??stm32模板\
?????文件?????????399??2011-05-09?18:17??stm32模板\keilkill.bat
?????目錄???????????0??2019-12-05?09:25??stm32模板\LIB\
?????文件????????3899??2019-12-05?09:28??stm32模板\LIB\delay.c
?????文件????????1026??2019-10-24?09:38??stm32模板\LIB\delay.h
?????文件????????4449??2015-01-28?09:47??stm32模板\LIB\stm32f10x_it.c
?????文件????????2086??2011-04-04?19:03??stm32模板\LIB\stm32f10x_it.h
?????文件?????????399??2019-12-05?09:30??stm32模板\LIB\sys.c
?????文件????????2627??2019-12-05?09:30??stm32模板\LIB\sys.h
?????文件???????22212??2019-12-08?18:22??stm32模板\LIB\uart.c
?????文件????????1591??2019-12-05?14:49??stm32模板\LIB\uart.h
?????目錄???????????0??2019-12-08?18:22??stm32模板\OBJ\
?????文件??????271144??2019-12-08?18:22??stm32模板\OBJ\delay.crf
?????文件????????1703??2019-12-08?18:22??stm32模板\OBJ\delay.d
?????文件??????299300??2019-12-08?18:22??stm32模板\OBJ\delay.o
?????文件??????????19??2019-12-05?11:07??stm32模板\OBJ\ExtDll.iex
?????文件??????286043??2019-12-08?18:22??stm32模板\OBJ\main.crf
?????文件????????2041??2019-12-08?18:22??stm32模板\OBJ\main.d
?????文件??????311924??2019-12-08?18:22??stm32模板\OBJ\main.o
?????文件??????271537??2019-12-08?18:22??stm32模板\OBJ\misc.crf
?????文件????????1870??2019-12-08?18:22??stm32模板\OBJ\misc.d
?????文件??????302280??2019-12-08?18:22??stm32模板\OBJ\misc.o
?????文件??????????78??2019-12-08?18:22??stm32模板\OBJ\startup_stm32f10x_hd.d
?????文件???????53798??2019-12-08?18:22??stm32模板\OBJ\startup_stm32f10x_hd.lst
?????文件????????6708??2019-12-08?18:22??stm32模板\OBJ\startup_stm32f10x_hd.o
?????文件??????274629??2019-12-08?18:22??stm32模板\OBJ\stm32f10x_dma.crf
?????文件????????2041??2019-12-08?18:22??stm32模板\OBJ\stm32f10x_dma.d
?????文件??????313148??2019-12-08?18:22??stm32模板\OBJ\stm32f10x_dma.o
?????文件??????275035??2019-12-08?18:22??stm32模板\OBJ\stm32f10x_gpio.crf
?????文件????????2060??2019-12-08?18:22??stm32模板\OBJ\stm32f10x_gpio.d
?????文件??????324368??2019-12-08?18:22??stm32模板\OBJ\stm32f10x_gpio.o
............此處省略49個文件信息
評論
共有 條評論