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