久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> STM32 >> 瀏覽文章

STM32滴答時鐘也就是SYSTICK做精確的延時函數

作者:佚名   來源:本站原創   點擊數:  更新時間:2014年05月15日   【字體:

  //////////////////////////////////////////////////////////////////////////////////

//延時程序
//鄧堯
//2014.5.15.
//1.0
//Copyright(C)
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
#include
//////////////////////////////////////////////////////////////////////////////////
 
static u8 fac_us=0; //us延時倍乘數
static u16 fac_ms=0; //ms延時倍乘數
 
////////////////////////////////////////
//初始化延遲函數
//SYSTICK的時鐘固定為HCLK時鐘的1/8
//SYSCLK:系統時鐘 如72
////////////////////////////////////////
void delay_init(u8 SYSCLK)
{
SysTick->CTRL&=0xfffffffb;//bit2清空,選擇外部時鐘 HCLK/8
fac_us=SYSCLK/8;
fac_ms=(u16)fac_us*1000;
}
////////////////////////////////////////
//延時nms
//注意nms的范圍
//SysTick->LOAD為24位寄存器,所以,最大延時為:
//nms<=0xffffff*8*1000/SYSCLK
//SYSCLK單位為Hz,nms單位為ms
//對72M條件下,nms<=1864
////////////////////////////////////////
void delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD=(u32)nms*fac_ms;//時間加載(SysTick->LOAD為24bit)
SysTick->VAL =0x00; //清空計數器
SysTick->CTRL=0x01 ; //開始倒數
do
{
 
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待時間到達
SysTick->CTRL=0x00; //關閉計數器
SysTick->VAL =0X00; //清空計數器
}
////////////////////////////////////////////
//延時nus
//nus為要延時的us數.
/////////////////////////////////////////////
void delay_us(u32 nus)
{
u32 temp;
SysTick->LOAD=nus*fac_us; //時間加載
SysTick->VAL=0x00; //清空計數器
SysTick->CTRL=0x01 ; //開始倒數
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待時間到達
SysTick->CTRL=0x00; //關閉計數器
SysTick->VAL =0X00; //清空計數器
}
////////////////////END//////////////////////////////////////////
 
這里的滴答時鐘能精確的達到定時的效果,但是這里有一個注意的地方就是當你用滴答時鐘做延時函數時,一旦你運行延時函數,CPU將處于空閑狀態,一般這種狀態下只有外部或者內部中斷才能打斷,但是需要注意的是滴答時鐘的中斷優先級高于我們能夠配置的外部中斷優先級,所以你在延時時如果想使用外部中斷進行打斷的話效果將不太理想,這也是我自己遇到的一個問題,至今沒有一個很好的解決辦法,所以如果我要在延時中進行打斷的話,我一般不用滴答時鐘作為我的延時定時器。而是用高級定時器或者通用定時定時,并且能在想中斷時,用優先級高的中斷進行打斷,這里又設計到了一個問題就是外部中斷的使用和STM32優先級的使用和優先級的學習,呵呵,說著說著就發現這些東西不是一兩句話就能說清的,慢慢來吧,我有時間的時候就會把這些學習的心得公布在網上,希望能有更多的人能讀到,有所成長。
 
 
 
滴答時鐘它本來是用給操作系統提供一個“心跳”頻率,能夠實現優先級的判定和任務之間的切換,是維持操作系統的根本。一般在UCOSII系統中滴答時鐘每10MS中斷一次,在中斷里調用任務調度函數,實現多任務系統的正常運作,當然前提必須把UCOSII移植到STM32中,當然這個會在后續的記錄中說UCOSII的使用,這個也是一個大的模塊,希望能有這么多的精力去把它分享出來給大家,我只是在這里提起一下滴答時鐘,它是一個很好用的定時器,用好了是神器,我也希望能更加深入和全面的說講解下它,現在只是說起它,希望有心之人也能去研究研究下它。
關閉窗口

相關文章

主站蜘蛛池模板: 亚洲欧美在线一区 | 超碰人人爱 | 欧美成人一级视频 | 午夜精品一区 | 国产精品久久久久久久一区探花 | 久久久91精品国产一区二区三区 | 中文字幕一区在线 | 国产精品一区二区欧美黑人喷潮水 | 欧美自拍第一页 | 91精品国产综合久久久久久 | 日韩精品视频在线 | 国产精品美女久久久久aⅴ国产馆 | 天天综合网天天综合 | 一区二区三区在线 | 欧 | 亚洲精品久 | 亚洲精品第一 | av一区在线 | 亚洲精品久久久久久国产精华液 | 日日摸天天添天天添破 | 欧美激情视频一区二区三区在线播放 | 激情网站 | 伊人久久免费视频 | 午夜三级在线观看 | 在线观看免费高清av | 国产成人短视频在线观看 | 一级毛片视频在线观看 | 日韩精品一区二区三区老鸭窝 | 91精品国产91久久久久久 | 精品国产一区二区三区观看不卡 | 国产成人综合网 | 日韩欧美一区二区三区免费观看 | 亚洲免费三区 | 国产一区二区精品在线观看 | 精品视频一区二区三区在线观看 | 日韩毛片免费视频 | av一级久久| 午夜私人影院在线观看 | 精品一二三区视频 | 国产又爽又黄的视频 | 欧美一级二级视频 | 久久一区二区三区四区五区 |