我們講了內(nèi)核、存儲器和時鐘,它們都是單片機核心功能的一部分,沒有它們中的任何一個,單片機都不能正常工作。而核心功能還包括復(fù)位和電源管理兩個部分,因為篇幅關(guān)系沒有寫完,這一期把它們補上。同時我還要繼續(xù)介紹單片機的多個重要功能。之所以說“重要”,是因為單片機如果沒有這些功能,雖然可以正常工作,但其性能和所發(fā)揮的作用會大大減弱。重要功能包括:低功耗模式、ADC、DMA、I/O端口、調(diào)試模式、定時器、看門狗定時器和嘀嗒定時器。因為我們現(xiàn)在是做入門的介紹,一開始不能講得太深、太復(fù)雜,對于每個功能,我只介紹其表面上的功能與原理。大家只要看過,有一個基本的印象即可。待日后講到編程設(shè)計時再深入講解,你便會有溫故知新的感覺。
【復(fù)位】
復(fù)位功能是核心功能的一部分,大到PC,小到單片機,每一臺計算機系統(tǒng)都有。在我小時候,臺式機的機箱上會有一個獨立的復(fù)位按鈕。隨著PC 越來越高級和穩(wěn)定,復(fù)位按鈕漸漸被取消了,但在主板上還是有復(fù)位電路的。單片機上的復(fù)位功能也有著類似的變化,在我學(xué)習(xí)單片機時,需要在單片機的一個復(fù)位專用引腳上接一個由電阻和電容組成的復(fù)位電路。如果沒有這個電路,單片機就沒法工作。近些年來的新款單片機都把復(fù)位功能內(nèi)置到單片機中,用戶甚至可以忽略復(fù)位這件事了。如果有必要,你可以在復(fù)位引腳上接一個按鍵用來手動復(fù)位,除此之外不需其他操作。
復(fù)位功能的作用是讓RAM 中的數(shù)據(jù)清空,讓所有連接到復(fù)位的相關(guān)功能都回到剛開始工作的(初始)狀態(tài)。在接通電源之前,單片機里的存儲器及其他功能的狀態(tài)是混亂、不穩(wěn)定的。如果上電后不復(fù)位,所有功能都處在無序狀態(tài),就好像軍隊集合時沒有立正、稍息、向右看齊,直接齊步走的結(jié)果就是亂成一片。復(fù)位的作用就是讓單片機內(nèi)部秩序化,都回到設(shè)計者規(guī)定好的狀態(tài)。這個狀態(tài)為用戶程序的運行做了充分的準(zhǔn)備,就像計算機每次重啟一樣。
在STM32 單片機中,有一個供電監(jiān)控器,這個監(jiān)控器是一直工作的,它能監(jiān)測外部電源的電壓,當(dāng)電壓低于2V 時,監(jiān)控器會讓單片機復(fù)位。當(dāng)電壓高于2V 時,監(jiān)控器讓單片機進入工作狀態(tài)。這個監(jiān)控器本質(zhì)上達到了上電復(fù)位的效果,也就是說你每次給單片機接通電源時,電壓都是一次從0 升到3.3V(STM32 的工作電壓)的過程,這個過程使單片機復(fù)位,不需要再外接復(fù)位電路。還有一種復(fù)位的方法是在單片機的復(fù)位引腳上接一個微動開關(guān),開關(guān)另一端接地。按下開關(guān)可手動復(fù)位,如圖1 所示。
**圖1 **外接復(fù)位按鍵電路原理圖
【電源管理】
電源管理是指對單片機外接電源處理、分配的功能。電源管理主要分成4 個部分,分別是備用電源輸入、端口輸入/ 輸出、邏輯電源輸入和模擬電源輸入。其結(jié)構(gòu)如圖2 所示,藍色方框里是單片機內(nèi)部電路,方框之外是單片機的外部電路。
先說邏輯電源輸入,這是單片機最基本的供電輸入端口。給這些接口輸入2 ~3.6V 的直流電壓,就能讓ARM 內(nèi)核、存儲器、I/O 端口和其他純數(shù)字電路工作了。邏輯輸入電壓還能讓I/O 端口輸入或輸出數(shù)字信號的電壓。在未來,我們使用I/O端口點亮LED 或者讓一個按鍵輸入,都會用到邏輯電源輸入的電壓。而模擬電源輸入的電壓是用在模數(shù)轉(zhuǎn)換器(ADC)、RC振蕩器和PLL 倍頻等模擬電路上的。這兩部分電源輸入在引腳較多(64 腳以上)的單片機上是分開的。而在引腳較少的單片機上,邏輯電源和模擬電源并聯(lián)在一起使用。分開輸入的電源在使用上有很多好處,而合并輸入可以減少引腳的占用。合并輸入方式會對模擬電源的穩(wěn)定性造成影響,但如果設(shè)計中不要求高精度,一般會合并使用。
備用電源輸入是一個獨立的存在,它是專門給實時時鐘(RTC)供電的,以保證在邏輯電源斷開后依然讓RTC 保持走時。同時它也給喚醒電路和后備寄存器供電,讓它們一直處在工作狀態(tài)。備用電源輸入可以外接獨立電源或者一塊1.8 ~3.6V 的電池。如果你不想使用單片機內(nèi)部的RTC 等功能,備用電源可以不接。
圖2 供電方案
【低功耗】
單片機在正常工作時,內(nèi)部大部分功能都處于開啟狀態(tài),最耗電的ARM 內(nèi)核處在100% 全速運行狀態(tài)。試想一下你的PC,在玩大型游戲時,CPU 的風(fēng)扇強力旋轉(zhuǎn),這就是CPU 處在100% 運行的時候。而平時CPU 只有5% 左右的工作量??墒菃纹瑱C的內(nèi)核卻一直處在全速的狀態(tài),只是單片機的性能遠低于PC,發(fā)熱量低,你感覺不到而已。當(dāng)單片機要用在電池供電的產(chǎn)品上時,降低功耗、讓電量使用更持久便成了重要的項目需求。STM32 單片機為應(yīng)對這樣的用戶需要,做出了低功耗功能。通過關(guān)掉一些耗電大的內(nèi)部功能來達到省電的目的,根據(jù)關(guān)掉的功能數(shù)量,可分為3 種低功耗模式,分別是睡眠模式、停機模式、待機模式,如附表所示。其實這些低功耗模式在不同的單片機手冊中會有不同的名字,如有的叫待機模式,有的叫斷電模式,但叫什么模式不重要,只要關(guān)心這個模式關(guān)掉了什么功能、怎么喚醒這些功能就行了,名字只是幫助你記憶的。
睡眠模式,只關(guān)掉ARM 內(nèi)核,其他所有功能正常工作。這種方式不怎么省電,但不會影響整個系統(tǒng)的工作。因為內(nèi)核在關(guān)掉之后,可以通過所有內(nèi)部和外部功能來喚醒(重新開啟)內(nèi)核。相當(dāng)于我們的PC 不用時,CPU 只有2% 左右的工作量,幾乎關(guān)閉。當(dāng)我們動動鼠標(biāo)時,CPU 又被這個行為喚醒,處理鼠標(biāo)移動的事件,完成后又回到幾乎關(guān)閉的狀態(tài)。單片機的睡眠模式與之大體相同。睡眠模式的好處是系統(tǒng)的正常工作不受任何影響,只是內(nèi)核在沒有工作時才關(guān)閉;缺點是只關(guān)內(nèi)核不夠省電。
停機模式是睡眠模式的升級版,它將ARM 內(nèi)核與幾乎所有內(nèi)部功能,包括外部高速晶體振蕩器和PLL 都關(guān)掉了,只有RTC、看門狗定時器、中斷控制器在工作,只是還能接收中斷,SRAM 中的數(shù)據(jù)還保存。喚醒的方式是外部中斷、RTC 的鬧鐘還有USB 接口喚醒,除此之外再沒有能恢復(fù)的方式,因為所有的內(nèi)部功能都被關(guān)掉了,時鐘電路都不工作了。這有點像PC 的睡眠模式,進入后只有按電源按鍵才可以喚醒,喚醒后系統(tǒng)數(shù)據(jù)、你打開的文件都還在,因為內(nèi)存沒有關(guān)掉。停機模式的優(yōu)點是非常省電;缺點是程序不能正常運行了,只有被喚醒后,內(nèi)部的功能才能工作。停機模式適用于平時工作任務(wù)很少的情況,單片機完成工作后有很長一段時間可以休息。這時開啟停機模式,可以最大程度省電。
最后也是最省電的模式是待機模式。它和停機模式的區(qū)別是把SRAM 和外部中斷控制器也關(guān)掉了,用戶運行的數(shù)據(jù)消失,也就表示喚醒后必須重頭開始,相當(dāng)于復(fù)位。喚醒的方式是按復(fù)位按鍵、看門狗定時器復(fù)位、專用喚醒引腳和RTC 鬧鐘喚醒。復(fù)位按鍵和專用喚醒引腳完全不耗電,看門狗定時器算是唯一需要耗電的。RTC 鬧鐘由備用電源供電,不耗邏輯電源的電。待機模式相當(dāng)于PC 的關(guān)機,只有按電源按鈕才能復(fù)位啟動。待機模式在實際的項目開發(fā)中很少用到,因為停機模式已經(jīng)很省電了,只有一些特殊需求才會用到。
附表:低功耗模式表
【ADC】
在電源管理的部分提到了ADC(模數(shù)轉(zhuǎn)換器),它需要模擬電源供電。ADC 的功能是讀取模擬量的電壓,類似于電壓表。如圖3 所示,在單片機中,I/O 端口是輸入或輸出邏輯電平的,也就是高電平(1)和低電平(0)。也就是說,I/O 端口只能讀取有電壓和沒電壓兩種狀態(tài),至于有電壓時的電壓是多少伏,這就需要ADC 功能來判斷。ADC 可以讀出從0V 到電源電壓之間的具體電壓值,并把這個值變成一組數(shù)據(jù)。單片機的ADC 性能各有不同,有8位、10 位、12 位甚至更高的,位數(shù)越多,表示測得的電壓值更精密。STM32F103 中的ADC 是12 位的,對于一般的精度需要已經(jīng)足夠。
圖3 模擬量電壓關(guān)系
【DMA】
DMA 功能是一種比較新的功能,它是代替CPU 完成內(nèi)部功能間的數(shù)據(jù)傳遞的。這個概念很好理解,比如上面講到的ADC功能,在沒有DMA 功能的單片機里,想讀取ADC 的值,首先要在內(nèi)核向ADC 功能發(fā)出指令,然后等待ADC 讀取完成,內(nèi)核再從ADC 讀出數(shù)據(jù),再存放到SRAM 當(dāng)中,如圖4 所示。這個過程需要內(nèi)核的過程參與,這占用了內(nèi)核的時間,內(nèi)核就不能做其他工作了。而DMA 功能可以在這種數(shù)據(jù)讀取、存放的任務(wù)上完全解放內(nèi)核。它能按預(yù)先設(shè)定好的設(shè)置從ADC 讀出數(shù)據(jù),然后自動存放到SRAM 中指定的位置,不需要內(nèi)核的參與。當(dāng)內(nèi)核需要ADC 的數(shù)據(jù)時,只要讀SRAM 指定的位置這一步操作就行了。DMA 不只能讀ADC,它還能在Flash、SRAM、SPI、USART、定時器、I2C 等功能之間相互傳遞數(shù)據(jù),如圖5 所示。STM32F103 的DMA 有7 個通道,可以設(shè)置7 組數(shù)據(jù)傳遞任務(wù)。DMA 大大提高了內(nèi)核的工作效率,真的是很重要的功能。
圖4 DMA工作原理舉例
圖5 DMA可在多個功能之間相互傳遞數(shù)據(jù)
【I/O端口】
終于講到了I/O 端口,學(xué)習(xí)單片機最先接觸的往往就是I/O 端口,它是內(nèi)部功能當(dāng)中最重要的一塊。因為I/O 端口也可以代替除ADC 之外所有的邏輯電平的通信接口,包括我們后面要講的I2C、USART、SPI、CAN 等。早年的單片機沒有那么多通信接口,也都是靠I/O 端口來模擬的,由此可見I/O 端口的全能。I/O 端口最原本的功能就是電平的輸入(IN)和輸出(OUT),所以才用I 和O 兩個首字母作為它的名字。在寫法上,正確的是I/O,但也有省去斜線直接寫成IO 的,在STM32 單片機上也被寫成GPIO,都是可以的。
STM32F103 最多有80 個I/O 端口,這些端口每16 個被分成一組,一共有5 組。組的名字分別是PA、PB、PC、PD 和PE,每組中16 個端口的名字可以是PA0 到PA15,其他組也一樣。但由于封裝引腳數(shù)量不同,端口的數(shù)量也不同。STM32F103C8T6 這款單片機的48 個引腳當(dāng)中有37 個可作I/O 端口,其接口定義如圖6 所示。其中PA 和PB 的16 個端口都引出了,PC組只引出3個,PD組只引出2個。
每一個I/O 端口都有8 種工作模式,也就是I/O 端口的狀態(tài)是輸出還是輸入?是輸入的話,是模擬量輸入還是邏輯電平輸入?我們需要在啟動I/O 端口之前先把它設(shè)置成正確的狀態(tài)。圖7 所示是GPIO的8 個工作模式,模擬輸入是在作ADC 輸入接口時使用的,浮空輸入是內(nèi)部不接電阻,下拉和上拉輸入是在I/O 內(nèi)部接一個約10kΩ的下拉或上拉電阻,根據(jù)外部連接的電路可以設(shè)置它們。輸出的模式有推挽輸出、開漏輸出,還有復(fù)用推挽和復(fù)用開漏。推挽是指I/O 端口有很強的電流推動能力,可以輸出一定量的電流,用于推動一些元器件(如LED)工作。開漏則是弱電流的輸出,用于邏輯電平的數(shù)據(jù)信號通信。復(fù)用的推挽和開漏是用在復(fù)用狀態(tài)下的,這在后面講到復(fù)用功能時再說吧。
圖6 I/O端口的引腳定義
圖7 I/O端口的工作模式
【調(diào)試模式】
在ARM 的內(nèi)核中,有一組用于仿真調(diào)試的接口。不僅是STM32,所有用ARM 內(nèi)核的單片機都支持這個接口,它叫JTAG。JTAG 接口的功能主要是做程序仿真。所謂仿真,就是不把程序下載到Flash 里,而是在計算機端直接控制單片機內(nèi)核,使單片機能達到和運行下載到Flash 里的程序一樣的工作效果。因為不是真的運行程序,而是在計算機上模擬的,所以叫仿真。
仿真的好處是可以在計算機上實時改動參數(shù),還可以慢速一步一步地執(zhí)行程序,看每一步的效果。用仿真功能要比把程序下載到Flash 里再看效果要高效很多。JTAG 還有一個功能是控制I/O 端口的輸出電平狀態(tài),以測試端口是否正常。但測試端口功能很少有人使用,甚至大家都不太知道有這個功能。所有STM32 單片機都帶有JTAG 接口,還有JATG 的簡化接口SWD。圖8 所示是調(diào)試接口與單片機的關(guān)系,可以看出JTAG 是內(nèi)核的一部分,并不是一個獨立的功能。連接上,可以用5 條線的標(biāo)準(zhǔn)JATG,也可以用簡化版的2條線的SWD,它們的功能是一樣的,只是連接的方式不同。未來講到程序開發(fā)時,我會再專門細講仿真調(diào)試的操作方法。
圖8 調(diào)試接口的原理示意
【定時器、看門狗、嘀嗒定時器】
定時器在單片機內(nèi)部有很多種,之前說過的RTC 就屬于定時器。定時器的本質(zhì)是計時,當(dāng)達到設(shè)置的時間后去做某個事件。那定時器是怎么知道時間的呢?主要是通過系統(tǒng)時鐘,時鐘產(chǎn)生機械周期,內(nèi)核以機械周期為單位工作,定時器也以此計數(shù)。所以定時器也被說成計數(shù)器,因為它就是以機械周期為間隔時間進行計數(shù)。當(dāng)定時器到達了設(shè)置的數(shù)值時,就會產(chǎn)生一個中斷或事件。普通定時器產(chǎn)生中斷信號給內(nèi)核,看門狗定時器則產(chǎn)生復(fù)位,如圖9 所示。
STM32F103 單片機有1 個高級定時器和3 個普通定時器,它們不僅能定時和計數(shù),還能做很多復(fù)雜的工作。其功能非常強大,但限于篇幅關(guān)系就不展開介紹了。另外還有2 個看門狗定時器定時器,看門狗定時器的作用是在定時時間到了之后讓單片機復(fù)位。比如設(shè)看門狗定時器定時5秒,那么5 秒后,看門狗定時器會讓單片機復(fù)位。但如果我們在復(fù)位之前,用程序不斷把看門狗定時器的計數(shù)值清0,那么看門狗定時器就不能讓單片機復(fù)位。于是它的真正價值就在這里:如果我們的程序不正常工作了,比如程序中有錯或者外部干擾導(dǎo)致死機,當(dāng)程序不能把看門狗定時器的計數(shù)值清0 時,5 秒后單片機就會被復(fù)位,看門狗定時器就把單片機從死機狀態(tài)中解救出來了。所以它被取了一個很形象的名字,是保護內(nèi)核正常工作的忠實伙伴。STM32 單片機中還有一個功能很小的定時器叫嘀嗒定時器,它是專用于實時操作系統(tǒng)中的任務(wù)切換的。如果你的單片機沒有安裝操作系統(tǒng),那么嘀嗒定時器可以作為普通定時器來使用。
圖9 定時器和看門狗的關(guān)系
好了,這一講我們簡單介紹了單片機內(nèi)部的重要功能,每一個功能都沒有深入展開。主要的目的是讓大家先對這些功能產(chǎn)生基本印象,為今后深入介紹其使用方法打下基礎(chǔ)。
-
單片機
+關(guān)注
關(guān)注
6060文章
44835瀏覽量
645274 -
存儲器
+關(guān)注
關(guān)注
38文章
7617瀏覽量
166076 -
電源管理
+關(guān)注
關(guān)注
116文章
6370瀏覽量
145704 -
STM32
+關(guān)注
關(guān)注
2287文章
10988瀏覽量
361650 -
硬件設(shè)計
+關(guān)注
關(guān)注
18文章
424瀏覽量
45032 -
看門狗定時器
+關(guān)注
關(guān)注
0文章
64瀏覽量
16380 -
STM32芯片
+關(guān)注
關(guān)注
0文章
38瀏覽量
4544
發(fā)布評論請先 登錄
行車記錄儀系統(tǒng)與功能
有什么方法優(yōu)化重要功能
STM32時鐘樹學(xué)習(xí)記錄
MSP430單片機內(nèi)部模塊的主要功能是什么
DSO中的內(nèi)插技術(shù) (數(shù)字示波器重要功能的使用)
K8S-V1.8.13集群安裝配置全記錄的詳細資料免費下載

BBBlackEMMC燒寫全記錄

UM2688_基于STM32Cube高速數(shù)據(jù)記錄功能套件

評論