在開始設計軟體功能之前,我們需要先規劃好硬體架構,完成需要的功能設計,同時給軟體開發提供一個調試環境和對象,驗證軟體設計的功能是否滿足需求,運作是否正确,是否符合我們的預期結果。
萬丈高樓平地起,設計一個完整的硬體系統,一般要經過以下幾個步驟:
- 第一步就是要列出需要的軟體功能子產品
- 然後根據功能來配置設定硬體的IO連接配接
- 完成外圍子產品的電路設計
- 最後進行PCB設計。
在STopen開源平台上,我們計劃提供如下功能:
- 系統時鐘:高速時鐘8Mhz,低速時鐘32KHz。
- 電池備份,斷電保持RTC時鐘運作
- JTAG
- 4線SDIO 的SD卡
- MCU接口的16bits TFT LCD屏
- SPI存儲器
- 一個調試UART,一個輸出UART
- 一個CAN
- 一路I2C
- 一個FULL speed USB device
- 五路PWM
- 2路ADC
- 2路DAC
- 2路PWM捕獲
- 6個按鍵
- 8路輸入IO
-
8路輸出IO
面對如此衆多的功能和IO需要配置設定,如果采用傳統的方法來設計,是非常勞心勞力的,而且很容易出錯,估計大家一開始看到都腦瓜子疼。
非常高興的是ST公司提供了一個設計工具stm32cubemx來輔助我們進行設計工作,這可以大大的減少我們的設計工作量,同時不會發生錯誤。該軟體的使用操作請參考其他相關文檔,在此不具體講解。
工具是幫助我們提高設計效率和避免錯誤的,并不能代替我們的工作,是以在使用這個工具的時候,我們如何來安排計劃的功能所對應的IO引腳,也需要一些設計技巧。
我們首先要明白和了解一個重要的功能,ST晶片的IO絕大多數是可以進行重映射的,比如一個UART1它的管腳是可以變化的,并不是固定不變的。這一點和傳統MCU的是有巨大差別的,好處是我們更容易根據布線的友善調整位置,同時提高IO的使用率,最大化的使用這些IO來達成我們的目标。但是也有一些引腳是不可以重映射的,比如JTAG,USB,OSC等。
在設計一個系統之前,我們要先大概了解一下這個晶片的哪些IO資源可以重映射,哪些是固定的,這樣我們設計的時候就可以按照先不變,再可變的順序來合理安排IO。
一般來說,晶片的UART,I2C,SPI,PWM,ADC,DAC等這些正常資源的IO都是可以重新映射,或者有多個選擇,當和其他IO發生沖突的時候,我們可以幾選一的方式來避開沖突,比如它有好幾個spi輸出,我們隻需要其中一個,那麼就可以根據IO的使用和沖突情況來選擇任意一路就可以滿足我們的需求。
根據經驗和這些特征,我們IO配置設定的先後順序如下,能事半功倍:
- 先安排具有唯一性的資源(如OSC,BATbackup,USB,SD卡,LCD,JTAG),因為你沒得選。
- 再安排選擇性比較小的資源,比如UART,SPI,I2C等
- 然後安排可以多選一的資源,比如ADC,DAC,PWM等
-
最後安排一般IO。
在配置設定2-4類型的可變IO資源的時候,要考慮你的PCB布局,以後PCB設計從那一邊出線,對應的功能引腳就安排到那一邊,以就近,順序的原則安排IO,友善和簡化PCB設計,同時能提供好的設計信号回路,保證系統穩定性。
在後期實際PCB設計過程中,我們根據走線的難易程度可以再次局部調整和重新配置設定信号IO,來達到最優的PCB布局和設計。
下圖是我們根據以上原則完成的IO配置設定設計圖:
下一章預告:原理圖設計第一步,如何設計一個最小系統?
原創文章,歡迎轉載,請注明來源,未經書面允許,請勿用于商業用途。