1.單片機(jī)正常工作的基本條件
單片機(jī)正常工作需要滿足三個條件:1) 給單片機(jī)供電 2) 單片機(jī)復(fù)位電路 3)單片機(jī)時鐘電路。滿足這三個條件的硬件電路,我們稱之為單片機(jī)最小硬件系統(tǒng)。
(相關(guān)資料圖)
單片機(jī)復(fù)位電路有兩種,高電平復(fù)位和低電平復(fù)位。STM32系列單片機(jī)采用的是低電平復(fù)位,RESET這個標(biāo)志我們稱之為網(wǎng)絡(luò)號,相同網(wǎng)絡(luò)號表示導(dǎo)線相互連接。
單片機(jī)時鐘電路也有多種方式, 一個是采用外置晶振的方式,一個采用內(nèi)部時鐘,還有一種是外部直接接入其他芯片生成的符合要求的時鐘信號(這種不常見)。
2.單片機(jī)的時鐘系統(tǒng)
數(shù)字電路都是需要時鐘信號來驅(qū)動的,所謂時序,就是數(shù)據(jù)按照時鐘信號來變化。單片機(jī)屬于數(shù)字芯片,自然離不開時鐘信號。一般來說,單片機(jī)時鐘源來自外部晶振信號HSE或者內(nèi)部時鐘HSI。
系統(tǒng)時鐘SYSCLK信號源可以選擇HSE,HSI或者鎖相環(huán)PLLCLK,一般我們都會選擇PLLCLK這個信號源作為系統(tǒng)時鐘。HSE或者HSI經(jīng)過分頻后,送到倍頻器PLLMUL,然后產(chǎn)生PLLCLK。系統(tǒng)時鐘SYSCLK經(jīng)過各種分頻器后產(chǎn)生各種外設(shè)所需的時鐘信號。
同等條件下, 時鐘頻率越低數(shù)字電路的功耗就越低。另外,單片機(jī)內(nèi)部不同的外設(shè)電路對時鐘信號的頻率要求不一樣。有的電路反應(yīng)慢,不需要那么快的時鐘信號,例如,iic總線電路。有的電路需要速度快的時鐘信號,例如usb電路。通過對時鐘信號分頻不但可以滿足不同外設(shè)需求還能降低功耗。而且,這些內(nèi)部外設(shè)電路的時鐘信號還可以開啟關(guān)閉。所以,我們在操作單片機(jī)內(nèi)部模塊時,第一步要做的就是開啟對應(yīng)外設(shè)的時鐘信號。
3.淺談單片機(jī)啟動方式
單片機(jī)啟動方式是指,單片機(jī)從哪里開始執(zhí)行程序。STM32執(zhí)行的第一條指令地址是在地址0x0000 0000上。如果程序放在SRAM里面執(zhí)行,那就要在0地址上設(shè)置跳轉(zhuǎn)指令,跳到SRAM的首地址0x20000 0000,所以是需要重新設(shè)置異常向量表的。系統(tǒng)儲存器和Flash儲存器都是雙地址,系統(tǒng)儲存器里面出廠前寫入了bootloader引導(dǎo)程序相當(dāng)于電腦的BIOS一樣,可以把我們的用戶程序轉(zhuǎn)存到flash里面去。你可以把bootloader看成一個flash讀寫程序,當(dāng)然了,BootLoader還做了一些硬件初始化工作。
4.一燈大師的手與腳
單片機(jī)最大的特色就是好玩有趣,當(dāng)然了,學(xué)渣可能覺得不怎么好玩。我記得第一次點亮LED燈時,我激動的一夜無眠。那種感覺無以言表,反正就跟撿了錢一樣,打開了新世界,從此走上了不歸路,為什么叫不歸路呢。等以后啤酒小龍蝦準(zhǔn)備好,我慢慢道來。
成為一燈大師,是每個電子人的必經(jīng)之路。你可以啥也不會,但是你得會點燈,不然你咋好意思說你學(xué)過單片機(jī)。單片機(jī)通過Input和Output引腳來與外界交換信息,就像章魚的觸手一樣,可以抓取物體,也可以扔物體。我們這里主要談?wù)剢纹瑱C(jī)的IO,單片機(jī)的IO有時候我們也會直接說成單片機(jī)的引腳。單片機(jī)的IO內(nèi)部結(jié)構(gòu)簡圖如下所示:
學(xué)單片機(jī)一定要去看用戶手冊和數(shù)據(jù)手冊,這兩個手冊比開發(fā)板的例程和教科書更有用。通過上圖,我們可以知道,上半部分是輸出電路結(jié)構(gòu),下半部分是輸入電路結(jié)構(gòu)。單片機(jī)內(nèi)部的上拉和下拉電阻是針對輸入電路來說的,輸出電路部分是沒有上拉下拉電阻的。
在單片機(jī)后續(xù)學(xué)習(xí)中,我們會發(fā)現(xiàn)一些電路會外置上拉電阻??墒?,單片機(jī)內(nèi)部已經(jīng)有上拉電阻了,為什么還要在外部加上拉電阻呢?因為,我們操作芯片除了讀數(shù)據(jù),還要寫數(shù)據(jù)。讀數(shù)據(jù)是輸入,寫數(shù)據(jù)是輸出,單片機(jī)輸出是沒有上拉電阻的。在按鍵檢測時,我們就可以根據(jù)需要來設(shè)置上拉電阻或者下拉電阻。
我們知道,單片機(jī)IO電路有兩部分組成,輸入和輸出電路兩部分,它們共用一個輸出引腳,也就是說單片機(jī)的引腳可以讀數(shù)據(jù)也可以輸出數(shù)據(jù)。通過配置寄存器來設(shè)置單片機(jī)的IO是輸出還是輸入,下圖是和單片機(jī)IO相關(guān)的寄存器,了解一下就可以了,知道有這些東西就行。
寄存器每4位對應(yīng)一個引腳,比如PA0引腳,那么,0-3位就是PA0的配置位,點亮LED燈,屬于IO輸出功能。這里0-1位,我們可以設(shè)置成01,10,11。2-3位,可以設(shè)置成00推挽模式。
什么是推挽模式,可以簡單理解成驅(qū)動能力強(qiáng),電流比較大,詳情可以自行百度:推挽電路原理分析。開漏模式是指輸出電路中的P-MOS管被關(guān)閉,只有N-MOS可以開啟與關(guān)閉,N-MOS開啟時,輸出低電平,關(guān)閉時,則為開漏。此時,驅(qū)動電路只能輸出低電平0,無法輸出高電平。要想輸出高電平,需要外置上拉電阻。
這里強(qiáng)調(diào)一點,單片機(jī)的輸出開漏模式是可以直接讀取數(shù)據(jù)的,不需要切換到輸入模式來讀取數(shù)據(jù)。其原理就是,開漏模式的電平是由外部電路決定的,不受內(nèi)部輸出電路的影響。
在上面的引腳功能配置表里,我們總結(jié)了一下。輸入模式有三種1)浮空模式,單片機(jī)引腳的電平是不確定的,電平由外部電路決定。2)上下拉模式,當(dāng)向輸出寄存器寫入1時,為上拉模式,否則,寫入0,則為下拉模式。上下拉模式常用于各種外部信號的檢測。比如,要檢測高電平,那就設(shè)置成下拉輸入模式。3)模擬輸入,檢測模擬信號。
輸出模式,是可以選擇io引腳的電平變化頻率的。輸入模式?jīng)]有這個選項,輸出模式時,上下拉電阻是禁用的。復(fù)用模式是指,io沒有連接到輸出寄存器,而是連接到了內(nèi)部其他電路(內(nèi)部外設(shè),比如定時器,串口等等)。推挽模式,就是常規(guī)的輸出模式,對應(yīng)于輸入上下拉模式。開漏模式對應(yīng)于輸入浮空模式。開漏模式是一種特殊的輸出模式,這種模式下可以直接讀輸入寄存器來獲取io的引腳電平狀態(tài)。
通過以上知識點的學(xué)習(xí)后,我們可以正式開始進(jìn)入點燈環(huán)節(jié)了,看再多的理論知識,最后也需要實踐來檢驗我們的理解是否正確。我以前都是一邊看資料或者看手冊一邊寫程序來驗證自己理解的對不對。
標(biāo)簽: