日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]為了驅(qū)動ARF2496K這款芯片,做STM32上的移植,所以第一步需要解決的就是時序問題,很顯然在STM32下類似于51的延時方法并不適用,自然想到了采用定時器進行定時來延時。目前使用的是查詢方式進行延時。環(huán)境: STM32F1

為了驅(qū)動ARF2496K這款芯片,做STM32上的移植,所以第一步需要解決的就是時序問題,很顯然在STM32下類似于51的延時方法并不適用,自然想到了采用定時器進行定時來延時。目前使用的是查詢方式進行延時。


環(huán)境: STM32F107主控,采用STLINK仿真

代碼如下:


staticvoidTIM5_Init_Query(CALC_TYPEtype,uint32_tval)

{

TIM_TimeBaseInitTypeDefTim5;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);

Tim5.TIM_Period=1;//???

if(type==CALC_TYPE_S)//延時以S為單位時,時鐘頻率57600Hz,外部需要1250次計時

{

Tim5.TIM_Prescaler=57600-1;//預分頻72MHz/57600=1250Hz

}elseif(type==CALC_TYPE_MS)

{

Tim5.TIM_Prescaler=2880-1;//25000Hz,定時器計數(shù)25次為ms

}elseif(type==CALC_TYPE_US)

{

Tim5.TIM_Prescaler=72-1;//1MHz,計數(shù)1次為us

}else

{

Tim5.TIM_Prescaler=7200-1;

}

Tim5.TIM_ClockDivision=0;

Tim5.TIM_CounterMode=TIM_CounterMode_Down;//向下計數(shù)

TIM_TimeBaseInit(TIM5,&Tim5);

}

staticvoidTIM5_S_CALC(uint32_ts)

{

u16counter=(s*1250)&0xFFFF;//前提定時器時鐘為1250Hz

TIM_Cmd(TIM5,ENABLE);

TIM_SetCounter(TIM5,counter);//設置計數(shù)值

while(counter>1)

{

counter=TIM_GetCounter(TIM5);

}

TIM_Cmd(TIM5,DISABLE);

}

staticvoidTIM5_MS_CALC(uint32_tms)

{

u16counter=(ms*25)&0xFFFF;

TIM_Cmd(TIM5,ENABLE);

TIM_SetCounter(TIM5,counter);//設置計數(shù)值

while(counter>1)

{

counter=TIM_GetCounter(TIM5);

}

TIM_Cmd(TIM5,DISABLE);

}

staticvoidTIM5_US_CALC(uint32_tus)

{

u16counter=us&0xffff;

TIM_Cmd(TIM5,ENABLE);

TIM_SetCounter(TIM5,counter);//設置計數(shù)值

while(counter>1)

{

counter=TIM_GetCounter(TIM5);

}

TIM_Cmd(TIM5,DISABLE);

}

intmain()

{

SystemInit();//庫函數(shù)初始化系統(tǒng)時鐘源選擇,PLL等

#ifdef_DEBUG

Init_PD11();

#endif

TIM5_Init_Query(CALC_TYPE_US);

while(1)

{

PD11_U;//產(chǎn)生方波

TIM5_US_CALC(1);//TIM5_MS_CALC(1);毫秒延時,TIM5_S_CALC(1);秒級別延時

PD11_D;

TIM5_US_CALC(1);

}

}


實驗數(shù)據(jù):


延時1微秒時,略有出入,下圖:

(延時1us,并不精準,這與while循環(huán)中的語句有關)

延時20微秒時,比較準確,下圖:


延時1毫秒時,下圖:

(差了0.2ms,也就是才延時0.9ms,可以將分頻系數(shù)降低,然后延時值加大些進行改善)

延時20毫秒時,下圖:


延時1秒時,下圖:



毫秒延時那里修改成下面代碼,基本上能精準。


Tim5.TIM_Prescaler=720-1;//100KHz,定時器計數(shù)100次為1ms

staticvoidTIM5_MS_CALC(uint32_tms)

{

u16counter=(ms*100)&0xFFFF;//前提定時器時鐘為100KHz

TIM_Cmd(TIM5,ENABLE);

TIM_SetCounter(TIM5,counter);//設置計數(shù)值

while(counter>1)

{

counter=TIM_GetCounter(TIM5);

}

TIM_Cmd(TIM5,DISABLE);

}



本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關閉