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