單片機(jī)最小系統(tǒng)著實(shí)讓人著迷
單片機(jī)最小系統(tǒng)著實(shí)讓人著迷
///插播一條:我自己在今年年初錄制了一套還比較系統(tǒng)的入門單片機(jī)教程,想要的同學(xué)找我拿就行了免費(fèi)的,私信我就可以哦~點(diǎn)我頭像黑色字體加我地球呺也能領(lǐng)取哦。最近比較閑,帶做畢設(shè),帶學(xué)生參加省級(jí)或以上比賽///
STM32F103RCT6:
STM32F103RCT6是一種嵌入式-微控制器的集成電路(IC),32位 Cortex-M3內(nèi)核處理器,速度是72MHz,程序存儲(chǔ)器容量是256KB,程序存儲(chǔ)器類型是FLASH,RAM容量是48K,封裝LQFP64。
STM32單片機(jī)命名規(guī)則:
STM32單片機(jī)最小系統(tǒng):
所謂單片機(jī)最小系統(tǒng),就是讓單片機(jī)能夠正常運(yùn)行,最少且必須的器件所組成的系統(tǒng)。
單片機(jī)最小系統(tǒng)上電之后,單片機(jī)可以正常復(fù)位,下載程序,除此之外沒有其他任何功能。
在最小系統(tǒng)保證正確的基礎(chǔ)上,可以依次添加其他功能模塊或器件,使之單片機(jī)具有實(shí)際功能。
STM32單片機(jī)最小系統(tǒng)包括一個(gè)復(fù)位電路和一個(gè)時(shí)鐘電路,如圖1所示。
圖中復(fù)位電路使用的是上電復(fù)位電路,STM32單片機(jī)NRST引腳輸入低電平,則發(fā)生復(fù)位。
圖1 STM32F103單片機(jī)最小系統(tǒng)
電源引腳:
VDD是單片機(jī)的數(shù)字電源正極,VSS是數(shù)字電源負(fù)極,共有5個(gè)VDD引腳,5個(gè)VSS引腳。VDDA是單片機(jī)的模擬電源正極,負(fù)責(zé)給內(nèi)部的ADC、DAC模塊供電,VSSA是模擬電源負(fù)極。
還有一個(gè)電源引腳,就是VBAT,BAT就是Battery(電池),這個(gè)引腳用來連接電池的正極的。STM32帶RTC功能(實(shí)時(shí)時(shí)鐘),所以有VBAT引腳。
原理圖上預(yù)留了一個(gè)CR1220紐扣鋰電池,當(dāng)主電源供電存在的情況下,由系統(tǒng)中的VCC3.3給VBAT供電;
當(dāng)主電源斷電之后,由CR1220紐扣電池給STM32自帶的RTC模塊供電,從而能夠保證實(shí)時(shí)時(shí)鐘模塊在主電源掉電的情況下還能夠正常工作。
但是這樣設(shè)計(jì)的話,這里有一個(gè)矛盾需要解決。如果VBAT引腳直接與VCC3.3和CR1220連接的話,會(huì)存在下面問題:
1、當(dāng)電池電壓高于3.3V,電池就會(huì)輸出電流到AMS1117,使得芯片發(fā)燙,還會(huì)很快消耗電池電量。
2、如果電池電壓低于3.3V,AMS1117產(chǎn)生的3.3V,就會(huì)給電池充電,而這種CR1220電池是不能夠充電的。
為了解決上面問題,我們將VBAT引腳的供電電路設(shè)計(jì)如下:
D1防止電池的電流流向AMS1117,D2防止AMS1117產(chǎn)生的3.3V流向電池。
之所以這樣設(shè)計(jì),用的就是“二極管的單向?qū)?/span>性”。
正常產(chǎn)品設(shè)計(jì)的時(shí)候,每個(gè)電源引腳旁邊,最好放置一個(gè)0.1uF的電容濾波,用來濾除電源的噪聲雜波。
復(fù)位引腳NRST:
復(fù)位就是重啟。STM32復(fù)位引腳是低電平復(fù)位,正常工作狀態(tài),復(fù)位引腳是高電平。
單片機(jī)的置位和復(fù)位,其目的都是為了把電路初始化到一個(gè)確定狀態(tài)。復(fù)位時(shí)在單片機(jī)內(nèi)部單片機(jī)是將存儲(chǔ)設(shè)備和一些寄存器裝入生產(chǎn)廠商預(yù)設(shè)的一個(gè)值。
一般來說,單片機(jī)復(fù)位電路的作用是把一個(gè)狀態(tài)機(jī)初始化到一個(gè)空的狀態(tài)。
單片機(jī)實(shí)現(xiàn)上電復(fù)位的原理:
在復(fù)位引腳NRST上外接電容和電阻。
當(dāng)復(fù)位電平(低電平)持續(xù)兩個(gè)機(jī)器周期以上時(shí)復(fù)位有效,系統(tǒng)上電后由于電容的充電,會(huì)保持一段時(shí)間的低電平來使單片機(jī)復(fù)位。
剛上電,電容兩端電壓為0,即低電平復(fù)位,RC電路有個(gè)充電曲線(即電容兩端電壓變化曲線),單片機(jī)識(shí)別外部電平有一個(gè)連接電壓,保證rc電路電容電壓充到單片機(jī)臨界電壓的時(shí)間在兩個(gè)機(jī)器周期以上就能滿足單片機(jī)復(fù)位條件;
當(dāng)3.3V電源加到VCC3.3時(shí),RC電路導(dǎo)通,NRST與地的電位差為電容與地的電位差。NRST與地的電位差只有電容充電完畢后才會(huì)達(dá)到3.3V,所以在電容的充電過程中,給芯片引腳的信號(hào)都是低電平。
根據(jù)RC電路充電方程式V(t)=U+A*e-(t/RC),只要合理的選擇好R跟C的值就可以保證充電時(shí)間大于芯片復(fù)位所要求的時(shí)間。我們一般R選擇10K電阻,C選擇0.1uF電容。
晶振引腳:
STM32有兩組晶振,一組用來給單片機(jī)提供主時(shí)鐘(5:OSC_IN,6:OSC_OUT),主時(shí)鐘晶振使用8MHz的晶振(為了程序內(nèi)部倍頻方便,一般選用8MHz的晶振)。
一組用來給RTC提供時(shí)鐘(3:OSC32_IN,4:OSC32_OUT),RTC時(shí)鐘晶振,需要連接32.768K的晶振,關(guān)于為什么要用32.768KHz,大家可以去百度了解一下哈。
實(shí)際應(yīng)用中,如果不用RTC功能的話,RTC的晶振不必連接。
STM32的時(shí)鐘電路又分為內(nèi)時(shí)鐘和外時(shí)鐘兩種模式。
外部時(shí)鐘是在OSC_IN和OSC_OUT之間加上一個(gè)晶振,單片機(jī)內(nèi)部振蕩器便能產(chǎn)生自激震蕩,產(chǎn)生時(shí)鐘信號(hào),在晶振的兩側(cè)加上20~30pF的瓷片電容起到了微調(diào)時(shí)鐘頻率的作用,讓頻率更加穩(wěn)定。
內(nèi)部時(shí)鐘是STM32內(nèi)部有時(shí)鐘產(chǎn)生,所以如果不用外部晶振的話,也可以不用連接,內(nèi)部時(shí)鐘是用芯片內(nèi)部振蕩電路,精度不高,溫漂也較大,不需要外部振蕩器件。
BOOT引腳:
STM32有兩個(gè)BOOT引腳,分別是BOOT0和BOOT1,這兩個(gè)引腳的高低電平,決定了單片機(jī)的啟動(dòng)方式和運(yùn)行方式。
第一種(BOOT1=X,BOOT0=0)啟動(dòng)方式是最常用的用戶FLASH啟動(dòng)。默認(rèn)啟動(dòng)方式。
第二種(BOOT1=0,BOOT0=1)啟動(dòng)方式是系統(tǒng)存儲(chǔ)器啟動(dòng)方式。STM32中自帶的BootLoader(就是通常說的ISP程序)就是在這種啟動(dòng)方式中,如果出現(xiàn)程序硬件錯(cuò)誤的話可以切換BOOT0=1到該模式下重新燒寫Flash即可恢復(fù)正常。BootLoader所在區(qū)域的內(nèi)容在芯片出廠后沒有人能夠修改或擦除,即它是一個(gè)ROM區(qū)。
第三種(BOOT1=1,BOOT0=1)啟動(dòng)方式是STM32內(nèi)嵌的SRAM啟動(dòng)。該模式用于調(diào)試。
一般我都是將BOOT0和BOOT1接地。
上面就是最小系統(tǒng)的全部內(nèi)容,當(dāng)然只有上面的部分還不行,一般最小系統(tǒng)還包括下面幾部分:
電源電路:
因為STM32單片機(jī)一般都是3.3V供電,而生活中一般常見的都是5V電源(電腦的USB口,手機(jī)充電器,移動(dòng)電源...),所以一般使用AMS1117-3.3V穩(wěn)壓電源芯片將5V降壓為3.3V,該芯片的封裝一般為SOT223。
下載電路:
當(dāng)然,除了上面幾部分以為,還需要一個(gè)下載電路,STM32的下載方式有如下幾種:
(1)串口下載:使用串口下載需要單片機(jī)內(nèi)有相應(yīng)的程序的支持,而系統(tǒng)存儲(chǔ)器中就放了這么一段程序,由ST在生產(chǎn)線上寫入,用于通過可用的串行接口對(duì)閃存存儲(chǔ)器進(jìn)行重新編程。(在系統(tǒng)存儲(chǔ)器啟動(dòng)模式下下載,因?yàn)樵趶S家提供的BootLoader中,提供了串口下載程序的固件,可以通過這個(gè)BootLoader將程序下載到系統(tǒng)的Flash中。程序燒錄在FLASH)。
注意:使用此種方式需要BOOT0=1,即需要有外部電路支持才可以實(shí)現(xiàn)串口下載。
(2)JLINK或者STLINK下載
一般我們使用JTAG或者SWD模式下載程序。
推薦使用SWD模式下載,SWD模