久久久久久久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热在线 | 精品亚洲一区二区三区四区五区 | 久久国产精品视频 | 伊人热久久 | 中文字幕国产高清 | 欧美日韩成人在线 | 久久国产传媒 | 国产精品成av人在线视午夜片 | 久久精品国产久精国产 | 久久久精彩视频 | 精品国产三级 | 亚洲综合久久精品 | 成年女人免费v片 | 国产网站在线播放 | 精品视频一区二区三区在线观看 | 成人av片在线观看 | www.黄色在线观看 | 亚洲综合在线播放 | 国产激情一区二区三区 | 日本三级日产三级国产三级 | 日韩精品亚洲专区在线观看 | 一区二区成人在线 | 精品一区二区三区在线视频 | 在线啊v | 亚洲国产一区二区视频 | 亚洲精品美女视频 | 国产成人99 | 日韩性在线 | www.亚洲国产精品 | 午夜精品 | 久草精品视频 | 亚洲欧美另类在线观看 | 日本久久久久久久久 | 99久久精品国产一区二区三区 | 亚洲一区二区三区在线免费 |