Ⅰ STM32中,systick具體延時時間怎麼計算的
systick定時器有兩個可選的時鍾源,一個是外部時鍾源(STCLK,等於HCLK/8),另一個是內核時鍾(FCLK,等於HCLK)。假若你選擇內核時鍾,並將HCLK頻率設置為72MHz的話,系統時鍾周期為1/(72M);systick有一個24位的遞減計數器,每個系統時鍾周期計數器值減一,那麼當計數器減到零時,時間經過了:系統時鍾周期*計數器初值。當你將計數器初值設為72000時(有些常式裡面設為71999,其實沒什麼影響,誤差極小),當計數器值減到0時經過了1/(72M)*72000=0.001s,即1ms。你可以看一下芯達STM32的入門教程和《ARM Cortex-M3權威指南》的相關章節,裡面關於systick編程的一章說的比較詳細,但是也有個別地方說的比較模糊,總之多看些常式就明白了,剛開始總是很糾結的~
Ⅱ MC908GP32單片機的Flash存儲器的編程過程
在HC08系列單片機中,對Flash進行擦除或寫入操作需要遵循一定的時序和步驟。對於整個MC68HC908系列的各個型號,這些步驟是一樣的,但時序要求可能略有不同,針對具體型號的Flash進行編程時應參考相應的晶元手冊。同時需要注意的是,一些型號的監控ROM內含有Flash編程子程序,用戶可直接調用,例如MC68HC908JL3;有的型號則沒有,例如MC908GP32,這種情況需自行編制子程序。下面介紹MC908GP32的Flash編程的基本操作。 下面過程可以擦除GP32的Flash存儲器的一頁(128位元組):
①$2→FLCR(1→ERASE位,0→MASS位):進行頁面擦除。
②讀Flash塊保護寄存器FLBPR。
③向被擦除的Flash頁內任意一個地址寫入任意值,為方便起見,一般向待擦除頁首地址寫入0。
④延時tnvs(>10µs)。
⑤$A→FLCR(1→HVEN位)。
⑥延時terase(>1ms)。
⑦$8→FLCR(0→ERASE位)。
⑧延時tnvh(>5µs)。
⑨$0→FLCR(0→HVEN位)。
⑩延時trcv(>1µs),完成一頁的擦除操作。 下面過程擦除GP32的整個Flash區域,以便把新的程序裝入Flash存儲器,這是應用系統研製過程中開發工具對GP32編程的准備工作。
①$6→FLCR(1→ERASE位,1→MASS位):進行整體擦除。
②讀Flash塊保護寄存器FLBPR。
③向被擦除的Flash任意一個地址寫入任意值,為方便起見,一般向首地址寫入0。
④延時tnvs(>10µs)。
⑤$E→FLCR(1→HVEN位、MASS位、ERASE位)。
⑥延時tMerase(>4ms)。
⑦$C→FLCR(0→ERASE位)。
⑧延時tnvhl(>100µs)。
⑨$0→FLCR(0→HVEN位、MASS位)。
⑩延時trcv(>1µs),完成整體擦除操作。 MC908GP32的Flash編程操作以行(64位元組)為單位進行的。當然,一次寫入可以小於一行,但不能大於一行。對於已經寫過的部分,未經擦除不能重新寫入變更其數據,否則將引起數據出錯。寫入過程如下:
①$1→FLCR(1→PGM位)。
②讀Flash塊保護寄存器FLBPR。
③向將要寫入的Flash行內任意一個地址寫入任意值,為方便起見,一般向行首地址寫入0,這一步選定了所要編程的行,以下的目標地址必須在這一行中。
④先延時tnvs(>10µs);再將$9→FLCR(1→HVEN位)。
⑤先延時tpgs(>5µs);再將待寫數據寫入對應的Flash地址。
⑥延時tprog(>30µs),完成一個位元組的寫入(編程)工作。
⑦重復⑤、⑥,直至同一行內各位元組寫入完畢。
⑧$8→FLCR(0→PGM位)。
⑨先延時tnvh(>5µs);再將$0→FLCR(0→HVEN位)。
⑩延時trcv(>1µs)以後,完成本行寫入工作,可以讀出校驗。