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

當前位置:首頁 > 單片機 > 單片機
[導讀] 因為STM32 HAL庫中僅有對HAl_Delay()毫秒級的延時,為實現(xiàn)精確的微秒級延時,就不得不修改Systick,但由于HAL庫內(nèi)部使用其作為超時判斷等操作,對其修改會發(fā)生不可預期的錯誤,不建議修改。因此,使用通

因為STM32 HAL庫中僅有對HAl_Delay()毫秒級的延時,為實現(xiàn)精確的微秒級延時,就不得不修改Systick,但由于HAL庫內(nèi)部使用其作為超時判斷等操作,對其修改會發(fā)生不可預期的錯誤,不建議修改。因此,使用通用定時器進行定時操作。
參考網(wǎng)上例程,使用定時器中斷方式實現(xiàn)延時,代碼如下:

/*

TIM3溢出時間=72MHz/(71+1)/(0+1)=1Mhz=1us

計數(shù)模式:向上計數(shù)模式

使能TIM3中斷

*/

__IO static uint32_t usDelay=0;


void Delayms(uint32_t ms)

{

Delayus(ms*1000);

}


void Delayus(uint32_t us)

{

usDelay=us;


HAL_TIM_Base_Start_IT(&htim3);


while(usDelay);


HAL_TIM_Base_Stop_IT(&htim3);

}


//重寫回調(diào)函數(shù)

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{

if(htim->Instance == TIM3)

{

if(usDelay!=0)

{

usDelay--;

}

}

}

雖然說以上程序的并沒什么錯誤,但在實際運行中,卻無法得到正確的運行。同時,在進行Debug調(diào)試時,單步執(zhí)行又可以正常運行。
主要原因在于:中斷間隔時間太短,導致中斷函數(shù)還沒有運行完成,其中斷標志位卻再次置位,導致在程序卡死。

因此,關閉定時器中斷,采用定時器輪詢的方式實現(xiàn)延時,代碼如下:


/*

TIM3溢出時間=72MHz/(71+1)/(0+1)=1Mhz=1us

計數(shù)模式:向下計數(shù)模式

*/

void Delay_us(uint32_t us){

uint16_t counter=us&0xffff;


HAL_TIM_Base_Start(&htim3);

__HAL_TIM_SetCounter(&htim3,counter);


while(counter>1)

{

counter=__HAL_TIM_GetCounter(&htim3);

}


HAL_TIM_Base_Stop(&htim3);

}


void Delay_ms(uint32_t ms){

Delay_us(1000*ms);

}



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