計(jì)STM32F103C8T6最小系統(tǒng)板:原理圖、PCB到打樣全攻略)
簡(jiǎn)介本資源為STM32F103C8T6最小系統(tǒng)完整硬件設(shè)計(jì)包面向嵌入式初學(xué)者、電子專業(yè)學(xué)生及硬件開發(fā)入門者解決從芯片選型到PCB落地的核心設(shè)計(jì)問題。資源共24個(gè)文件涵蓋原理圖.SchDoc、PCB布局.PcbDoc、封裝庫.PcbLib、原理圖庫.SchLib、BOM清單.xls/.csv、設(shè)計(jì)規(guī)則檢查報(bào)告.drc及Gerber輸出配置.OutJob等關(guān)鍵工程文件完整覆蓋Altium Designer環(huán)境下最小系統(tǒng)開發(fā)全流程。壓縮包大小59.11MB結(jié)構(gòu)清晰含預(yù)覽文件便于快速驗(yàn)證內(nèi)容。已有21778人學(xué)習(xí)下載讀者可直接調(diào)用該設(shè)計(jì)進(jìn)行焊接實(shí)操、電路調(diào)試、SWD編程驗(yàn)證或作為擴(kuò)展項(xiàng)目如傳感器采集、IoT節(jié)點(diǎn)的可靠硬件基礎(chǔ)配套BOM與DRC報(bào)告更便于理解電源濾波、晶振匹配、復(fù)位可靠性等關(guān)鍵設(shè)計(jì)細(xì)節(jié)顯著降低入門門檻。 既然你在B站或電子工程論壇搜過STM32F103C8T6最小系統(tǒng)大概率已經(jīng)看過那種九塊九包郵的藍(lán)色/紅色開發(fā)板了。用那種板子學(xué)習(xí)和驗(yàn)證邏輯確實(shí)省事但一旦你要做真正的產(chǎn)品原型、或者想把一個(gè)功能固化在特定尺寸的板子里那些開發(fā)板的各種不合理布局和冗余電路就會(huì)開始拖后腿。我最初自己畫最小系統(tǒng)板純粹是因?yàn)橐粋€(gè)做無刷電機(jī)驅(qū)動(dòng)的項(xiàng)目——那塊藍(lán)色的板子引腳引出太亂電源走線細(xì)得離譜帶個(gè)舵機(jī)都抖更別提跑ADS1220這種高精度ADC時(shí)那個(gè)地平面噪聲。這篇文章我把當(dāng)時(shí)從零開始畫STM32F103C8T6最小系統(tǒng)的全過程拆給你看從原理圖設(shè)計(jì)、PCB布局布線到嘉立創(chuàng)下單打樣全流程不做任何保留。全文沒有玄學(xué)都是能用萬用表和示波器驗(yàn)證的硬邏輯。1. 最小系統(tǒng)的“最小”到底劃在哪條線很多人一聽到最小系統(tǒng)覺得無非就是芯片加晶振加電源。真這么想就錯(cuò)了。F103C8T6雖然是個(gè)入門級(jí)Cortex-M3但它的啟動(dòng)要求、電源時(shí)序、下載接口和復(fù)位邏輯每一項(xiàng)都有講究。我見過太多人畫的板子“看起來”能跑點(diǎn)燈實(shí)際上復(fù)位腳懸空、VCAP漏接、BOOT0電平不確定最后下載程序時(shí)各種靈異故障。1.1 一顆芯片“跑起來”需要哪些必要條件從硬件角度STM32F103C8T6要進(jìn)入正常工作狀態(tài)需要滿足幾個(gè)底層條件供電穩(wěn)定、時(shí)鐘有效、復(fù)位釋放、啟動(dòng)模式正確。供電方面F103C8T6的VDD電壓范圍是2.0V到3.6V典型值3.3V。但它不是把所有引腳都接上3.3V就完事了。芯片有多個(gè)VDD引腳還有一顆專用的VCAP引腳即VDD_1.8V內(nèi)部核心電壓的外部退耦點(diǎn)芯片通過內(nèi)部LDO從3.3V降出1.8V給內(nèi)核使用這個(gè)引腳需要外接一個(gè)2.2uF的陶瓷電容到地。如果這顆電容漏接或容值不對(duì)芯片上電后內(nèi)核電壓建立就不正常表現(xiàn)就是芯片完全沒反應(yīng)或者偶爾能跑偶爾死機(jī)。時(shí)鐘方面F103內(nèi)部有一個(gè)HSI高速內(nèi)部時(shí)鐘8MHz所以理論上不接外部晶振也能跑。但問題是HSI精度不夠全溫度范圍內(nèi)誤差可以達(dá)到1%到2%對(duì)UART通信、CAN總線、USB這類對(duì)時(shí)序敏感的場(chǎng)景就是災(zāi)難。做最小系統(tǒng)就是為了后面產(chǎn)品化所以必須配一顆8MHz的外部無源晶振HSE加上兩顆20pF負(fù)載電容。復(fù)位電路這里有個(gè)新手特別容易犯的錯(cuò)——直接用一顆10uF電解電容接到NRST腳。NRST內(nèi)部其實(shí)已經(jīng)有一個(gè)約40kΩ的上拉電阻外部再接一顆104或者100nF電容到地就夠了。電容太大反而會(huì)讓復(fù)位釋放時(shí)間過長(zhǎng)導(dǎo)致上電后芯片遲遲不進(jìn)入運(yùn)行狀態(tài)。當(dāng)然如果你想做手動(dòng)復(fù)位按鍵那顆按鍵是并聯(lián)在電容兩端的按下時(shí)把NRST拉低。啟動(dòng)模式由BOOT0引腳的電平?jīng)Q定。F103有三種啟動(dòng)方式從主Flash啟動(dòng)BOOT00、從系統(tǒng)存儲(chǔ)器啟動(dòng)BOOT01且BOOT10、從SRAM啟動(dòng)BOOT01且BOOT11。最小系統(tǒng)板默認(rèn)應(yīng)該保證BOOT0有明確的下拉電阻或直接接地確保上電后從Flash啟動(dòng)。BOOT1在F103C8T6上沒有引出專用引腳它在封裝內(nèi)部已經(jīng)下拉所以這個(gè)不用操心但BOOT0必須處理干凈。1.2 供電架構(gòu)與去耦的工程化處理最小系統(tǒng)板上供電來路通常有兩種一種是通過USB的5V另一種是外部穩(wěn)壓源直接給3.3V。我建議板子上做一個(gè)3.3V LDO的位置這樣既能用USB供電也能直接接外部穩(wěn)壓電源。我用的LDO是AMS1117-3.3雖然這顆芯片性能一般紋波抑制也不算優(yōu)秀但在入門級(jí)應(yīng)用里性價(jià)比極高。輸入側(cè)放一顆10uF鉭電容或電解電容輸出側(cè)放一顆10uF加一顆100nF覆蓋低頻和高頻。這里有個(gè)細(xì)節(jié)——輸出側(cè)的100nF必須盡量靠近芯片的VDD引腳而不是靠近LDO的輸出端。很多人把這顆電容放在電源入口實(shí)際上它應(yīng)該放在負(fù)載端也就是STM32的電源引腳旁邊才是正確的去耦姿勢(shì)。去耦電容不是堆得越多越好。對(duì)于F103C8T6這種48腳封裝的芯片VDD引腳有3組左右每個(gè)VDD引腳旁邊放一顆100nF的0402或0603電容這是基本功。另外我習(xí)慣在PCB的電源入口處再加一顆4.7uF到10uF的鉭電容做整體儲(chǔ)能應(yīng)對(duì)瞬態(tài)電流需求。去耦電容的放置原則是“盡量靠近芯片電源引腳”并且電容到VDD引腳的走線要短而粗千萬不要串一個(gè)過孔再繞一圈。1.3 下載接口與調(diào)試接口的取舍STM32F103C8T6支持JTAG和SWD兩種下載方式。如果你畫的是最小系統(tǒng)直接留SWD四線接口就夠了——SWDIOPA13、SWCLKPA14、GND、3.3V。比JTAG少占用幾個(gè)IO對(duì)入門調(diào)試完全夠用。這里要提一個(gè)關(guān)鍵細(xì)節(jié)PA13和PA14作為SWDIO和SWCLK的同時(shí)它們也是普通的GPIO口。在畫原理圖時(shí)這兩個(gè)引腳不要接任何會(huì)拉高或拉低下拉電平的電阻否則會(huì)導(dǎo)致下載器無法建立連接。所有外設(shè)的上下拉都不要放在這兩個(gè)引腳上。我還在SWD接口上額外引了一條RST信號(hào)線雖然標(biāo)準(zhǔn)SWD不必須接RST但遇到芯片死鎖或者引腳被復(fù)用掉的時(shí)候連上RST能救命。另一個(gè)軟件層面的保護(hù)手段是設(shè)置RDP讀保護(hù)但那個(gè)是后話硬件上先把接口留對(duì)。2. 原理圖設(shè)計(jì)每一根引腳都必須有明確去處原理圖階段花的時(shí)間和后面PCB調(diào)試省下的時(shí)間成正比。尤其是F103C8T6這種LQFP48封裝引腳不算多但每個(gè)腳都有默認(rèn)復(fù)用功能畫錯(cuò)了可不像改軟件那樣輕松改一次板子至少一周周期所以原理圖必須摳細(xì)。2.1 F103C8T6的引腳分布全景LQFP48封裝的F103C8T6總共有37個(gè)GPIO引腳外加電源、地、晶振、復(fù)位和VCAP等專用引腳。以下這個(gè)表是關(guān)鍵引腳的功能總結(jié)引腳名稱功能說明最小系統(tǒng)連接建議1VBAT備份電源引腳用于RTC和備份寄存器接3.3V如果不用外部紐扣電池9VDDA模擬電源正極接3.3V并通過磁珠或小電阻與數(shù)字電源隔離24VSSA模擬電源地接GND與數(shù)字地單點(diǎn)連接28VCAP1.8V內(nèi)核電壓外部退耦接2.2uF電容到地5NRST復(fù)位引腳接100nF電容到地可選按鍵3OSC_IN外部晶振輸入接8MHz晶振負(fù)載電容4OSC_OUT外部晶振輸出接8MHz晶振負(fù)載電容44BOOT0啟動(dòng)模式選擇10kΩ下拉到地20/48VDD數(shù)字電源接3.3V各接100nF去耦電容19/47VSS數(shù)字地接GND要特別留意VDDA和VSSA。F103的模擬部分供電和數(shù)字部分是分開的VDDA必須接3.3V如果板子做了模擬電路比如ADC采集就建議在VDDA的供電路徑上串聯(lián)一顆10Ω電阻或磁珠和VDD形成一點(diǎn)隔離能顯著降低ADC采樣值的跳動(dòng)。2.2 最小系統(tǒng)原理圖的完整模塊拆解我把F103C8T6最小系統(tǒng)原理圖拆成五個(gè)模塊來講電源模塊、時(shí)鐘模塊、復(fù)位模塊、啟動(dòng)配置模塊和下載調(diào)試模塊。電源模塊是這五個(gè)里的根基——3.3V通過LDO從USB的5V降壓或者外部直接供電輸入輸出各配濾波電容這是板上所有電路的“供血系統(tǒng)”。我習(xí)慣在電源入口放一顆TVS管防止熱插拔時(shí)的浪涌電壓打壞芯片成本就幾毛錢但可靠性提升是實(shí)打?qū)嵉?。時(shí)鐘模塊的核心是一顆8MHz無源晶振。為什么用8MHz而不是直接用外部有源晶振因?yàn)镕103內(nèi)部PLL可以倍頻到72MHz8MHz是性價(jià)比很高的基準(zhǔn)頻率。晶振旁邊兩顆20pF的負(fù)載電容不是隨便選的要與晶振本身的負(fù)載電容指標(biāo)匹配。市面最常見的8MHz晶振負(fù)載電容是20pF所以配20pF電容就是標(biāo)準(zhǔn)值。如果你用的晶振規(guī)格書上寫的是10pF負(fù)載電容那電容也要換成10pF否則起振會(huì)偏頻甚至不起振。復(fù)位模塊前面已經(jīng)說過NRST接100nF電容到地即可加按鍵是錦上添花不加也完全不影響功能。但要注意如果板上還有其他需要復(fù)位的芯片比如某些傳感器或通信模塊可以統(tǒng)一接到NRST線上實(shí)現(xiàn)系統(tǒng)級(jí)同步復(fù)位前提是這些芯片的復(fù)位腳也是低電平有效且沒有沖突。啟動(dòng)配置模塊就一個(gè)核心任務(wù)——BOOT0必須下拉。我在BOOT0上放了一個(gè)10kΩ電阻到地同時(shí)留了一個(gè)0Ω電阻或者跳線焊盤的位置方便將來如果要從系統(tǒng)存儲(chǔ)器啟動(dòng)去刷Bootloader直接把這個(gè)電阻焊掉改接高電平就行。下載調(diào)試模塊留一個(gè)4針或5針的SWD座子這就是你和芯片之間唯一的“溝通窗口”原理圖上標(biāo)注清楚引腳順序尤其是防止1腳和2腳方向搞反——這個(gè)方向錯(cuò)了插上下載器瞬間就可能燒毀芯片。2.3 原理圖繪制實(shí)操用嘉立創(chuàng)EDA快速實(shí)現(xiàn)如果用Altium Designer當(dāng)然也能做但考慮到國(guó)內(nèi)打板流程的便捷性我推薦用嘉立創(chuàng)EDA專業(yè)版或標(biāo)準(zhǔn)版都可以。原因很簡(jiǎn)單原理圖庫和PCB封裝庫都是現(xiàn)成的F103C8T6的符號(hào)和LQFP48封裝都在庫里不用自己畫封裝避免封裝畫錯(cuò)的致命問題。嘉立創(chuàng)EDA的關(guān)鍵操作我梳理成幾條新建工程后在元件庫搜索“STM32F103C8T6”直接放置。搜索“8MHz”找晶振元件注意區(qū)分無源晶振和有源晶振的封裝前者通常是兩個(gè)腳的HC-49S或貼片3225后者是四腳。搜索“AMS1117-3.3”放置LDO注意引腳順序——它的輸入、輸出和地在原理圖上不能接反。放置去耦電容時(shí)用快捷鍵快速陣列復(fù)制效率會(huì)高很多。所有網(wǎng)絡(luò)標(biāo)號(hào)必須清晰規(guī)范例如3V3、GND、NRST、BOOT0、SWDIO、SWCLK。命名規(guī)范的價(jià)值在后面PCB布局階段才能體現(xiàn)出來那時(shí)候你看著飛線就知道哪個(gè)網(wǎng)絡(luò)是重要的電源線、哪個(gè)是信號(hào)線。畫完原理圖以后有一個(gè)動(dòng)作千萬別跳過——電氣規(guī)則檢查ERC。嘉立創(chuàng)EDA會(huì)提示懸空引腳、短路、單端網(wǎng)絡(luò)等問題。有些警告可以忽略比如未使用的GPIO懸空警告但電源短路、輸出引腳接電源這類錯(cuò)誤必須全部清零再進(jìn)入PCB設(shè)計(jì)。3. PCB設(shè)計(jì)雙層板也能做出看得過去的EMC性能LQFP48封裝的手工焊接難度不高所以PCB設(shè)計(jì)我直接按雙層板來做不疊四層。說實(shí)話F103這種主頻72MHz的芯片雙層板只要布局布線合理EMC性能不會(huì)差到哪去。核心是地平面完整性和電源走線寬度。3.1 層疊與線寬雙層板的底線參數(shù)雙層板的標(biāo)準(zhǔn)層疊是Top層走信號(hào)和元件Bottom層做地平面。F103C8T6的PCB我建議板厚1.6mm銅厚1oz35μm這是嘉立創(chuàng)最常規(guī)的工藝參數(shù)價(jià)格便宜性能也夠用。電源線和地線是PCB上最重要的走線線寬不低于40mil約1mm。信號(hào)線可以走10mil但對(duì)于晶振到芯片的走線盡量短、盡量直最好加一個(gè)地過孔包圍。USB的D和D-差分對(duì)如果板上沒有USB功能可以忽略但如果你把USB座子畫上去了這兩根線要等長(zhǎng)且并行走。地平面不要大面積割裂。經(jīng)常有人為了走信號(hào)線方便把Bottom層的地銅皮切得七零八落。這樣會(huì)造成地回路面積變大輻射和噪聲問題接踵而至。我的建議是先鋪好Bottom層的地銅然后用過孔把Top層的器件接地腳和Bottom地平面連起來信號(hào)線實(shí)在走不通時(shí)寧可打孔繞一繞也不要大面積破壞地平面。3.2 布局順序分區(qū)塊比按原理圖擺放更靠譜很多新手的慣性是從原理圖分區(qū)直接映射到PCB布局結(jié)果板子上電容亂飛、晶振離芯片十萬八千里。正確的布局思路是按功能模塊分區(qū)塊我通常按以下順序排第一步放主控芯片你要先確定芯片的朝向LQFP48的1腳方向最好和板子的一個(gè)角對(duì)齊方便后面焊接時(shí)辨認(rèn)方向也方便檢查引腳。芯片放在板子中心偏左的位置讓四周都有空間出線。第二步放晶振電路晶振和兩顆負(fù)載電容要緊緊貼著OSC_IN和OSC_OUT引腳走線路徑越短越好。晶振下面不要走其他信號(hào)線晶振區(qū)域外圍打一圈地過孔形成一個(gè)局部屏蔽籠。第三步放電源電路LDO的位置放在板子輸入接口旁邊讓5V或外部電源進(jìn)來先經(jīng)過LDO和濾波電容再進(jìn)入主控區(qū)域。模擬電源VDDA的去耦電容放在芯片模擬電源引腳旁邊并通過一個(gè)小孔連接到地平面。第四步放去耦電容每一個(gè)VDD引腳旁邊的100nF電容位置必須緊貼對(duì)應(yīng)引腳優(yōu)先保證這一條實(shí)在放不下再調(diào)整。放電容的時(shí)候注意電容和芯片的距離不要超過2到3毫米遠(yuǎn)了就失去去耦意義了。第五步放下載接口和按鍵、LED這些外圍器件SWD座子放在板子邊緣方便插線LED串聯(lián)的限流電阻放LED旁邊阻值根據(jù)LED功耗選1kΩ到2kΩ都行。3.3 布線的先后邏輯先電源、再時(shí)鐘、后信號(hào)布線順序如果不對(duì)返工量極大。我的經(jīng)驗(yàn)是先布電源網(wǎng)絡(luò)和地網(wǎng)絡(luò)把“骨架”搭好再布晶振和復(fù)位信號(hào)最后布普通GPIO信號(hào)線。電源走線要注意星型拓?fù)洹獜腖DO輸出端分別拉線到各VDD引腳避免串行供電導(dǎo)致后級(jí)電壓被前級(jí)拉低。地網(wǎng)絡(luò)全部通過過孔連接到Bottom層地平面而不是在Top層走線這樣地回路最短抗干擾也最好。晶振走線是高頻信號(hào)走線越短越好最好不換層。如果必須換層過孔旁邊要放一個(gè)地過孔作回流路徑。復(fù)位信號(hào)線NRST的抗干擾要求也很高盡量遠(yuǎn)離電源線和其他數(shù)字信號(hào)線如果空間允許復(fù)位線兩側(cè)鋪一地銅作屏蔽。普通GPIO信號(hào)線就隨意多了10mil線寬只要不穿越晶振區(qū)域、不破壞地平面完整性就行。但PA2和PA3UART2_TX/RX這種通信腳能短則短盡量避免并行走長(zhǎng)線防止串?dāng)_。3.4 覆銅與過孔最后一步的細(xì)節(jié)決定成敗布線完成后Bottom層直接整片覆銅接GNDTop層的空白區(qū)域也覆銅接GND然后均勻打上地過孔。過孔間距不一定要很密但晶振周圍、芯片電源引腳附近這些關(guān)鍵區(qū)域要加密。過孔內(nèi)徑0.3mm外徑0.6mm這個(gè)參數(shù)在嘉立創(chuàng)打樣完全沒問題而且成本也不增加。電源輸入和輸出的過孔要加大用0.5mm內(nèi)徑保證載流能力。地過孔的數(shù)量和位置我習(xí)慣在芯片底部四周均勻排一圈這樣每個(gè)VDD引腳都能就近找到地回路。覆銅時(shí)注意避讓晶振下方晶振底部不要有銅皮覆蓋同時(shí)晶振的GND焊盤要直接連接到附近的過孔不要懸空。用萬用表檢查晶振外殼和地導(dǎo)通如果導(dǎo)通說明鋪銅正確。4. 打樣與焊接從Gerber文件到點(diǎn)亮第一顆LED原理圖和PCB畫好的那一刻項(xiàng)目其實(shí)才完成一半后面還有打樣、焊接和調(diào)試三輪考驗(yàn)。我見過很多人畫圖時(shí)信心滿滿板子一到手就蔫了核心原因是對(duì)生產(chǎn)環(huán)節(jié)的坑不認(rèn)識(shí)。4.1 嘉立創(chuàng)下單文件檢查和工藝參數(shù)選擇在嘉立創(chuàng)下單頁面直接上傳PCB文件在線版則直接提交訂單系統(tǒng)會(huì)自動(dòng)檢查文件完整性。我第一次打樣時(shí)吃過一次虧只上傳了Top層和Bottom層的Gerber文件漏了絲印層和阻焊層導(dǎo)致板子回來后沒有絲印標(biāo)記、焊盤全部裸露沒開窗。如果是從Altium Designer或Cadence導(dǎo)出的Gerber文件下單前必須核對(duì)文件清單Top Layer、Bottom Layer、Top Overlay絲印、Bottom Overlay、Top Solder頂層阻焊開窗、Bottom Solder、鉆孔文件。嘉立創(chuàng)的系統(tǒng)雖然會(huì)自動(dòng)識(shí)別但人工核對(duì)一遍最穩(wěn)妥。板材選FR-4、板厚推薦1.6mm、銅厚1oz表面工藝選沉金或噴錫都可以。如果只是自己學(xué)習(xí)調(diào)試噴錫就夠了便宜且焊接容易。如果打算做產(chǎn)品或者長(zhǎng)期使用建議加錢選沉金防氧化性能更好。下單數(shù)量上注意“5片板起步”是嘉立創(chuàng)的坑點(diǎn)不其實(shí)這不是坑5片價(jià)格和10片差不多基本等于白送所以一次性打樣直接選10片多出來的當(dāng)備用或者送群友。4.2 手工焊接LQFP48一把烙鐵也能搞定LQFP48的引腳間距是0.5mm很多人一看到這個(gè)間距就發(fā)怵。其實(shí)掌握了正確的焊接流程并不需要熱風(fēng)槍或鋼網(wǎng)一把尖頭烙鐵加焊錫絲就夠了。流程是這樣的先在PCB焊盤上均勻上一層薄薄的錫然后把芯片放上去對(duì)齊輕輕壓住一角。這時(shí)候先固定對(duì)角線的兩個(gè)引腳——用電烙鐵點(diǎn)一下對(duì)角的第一腳再點(diǎn)一下對(duì)面那腳的焊錫把芯片固定住確保所有引腳和焊盤對(duì)齊。接著把所有引腳均勻涂上助焊劑用烙鐵頭蘸上焊錫直接從一排引腳的一端“拖”到另一端利用液態(tài)錫的表面張力把多余的錫帶離引腳。最后用洗板水或酒精清洗板面。拖焊的時(shí)候有個(gè)技巧烙鐵溫度調(diào)在330°C到350°C之間不要讓焊錫在引腳間形成橋。萬一有橋連用助焊劑加烙鐵反復(fù)拖幾次基本都能解決。如果實(shí)在處理不了用吸錫帶把多余的錫吸走。焊完先用萬用表蜂鳴檔檢查相鄰引腳有沒有短路尤其是電源腳和相鄰信號(hào)腳之間的短路這是最致命的。4.3 首次上電的調(diào)試流程不要一上來就點(diǎn)燈拿到焊好的板子先別急著插下載器按下面這套流程做一遍通電檢查能幫你省掉大量查錯(cuò)時(shí)間。第一萬用表電阻檔測(cè)3.3V和GND之間的阻值正常情況下應(yīng)該幾百Ω以上如果接近0Ω說明電源短路必須排查焊錫橋連或電容焊反。第二上電后先測(cè)3.3V是否正常輸出。然后測(cè)VCAP引腳的電壓正常應(yīng)該是1.8V左右。如果VCAP電壓不對(duì)優(yōu)先檢查2.2uF電容是否焊接正確很多情況下是這個(gè)電容虛焊導(dǎo)致芯片內(nèi)核供電異常。第三用示波器或邏輯分析儀量8MHz晶振的OSC_OUT引腳應(yīng)該能看到穩(wěn)定的正弦波或方波。如果示波器探頭本身的輸入電容太大可能導(dǎo)致晶振停振所以最好用10×衰減檔來量減小負(fù)載影響。第四測(cè)量NRST引腳的電壓上電后應(yīng)該為高電平。如果是低電平說明芯片一直處于復(fù)位狀態(tài)檢查復(fù)位電容是否漏電、引腳是否虛焊。第五接上ST-Link或者J-Link打開STM32CubeProgrammer或Keil嘗試讀取芯片ID。能讀到ID說明SWD接口和芯片內(nèi)核都正常燒錄點(diǎn)燈程序就是水到渠成的事了——PA8接一個(gè)LED寫個(gè)GPIO翻轉(zhuǎn)程序看到LED閃起來這張板子才算真正“活”了。5. 實(shí)測(cè)中遇到過的那些坑寫出來幫你避雷做最小系統(tǒng)板的整個(gè)過程我踩過不少坑有些是常識(shí)性錯(cuò)誤有些是冷門問題。把這些問題整理出來應(yīng)該能幫你少走很多彎路。5.1 晶振不起振的排查鏈路晶振不起振是最常見的翻車點(diǎn)。F103上電后如果程序燒錄成功但運(yùn)行異常大概率就是HSE沒起振。排查鏈路如下先用示波器量晶振引腳如果完全沒有波形說明晶振沒工作。這時(shí)候不要急著換晶振先檢查負(fù)載電容的容值和焊接方向。很多貼片電容上沒有極性標(biāo)識(shí)如果用的是有極性電容或者電容焊反等效容值會(huì)改變甚至為零晶振就不起振。另外如果是貼片晶振焊接溫度過高或者時(shí)間過長(zhǎng)可能損壞晶振內(nèi)部晶片這種損壞肉眼看不出來只能換一顆測(cè)試。還有一種不起振的原因是PCB布局太差——OSC_IN和OSC_OUT走線過長(zhǎng)、繞彎、穿過地平面裂縫。這種情況我遇到過晶振離芯片引腳不到3毫米但中間恰好有一根信號(hào)線穿過導(dǎo)致寄生電容增大最后把晶振旁邊的過孔填掉問題才消失。5.2 下載器連接不上第一反應(yīng)不應(yīng)該是換下載器ST-Link連不上芯片很多人第一反應(yīng)是下載器壞了其實(shí)大部分時(shí)候是板子問題。最常見的原因是SWDIO和SWCLK兩根線接反了或者下載器的3.3V沒有給板子供電。F103的SWD接口需要一個(gè)參考電源如果下載器與板子之間的電源線斷了SWD握手就會(huì)失敗。還有一個(gè)容易被忽略的點(diǎn)如果芯片的BOOT0是高電平狀態(tài)上電后進(jìn)入的是系統(tǒng)存儲(chǔ)器模式而不是主Flash模式SWD仍然可以連接但讀出的ID可能被鎖定或者無法寫入。所以排查SWD連接問題時(shí)先用萬用表確認(rèn)BOOT0電平再排除其他因素。如果你用的是DAP-Link或者ST-Link的5V供電版本注意板子上必須有一個(gè)3.3V LDO把5V轉(zhuǎn)為3.3V否則芯片會(huì)直接被5V燒毀。很多人在這一步翻車插上下載器板子冒煙十有八九是電源問題。5.3 ADC精度差地平面和VDDA濾波是元兇如果你在最小系統(tǒng)板上跑ADS1220或者直接用STM32的內(nèi)部ADC發(fā)現(xiàn)采樣值跳得厲害、精度達(dá)不到預(yù)期大概率是VDDA的處理沒做好。ST官方手冊(cè)里推薦VDDA和VSSA之間放一顆1uF和一顆10nF電容目的就是抑制高頻噪聲。同時(shí)VDDA的電源路徑不要和VDD共用一根細(xì)走線建議用0Ω電阻或磁珠從3.3V主電源分出來。地平面方面ADC模擬部分的地和數(shù)字地要單點(diǎn)連接不要大面積混在一起。如果這些都不管用把采樣率降下來、或者開啟過采樣也能應(yīng)急但根本解法是PCB層面的處理。5.4 關(guān)于讀保護(hù)一把雙刃劍STM32F103C8T6是有讀保護(hù)RDP功能的通過設(shè)置選項(xiàng)字節(jié)可以讓調(diào)試器無法讀取Flash內(nèi)容這是產(chǎn)品防抄板的一個(gè)基礎(chǔ)手段。但這里有個(gè)大坑開啟讀保護(hù)之后如果下次你還想用ST-Link重新下載程序就必須先執(zhí)行解除讀保護(hù)的操作——而解除讀保護(hù)會(huì)觸發(fā)Flash全片擦除你的程序會(huì)直接消失。所以我的建議是調(diào)試階段千萬不要開讀保護(hù)等產(chǎn)品功能完全穩(wěn)定、準(zhǔn)備交付時(shí)再設(shè)置。如果開了讀保護(hù)又要調(diào)試那就做好每次重新下載前程序被清空的準(zhǔn)備通常需要先全片擦除才能重新燒錄。這個(gè)操作在STM32CubeProgrammer里是可視化完成的但每次切換都會(huì)浪費(fèi)時(shí)間而且如果你忘了備份程序損失就大了。6. 擴(kuò)展思路最小系統(tǒng)的更多打開方式F103C8T6最小系統(tǒng)板不是一個(gè)終點(diǎn)它其實(shí)是一個(gè)可以快速復(fù)用的平臺(tái)。由于它引腳幾乎全部引出、結(jié)構(gòu)簡(jiǎn)單、面積小適合作為各種模塊的核心板衍生出很多有價(jià)值的應(yīng)用。6.1 與傳感器模塊組合ADS1220高精度采集方案ADS1220是TI的24位Delta-Sigma ADCSPI接口常用于稱重傳感器、熱電偶測(cè)溫、應(yīng)變片等微小信號(hào)采集場(chǎng)景。F103C8T6的SPI外設(shè)頻率最高18MHz而ADS1220的SPI時(shí)鐘最高可以跑到2MHz左右兩者匹配起來非常輕松。硬件接法上需要注意ADS1220是模擬前端芯片它的模擬電源AVDD和數(shù)字電源DVDD要分開供電模擬地和數(shù)字地單點(diǎn)連接。在我做稱重儀表時(shí)最小系統(tǒng)板上的3.3V電源經(jīng)過一級(jí)LC濾波后給ADS1220供電采樣穩(wěn)定性好了很多。軟件上F103通過SPI向ADS1220配置寄存器設(shè)置增益和采樣率然后啟動(dòng)轉(zhuǎn)換等待DRDY引腳拉低讀取24位數(shù)據(jù)整個(gè)過程可以用DMA來做節(jié)省CPU資源。6.2 FreeRTOS移植從裸機(jī)到系統(tǒng)的平滑過渡F103C8T6只有20KB RAM和64KB Flash很多人覺得跑FreeRTOS很勉強(qiáng)。其實(shí)如果是做中小型任務(wù)比如多路傳感器采集、串口通信、按鍵掃描、LED狀態(tài)指示FreeRTOS完全跑得動(dòng)。移植FreeRTOS到F103C8T6時(shí)關(guān)鍵點(diǎn)在于系統(tǒng)時(shí)鐘節(jié)拍用哪個(gè)定時(shí)器。官方推薦用SysTick這是Cortex-M3內(nèi)核自帶的定時(shí)器不需要占用外設(shè)定時(shí)器資源。在C8T6上默認(rèn)配置的堆大小heap size我建議設(shè)為8KB左右任務(wù)棧根據(jù)實(shí)際需要分配如果任務(wù)里有大數(shù)組或者浮點(diǎn)運(yùn)算棧要適當(dāng)加大否則會(huì)溢出導(dǎo)致HardFault。我之前遇到過一個(gè)奇怪的問題——跑FreeRTOS后串口打印偶爾亂碼查了很久最后發(fā)現(xiàn)是任務(wù)棧溢出導(dǎo)致內(nèi)存區(qū)被踩踏把串口緩沖區(qū)的數(shù)據(jù)覆蓋了。6.3 密碼鎖與加密存儲(chǔ)最小系統(tǒng)也能做實(shí)用產(chǎn)品密碼鎖是一個(gè)很直觀的應(yīng)用方向。F103C8T6搭配4×4矩陣鍵盤、LCD1602顯示屏和一個(gè)電磁鎖驅(qū)動(dòng)電路就能組成一個(gè)完整的密碼鎖系統(tǒng)。程序里用E2PROM模擬存儲(chǔ)密碼掉電不丟失。但要注意STM32F103C8T6沒有內(nèi)部EEPROM需要外掛一顆AT24C02/04芯片通過I2C接口通信。如果你在原理圖上預(yù)留了I2C接口這步就非常方便。密碼鎖的安全性不僅僅取決于密碼復(fù)雜度還取決于硬件上的“加密”保護(hù)。開啟RDP讀保護(hù)、禁用JTAG只留SWD、把密碼存儲(chǔ)區(qū)放在外部EEPROM的加密頁里這些都是提升安全性的手段。還有一個(gè)細(xì)節(jié)實(shí)際產(chǎn)品的密碼鎖需要防止暴力破解這就需要在軟件里加入延時(shí)鎖定機(jī)制比如連續(xù)輸錯(cuò)三次密碼后鎖定30秒期間LED閃爍提示。6.4 把最小系統(tǒng)板變成學(xué)習(xí)板我個(gè)人覺得最小系統(tǒng)板最大的價(jià)值是教學(xué)。很多大學(xué)單片機(jī)課程還在用老舊的開發(fā)板學(xué)生只知道跟著教程抄代碼完全不理解電路原理。如果用一塊自己焊的最小系統(tǒng)板讓學(xué)生把原理圖、PCB、焊接、調(diào)試走完一遍再寫點(diǎn)燈和串口程序他們對(duì)單片機(jī)的理解深度完全不一樣。我自己后來做了一套配合最小系統(tǒng)板的教學(xué)套件包含LED、按鍵、蜂鳴器、光敏電阻、DHT11溫濕度傳感器全部通過排針與最小系統(tǒng)板直插連接。學(xué)生可以在F103C8T6上寫裸機(jī)程序也可以跑FreeRTOS每節(jié)課的電路原理圖都直接給出剩下的坑讓他們自己踩。這種教學(xué)方式比單純對(duì)著PPT講“什么是GPIO”有用十倍。7. 這版最小系統(tǒng)的最終開箱清單與驗(yàn)收標(biāo)準(zhǔn)做完這塊板子之后我總結(jié)了一套快速驗(yàn)收標(biāo)準(zhǔn)每次拿到新焊的板子就按這個(gè)流程走一遍基本十分鐘內(nèi)能確定板子是好還是壞。以下是完整的檢查清單檢查項(xiàng)測(cè)試方法正常結(jié)果電源短路檢查萬用表蜂鳴檔測(cè)3.3V對(duì)GND電阻阻值100Ω蜂鳴器不響3.3V輸出電壓萬用表直流檔測(cè)LDO輸出3.2V~3.4V之間VCAP電壓萬用表直流檔測(cè)VCAP引腳1.7V~1.9V之間晶振起振示波器10×檔測(cè)OSC_OUT8MHz±0.1%波形穩(wěn)定NRST復(fù)位萬用表測(cè)NRST引腳高電平2.5VSWD連接STM32CubeProgrammer讀取芯片ID能識(shí)別到0x410LED點(diǎn)燈燒錄GPIO翻轉(zhuǎn)程序LED按預(yù)期閃爍UART通信串口工具回環(huán)測(cè)試數(shù)據(jù)收發(fā)正確無亂碼這套清單表面上看起來很基礎(chǔ)但很多產(chǎn)品在開發(fā)過程中翻車往往就是基礎(chǔ)項(xiàng)沒過。VCAP電壓不對(duì)后面所有調(diào)試都白搭晶振頻率偏移定時(shí)器計(jì)時(shí)就不準(zhǔn)SWD連接不穩(wěn)燒錄失敗次數(shù)暴增。把這些基礎(chǔ)項(xiàng)打牢后面應(yīng)用層開發(fā)就能少操很多心。最后分享一個(gè)我個(gè)人的操作習(xí)慣板子焊接完成后第一時(shí)間把原理圖和PCB的最終版PDF導(dǎo)出存檔同時(shí)把工程文件備份到網(wǎng)盤。這個(gè)習(xí)慣幫我省了無數(shù)次“臥槽我改的是哪一版”的尷尬。等這版板子徹底穩(wěn)定了再考慮加個(gè)USB轉(zhuǎn)串口芯片、加個(gè)RGB燈效、加個(gè)CAN收發(fā)器之類的擴(kuò)展功能。F103C8T6雖然是個(gè)老芯片但它穩(wěn)定成熟、資料海量、生態(tài)完整作為入門和快速原型設(shè)計(jì)的平臺(tái)性價(jià)比依然無敵。本文還有配套的精品資源點(diǎn)擊獲取