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