|
最近一直在做單片機(jī)通信方面的程序測試,成果之一就是以戰(zhàn)艦板串口2向野火開發(fā)板串口1發(fā)送字符或字符串,戰(zhàn)艦板作為主機(jī)設(shè)計(jì)了觸摸屏界面,可以根據(jù)界面隨心所欲地向從機(jī)發(fā)送字符或字符串還包括漢字�;诖�,正在設(shè)計(jì)一個通過戰(zhàn)艦板RS485控制西門子S7-200PLC的程序;這也是現(xiàn)在工業(yè)自動化最常見的一種控制模式。言歸正傳:
CM3內(nèi)核的時鐘樹很復(fù)雜,什么系統(tǒng)時鐘,總線時鐘,外部時鐘,內(nèi)部時鐘的搞得有點(diǎn)亂。其實(shí),把 CM3內(nèi)核的時鐘概念和頻率概念搞清楚, CM3就不那么艱難了!不信看下面的描述,錯誤之處請指正!畢竟這只是我個人的理解。
先從原子的基于STM32的一個延時函數(shù)delay_init(u8 SYSCLK) 講起: void delay_init(u8 SYSCLK) //SYSCLK:系統(tǒng)時鐘,戰(zhàn)艦板是72
{
#ifdef OS_CRITICAL_METHOD //如果OS_CRITICAL_METHOD定義了,則使用了ucosII.
u32 reload;
#endif
SysTick->CTRL&=~(1<<2);//SYSTICK使用外部時鐘源
fac_us=SYSCLK/8;//不論是否使用ucos,fac_us都需要使用,1/9us就是來自這里
#ifdef OS_CRITICAL_METHOD//如果OS_CRITICAL_METHOD定義了,則使用了ucosII.
reload=SYSCLK/8;//每秒鐘的計(jì)數(shù)次數(shù),單位為K
reload*=1000 000/OS_TICKS_PER_SEC;/*根據(jù)OS_TICKS_PER_SEC設(shè)定溢出時間;OS_TICKS_PER_SEC是OS每秒時鐘節(jié)拍數(shù) */
//reload為24位寄存器,最大值:16777216,在72M下,約合1.86s左右
fac_ms=1000/OS_TICKS_PER_SEC;//代表ucos可以延時的最少單位
SysTick->CTRL|=1<<1; //開啟SYSTICK中斷
SysTick->LOAD=reload; //每1/OS_TICKS_PER_SEC秒中斷一次
SysTick->CTRL|=1<<0; //開啟SYSTICK
#else
fac_ms=(u16)fac_us*1000; //非ucos下,代表每個ms需要的systick時鐘數(shù)
#endif
}
函數(shù)比較簡單就不分析了; 為了理解上述函數(shù)還必須補(bǔ)補(bǔ)課:計(jì)算機(jī)只認(rèn)識“0”和“1”信號,說白了就是“開”“關(guān)”兩種狀態(tài)。時鐘頻率就是每秒“開”“關(guān)”這兩種狀態(tài)的變化次數(shù)。CPU的內(nèi)部其實(shí)就是由大量的寄存器和觸發(fā)器構(gòu)成的,這些寄存器或觸發(fā)器都必須在一定的時鐘頻率控制下工作才能實(shí)現(xiàn)CPU的“有序可控”;這也是CPU“智能化”和“聽話”的理論基礎(chǔ)。硬件時鐘源頻率(或者說“開關(guān)”速度)越快,CPU的內(nèi)部的寄存器或觸發(fā)器等硬件就響應(yīng)越快。CM3內(nèi)核中有APB1(最大36mhz)和APB2(最大72mhz)兩條片上外設(shè)總線,每條總線的時鐘頻率是不一樣的,且每條總線上的外設(shè)都有各自的時鐘源控制開關(guān),也就是說不同的外設(shè)可以根據(jù)各自的時鐘需求以不同的“開關(guān)”速率工作。這樣設(shè)計(jì)主要是基于減少能耗的目的。硬件之間的接口電路的目的就是為了解決時鐘源不同步和信號機(jī)制不同的問題而設(shè)計(jì)的。CM3內(nèi)核有5個時鐘源,而51單片機(jī)只有一個時鐘源11.0592MHZ;時鐘源越多說明內(nèi)核的功能越多,可以適應(yīng)更多的工作環(huán)境和要求。
時鐘周期T是時序中最小的時間單位,具體計(jì)算是1/時鐘源;假設(shè)晶振即時鐘源是11.0592,則與之對應(yīng)的時鐘周期就是1/11.0592s。機(jī)器周期是CPU完成一個操作的最小時間,普通51單片機(jī)一個機(jī)器周期是12個時鐘周期。就CM3內(nèi)核中的24位計(jì)數(shù)器來說,如果時鐘源頻率是9Mhz,如何理解時鐘源頻率是9Mhz呢?根據(jù)上述M3內(nèi)核的時鐘周期(即CPU完成一個操作的最小時間,秒)=1/9MHz;即1/9us;換句話說m3內(nèi)核的cpu開或關(guān)一次操作所需的時間是1/9微秒. 公式如下:
T(周期,單位秒)*F(頻率,單位hz)=1(脈沖個數(shù))
在電子技術(shù)中,脈沖信號是一個按一定電壓幅度,一定時間間隔連續(xù)發(fā)出的脈沖信號。脈沖信號之間的時間間隔稱為周期;而將在單位時間(如1秒)內(nèi)所產(chǎn)生的脈沖個數(shù)稱為頻率。頻率是描述周期性循環(huán)信號(包括脈沖信號)在單位時間內(nèi)所出現(xiàn)的脈沖數(shù)量多少的計(jì)量名稱;頻率的標(biāo)準(zhǔn)計(jì)量單位是Hz(赫)。電腦中的系統(tǒng)時鐘就是一個典型的頻率相當(dāng)精確和穩(wěn)定的脈沖信號發(fā)生器。頻率在數(shù)學(xué)表達(dá)式中用“f”表示,其相應(yīng)的單位有:Hz(赫茲)、kHz(千赫茲)、MHz(兆赫茲)、GHz(千兆赫茲)。其中1GHz=1000MHz,1MHz=1000kHz,1kHz=1000Hz。計(jì)算脈沖信號周期的時間單位及相應(yīng)的換算關(guān)系是:s(秒)、ms(毫秒)、μs(微秒)、ns(納秒),其中:1s=1000ms,1 ms=1000μs,1μs=1000ns。
相信看完上述講解,會對CM3內(nèi)核有個更清晰的認(rèn)識,能解決很多初學(xué)者心頭的許多疑問。
|
|