色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Systick定時(shí)器延時(shí)原理與HAL_Delay()延時(shí)函數(shù)的使用

嵌入式應(yīng)用開發(fā) ? 來(lái)源:嵌入式應(yīng)用開發(fā) ? 作者:嵌入式應(yīng)用開發(fā) ? 2022-04-26 09:09 ? 次閱讀

代碼的書寫過(guò)程中經(jīng)常用到延時(shí),這里主要講述一下HAl延時(shí),HAL庫(kù)之HAL_Delay()函數(shù)在72M主頻,STM32CUBEMX自動(dòng)生成情況下,默認(rèn)為延時(shí)1ms單位,即HAL_Delay(500)表示500ms延時(shí),這是因?yàn)樵谀J(rèn)狀態(tài)下,SysTick()默認(rèn)設(shè)置為1ms中斷,下面就原理進(jìn)行敘述。

Systick 定時(shí)器延時(shí)原理

Systick(滴答時(shí)鐘)是一個(gè)24位,向下計(jì)數(shù)的定時(shí)器,當(dāng)?shù)褂?jì)時(shí)完成后,定時(shí)器可以產(chǎn)生一個(gè)中斷,所以,當(dāng)頻率一定,計(jì)數(shù)個(gè)數(shù)一定時(shí),這個(gè)中斷就會(huì)以一定的時(shí)間間隔發(fā)生,如果每個(gè)中斷發(fā)送后調(diào)用的中斷函數(shù)中給一個(gè)變量累加,這樣我們就可以獲得一個(gè)與時(shí)間相關(guān)的變量。

HAL_Delay()延時(shí)函數(shù)的使用

如果你使用STM32CubeMx來(lái)生成一個(gè)工程,那么使用Systick來(lái)延時(shí)是非常方便的,你只需要調(diào)用HAL庫(kù)的一個(gè)虛函數(shù),它的原型如下:

__weak void HAL_Delay(__IO uint32_t Delay)

可以看到,HAL_Delay()是一個(gè)虛函數(shù),這表明用戶可以在其它的位置重定義,如果這樣,新的函數(shù)將會(huì)取代它,編譯 過(guò)程中也不會(huì)出現(xiàn)重定義的錯(cuò)誤。該函數(shù)只有一個(gè)32位的參數(shù),明顯的,這個(gè)形參指定了延時(shí)的時(shí)間,它的單位是毫秒(ms)。

214344dcweern3lcl5n0n3.jpg硬件延時(shí)

關(guān)于osDELAY函數(shù)可以看一下CMSIS_OS2.h里面的定義,我也是在網(wǎng)上查到具體的定義函數(shù),如下,但是我在官方提供的函數(shù)中未找到相關(guān)的函數(shù)內(nèi)容。實(shí)際使用中就是調(diào)用Free-RTOS函數(shù),然后直接使用 OSdelay(5);含義就是延時(shí)50ms。

實(shí)際上系統(tǒng)OSdelay就是一種程序阻塞的狀態(tài),在阻塞態(tài)下,其他資源函數(shù)進(jìn)行工作,時(shí)間到從阻塞態(tài)變?yōu)榫途w態(tài),再到運(yùn)行態(tài)。

214159vzr15eiii9ibx898.jpg系統(tǒng)延時(shí)

軟件延時(shí)就是大家用的最多的,讓程序運(yùn)行計(jì)算來(lái)延時(shí),這就很多了,直接上代碼。

void delay_ms(u16 nms)
{	
	if(delay_osrunning&&delay_osintnesting==0)	//如果OS已經(jīng)在跑了,并且不是在中斷里面(中斷里面不能任務(wù)調(diào)度)	    
	{		 
		if(nms>=fac_ms)							//延時(shí)的時(shí)間大于OS的最少時(shí)間周期 
		{ 
   			delay_ostimedly(nms/fac_ms);		//OS延時(shí)
		}
		nms%=fac_ms;							//OS已經(jīng)無(wú)法提供這么小的延時(shí)了,采用普通方式延時(shí)    
	}
	delay_us((u32)(nms*1000));					//普通方式延時(shí)  
}
void delay_us(u32 nus)
{		
	u32 temp;	    	 
	SysTick->LOAD=nus*fac_us; 					//時(shí)間加載	  		 
	SysTick->VAL=0x00;        					//清空計(jì)數(shù)器
	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;	//開始倒數(shù)	  
	do
	{
		temp=SysTick->CTRL;
	}while((temp&0x01)&&!(temp&(1<<16)));		//等待時(shí)間到達(dá)   
	SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;	//關(guān)閉計(jì)數(shù)器
	SysTick->VAL =0X00;      					 //清空計(jì)數(shù)器	 
}
//延時(shí)nms
//注意nms的范圍
//SysTick->LOAD為24位寄存器,所以,最大延時(shí)為:
//nms<=0xffffff*8*1000/SYSCLK
//SYSCLK單位為Hz,nms單位為ms
//對(duì)72M條件下,nms<=1864 
void delay_ms(u16 nms)
{	 		  	  
	u32 temp;		   
	SysTick->LOAD=(u32)nms*fac_ms;				//時(shí)間加載(SysTick->LOAD為24bit)
	SysTick->VAL =0x00;							//清空計(jì)數(shù)器
	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;	//開始倒數(shù)  
	do
	{
		temp=SysTick->CTRL;
	}while((temp&0x01)&&!(temp&(1<<16)));		//等待時(shí)間到達(dá)   
	SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;	//關(guān)閉計(jì)數(shù)器
	SysTick->VAL =0X00;       					//清空計(jì)數(shù)器	  	    
} 

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3255

    瀏覽量

    115169
  • 延時(shí)函數(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    25

    瀏覽量

    10045
  • Systick
    +關(guān)注

    關(guān)注

    0

    文章

    62

    瀏覽量

    13126
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32 SYSTICK定時(shí)器常見(jiàn)問(wèn)題

    我們知道,STM32庫(kù)函數(shù)里通常使用來(lái)自內(nèi)核的系統(tǒng)定時(shí)器SYSTICK作為時(shí)基,實(shí)現(xiàn)計(jì)數(shù)延時(shí)。一般來(lái)講,ST公司提供的庫(kù)函數(shù)里將
    發(fā)表于 09-13 16:20 ?3099次閱讀

    Systick定時(shí)器是如何去實(shí)現(xiàn)delay延時(shí)

    Systick定時(shí)器是什么?Systick定時(shí)器是如何去實(shí)現(xiàn)delay延時(shí)的?
    發(fā)表于 11-17 06:02

    如何用Systick定時(shí)器去實(shí)現(xiàn)delay延時(shí)函數(shù)

    什么是SysTick定時(shí)器SysTick定時(shí)器有何作用?如何用Systick定時(shí)器去實(shí)現(xiàn)
    發(fā)表于 11-24 06:34

    SysTick定時(shí)器的相關(guān)資料推薦

    SysTick定時(shí)器來(lái)實(shí)現(xiàn)延時(shí),可以不占用系統(tǒng)定時(shí)器,節(jié)約資源。由于SysTick是在CPU核內(nèi)部實(shí)現(xiàn)的,跟MCU外設(shè)無(wú)關(guān),因此它的代碼可
    發(fā)表于 02-09 06:50

    STM32單片機(jī)使用定時(shí)器中斷方式實(shí)現(xiàn)毫秒級(jí)延時(shí)的設(shè)計(jì)

    因?yàn)镾TM32 HAL庫(kù)中僅有對(duì)HAl_Delay()毫秒級(jí)的延時(shí),為實(shí)現(xiàn)精確的微秒級(jí)延時(shí),就不得不修改Systick,但由于
    發(fā)表于 06-04 14:55 ?1.1w次閱讀
    STM32單片機(jī)使用<b class='flag-5'>定時(shí)器</b>中斷方式實(shí)現(xiàn)毫秒級(jí)<b class='flag-5'>延時(shí)</b>的設(shè)計(jì)

    【STM32單片機(jī)-庫(kù)函數(shù)SysTick延時(shí)delay

    : SysTick延時(shí)函數(shù)頭文件 /* --------------------------------------------------------- */#ifndef _DELA
    發(fā)表于 11-24 19:06 ?13次下載
    【STM32單片機(jī)-庫(kù)<b class='flag-5'>函數(shù)</b>】<b class='flag-5'>SysTick</b><b class='flag-5'>延時(shí)</b>—<b class='flag-5'>delay</b>

    【野火指南者】STM32F103延時(shí)函數(shù)及其系統(tǒng)定時(shí)器SysTick

    學(xué)習(xí)目的:1、學(xué)習(xí)STM32的系統(tǒng)定時(shí)器及其相關(guān)的寄存2、使用STM32的系統(tǒng)定時(shí)器來(lái)配置延時(shí)函數(shù)內(nèi)容介紹:一、
    發(fā)表于 11-24 20:06 ?7次下載
    【野火指南者】STM32F103<b class='flag-5'>延時(shí)</b><b class='flag-5'>函數(shù)</b>及其系統(tǒng)<b class='flag-5'>定時(shí)器</b>—<b class='flag-5'>SysTick</b>

    STM32F4: Systick滴答定時(shí)器-延時(shí)函數(shù)講解(五)

    Systick定時(shí)器基礎(chǔ)知識(shí)講解Systick相關(guān)寄存庫(kù)函數(shù)講解delay
    發(fā)表于 12-01 15:21 ?15次下載
    STM32F4: <b class='flag-5'>Systick</b>滴答<b class='flag-5'>定時(shí)器</b>-<b class='flag-5'>延時(shí)</b><b class='flag-5'>函數(shù)</b>講解(五)

    SysTick 定時(shí)器

    SysTick定時(shí)器來(lái)實(shí)現(xiàn)延時(shí),可以不占用系統(tǒng)定時(shí)器,節(jié)約資源。由于SysTick是在CPU核內(nèi)部實(shí)現(xiàn)的,跟MCU外設(shè)無(wú)關(guān),因此它的代碼可
    發(fā)表于 12-05 14:51 ?9次下載
    <b class='flag-5'>SysTick</b> <b class='flag-5'>定時(shí)器</b>

    STM32學(xué)習(xí)心得九:Systick滴答定時(shí)器延時(shí)函數(shù)解讀

    記錄一下,方便以后翻閱~主要內(nèi)容:1) Systick定時(shí)器及相關(guān)寄存;2) Systick相關(guān)函數(shù)及延遲
    發(fā)表于 01-13 10:15 ?6次下載
    STM32學(xué)習(xí)心得九:<b class='flag-5'>Systick</b>滴答<b class='flag-5'>定時(shí)器</b>和<b class='flag-5'>延時(shí)</b><b class='flag-5'>函數(shù)</b>解讀

    stm32之HAL庫(kù)實(shí)現(xiàn)us延時(shí)方法

    stm32之HAL庫(kù)實(shí)現(xiàn)us延時(shí)方法HAL_Delay()源碼為ms級(jí)別的延時(shí)如下:/** * @brief This function provides accurate
    發(fā)表于 01-17 09:32 ?5次下載
    stm32之<b class='flag-5'>HAL</b>庫(kù)實(shí)現(xiàn)us<b class='flag-5'>延時(shí)</b>方法

    STM32 HAL 庫(kù)延時(shí)函數(shù) HAL_Delay 解析

    HAL 庫(kù)有提供延時(shí)函數(shù),只不過(guò)它只能實(shí)現(xiàn)簡(jiǎn)單的毫秒級(jí)別延時(shí),沒(méi)有實(shí)現(xiàn) us 級(jí)別延時(shí)。下面我們列出HA
    發(fā)表于 01-17 09:48 ?8次下載
    STM32 <b class='flag-5'>HAL</b> 庫(kù)<b class='flag-5'>延時(shí)</b><b class='flag-5'>函數(shù)</b> <b class='flag-5'>HAL_Delay</b> 解析

    【STM32】SysTick滴答定時(shí)器delay延時(shí)函數(shù)講解)

    Systick定時(shí)器,是一個(gè)簡(jiǎn)單的定時(shí)器,對(duì)于CM3、CM4內(nèi)核芯片,都有Systick定時(shí)器Syst
    發(fā)表于 02-10 10:35 ?13次下載
    【STM32】<b class='flag-5'>SysTick</b>滴答<b class='flag-5'>定時(shí)器</b>(<b class='flag-5'>delay</b><b class='flag-5'>延時(shí)</b><b class='flag-5'>函數(shù)</b>講解)

    HAL庫(kù)中用定時(shí)器實(shí)現(xiàn)自定義延時(shí)函數(shù)delay_us()

    STM32程序從標(biāo)準(zhǔn)庫(kù)移植到HAL庫(kù)的時(shí)候,會(huì)發(fā)現(xiàn)HAL庫(kù)中只有一個(gè)毫秒級(jí)延時(shí)函數(shù)HAL_Delay(),而沒(méi)有微秒級(jí)
    的頭像 發(fā)表于 09-21 10:33 ?1.1w次閱讀

    SysTickHAL_Delay的關(guān)系與注意事項(xiàng)

    本文將介紹SysTickHAL_Delay()函數(shù)之間的關(guān)系,以及使用HAL_Delay()函數(shù)的注意事項(xiàng);
    的頭像 發(fā)表于 04-21 11:32 ?2014次閱讀
    主站蜘蛛池模板: 激情床戏揉胸吃胸视频| 精品区2区3区4区产品乱码9 | 扒开美女的内衣亲吻漫画| 最美女人体内射精一区二区| 亚洲一区国产| 亚洲日本一区二区三区在线不卡| 午夜伦理在线观看| 小寡妇好紧进去了好大看视频| 视频成人app永久在线观看| 人妻久久久精品99系列AV| 欧美自拍亚洲综合图区| 欧美亚洲日韩自拍高清中文 | ppypp日本欧美一区二区| 97人妻丰满熟妇AV无码| 2019香蕉在线观看直播视频| 18黄女脱内衣| 97久久超碰中文字幕| 99热只有精品| yy4408午夜场理论片| 成人性生交大片免费看金瓶七仙女| 大香网伊人久久综合观看| 国产69精品久久久久无码麻豆| 高h肉文合集| 国产精品免费观看视频播放| 国产伦精品一区二区三区免费| 国产在线精彩亚洲久久| 精品伊人久久| 免费成人小视频| 青青青青青青草| 天天操人人射| 亚洲综合AV色婷婷五月蜜臀| 最近更新2019中文字幕免费| AV无码国产精品午夜A片麻豆| 拔萝卜电视剧高清免费| 丰满少妇69激懒啪啪无码| 国产精品无码亚洲区艳妇| 后入式狂顶免费视频| 麻豆狠色伊人亚洲综合网站| 强奷漂亮女老板在线播放| 无码区国产区在线播放| 亚洲日韩在线天堂一|