iT邦幫忙

2021 iThome 鐵人賽

DAY 2
4

第二天我來說一下如何做1塊屬於自己的開發板,分享我在做STM32的開發板經驗,我不會說我的做法是最好,但做起來是有功能的也能正常燒錄,原理圖我會開源也會說我用了哪些IC。

首先做一塊屬於自己的開發板要先來規劃自己需要哪些零件,最少需要哪些東西才可以正常燒錄。

1. 供電,(沒有供電一切都別想了)

2. Reset電路,(燒入完後需要復位,預設是上拉3.3V)

3. 時鐘電路,(1個固定頻率的震盪給MCU,當然不給也可以那就是用MCU內部震盪)

4. BOOT啟動模式,(上電後的啟動模式,有三種)

5. 燒錄電路,(SWDIO、SWCLK)

有了上述這些,基本上就能正常燒錄了,下面會針對上面這5點做細部介紹
也會講解我的開發板原理圖,針對STM32F030CC這顆MCU,跟STM32F103的開法板很類似。

在學嵌入式單晶片STM32有個東西一定要會看!(很重要),看不懂就去google翻譯,或去google搜尋那單字
1.Datasheet(資料手冊) 2.Reference manual(參考手冊)
在後面我也會擷取手冊上的一部分來說明如何看這些手冊,不會全講只會講幾個比較重要的地方。

1.供電

STM32系列的MCU每顆的工作電壓範圍都不太一樣,大多都可在3.3V的工作電壓,而有些I/O口可以耐壓到5V,有些只能耐壓到3.3V這在Datasheet裡面有表示,下圖是stm32f030的Datasheet裡的截圖:

https://ithelp.ithome.com.tw/upload/images/20210915/20141979xH5Azyh950.png

可以看到上面有表示縮寫的意思,例如FT代表可以耐壓5V,TC只能耐壓到3.3V
在Datasheet往下滑一頁就是引腳定義說明了,如下圖:
https://ithelp.ithome.com.tw/upload/images/20210915/20141979iFNt16BRJB.png

可以看到我紅色框起來的部分,我目前使用的stm32f030cc是48pin的MCU,所以我要它的引腳定義只需要看這欄對應往右的資訊,可以看到右半部有很多腳位的縮寫,還有描述腳位擁有的功能。

再來看看這顆MCU的腳位圖,從數據手冊裡可以電源供應腳有這些
https://ithelp.ithome.com.tw/upload/images/20210915/20141979uwPFnBe3e2.png
紅色框框:VDD 藍色框框:GND

這裡可以看到還有額外的VDDA跟VSSA,這兩個代表是類比電壓跟類比接地,主要用供給內部ADC的參考電壓
在意類比電壓乾不乾淨,可以在3.3V後接個濾波電路後再接入VDDA,我目前是接簡單RC的濾波
下圖是我的開發板原理圖的MCU供電部分:
https://ithelp.ithome.com.tw/upload/images/20210915/20141979wQLfy1iukN.png

我講解一下我的原理圖規劃,可以看我紅框的部分,我是用較常見micro USB作為5V供電,經過一顆降壓IC型號是AMS1117-3.3,降壓到3.3V供給MCU,至於應用電路去看Datasheet都有提供電路,AMS1117-3.3這顆LDO在很多電子零件行應該都會有,Arduino降壓3.3也是用這顆!


2.Reset電路

https://ithelp.ithome.com.tw/upload/images/20210915/201419790stKh920S7.png

資料手冊裡有提到,這復位腳RST內部上拉3.3V,這樣代表我需要先拉低電位在拉高電位就可以復位整顆MCU
我的原理圖如下
https://ithelp.ithome.com.tw/upload/images/20210915/20141979eBCcl60kH7.png
會有個按紐並聯電容是為了要消除按鍵機械上的彈跳。
簡單來說是做個小延時來度過前面的抖動狀態,想深入了解的話可以去查看基本電學裡的RC充放電,電阻R就像水管,C就像水桶,電流就像水,水桶越大就需要更多時間去放滿水,所以電容越大延時就越長,電阻越大則代表水管很細也會加長裝滿水的時間,這比喻不難理解吧。


3.時鐘電路

https://ithelp.ithome.com.tw/upload/images/20210915/20141979uoAtwHFlw8.png

這顆MCU可以接兩個外部時鐘可以掛載,一個低速時鐘另一個則是高速時鐘,都不掛也可以,就是吃MCU內部的震盪器,MCU要有震盪才會工作,就跟人類心臟需要發送血液給各個器官才能正常工作,(這解釋不知道恰不恰當,哈哈)
低速石因:最常見的功能是作為實時時鐘來算精準的計時1秒鐘,經過計算最準的頻率是32.768kHz。
高速石英:預設是接8MHz。
這兩個外部接石因震盪都有設一定範圍,不是想接多少就可以隨便接,這部分相關資料在Datasheet手冊裡的時鐘樹有提到:
https://ithelp.ithome.com.tw/upload/images/20210915/20141979rnAr1Roswd.png
可以看到上圖紅框部分,是這MCU的高速和低速的外部時鐘接口,外接高速能配置到4到32MHz這範圍外都會造成MCU工作不正常或不能燒入,但預設都是8M,假如接16M就需要在軟體上做除頻來修改。
在看籃框部分,內部也有高速跟低速時鐘所以不接時因也是可以的,但內部的低速是40kHz,假如要精準地跑1秒的延時32.768k是最精準的,原因是可以看到內部時鐘樹裡低速震盪電路主要是用在2個功能,1.watchdog(看門狗)2.Real-time clock(實時時鐘),至於這兩個的作用是屬於比較進階的部分,簡單說明1.看門口主要功能是檢測程式運行時有沒有異常的執行時間,有的話可以讓MCU自動重製。2.實時時鐘則是計數時間32.768kHz為計數1秒最精準的頻率。


4.BOOT啟動模式

https://ithelp.ithome.com.tw/upload/images/20210915/201419797yecgHkpMI.png
可以到STM32F030這顆的BOOT腳在Pin44

模式的話在Reference manual(參考手冊),有表示以下這三種:
https://ithelp.ithome.com.tw/upload/images/20210915/20141979keBdFt9WmV.png
這邊的話只需要看BOOT0就好了,這邊選擇拉低用Flash memory來做上電後讀取的所燒錄程式的記憶體
原理圖接法:
https://ithelp.ithome.com.tw/upload/images/20210915/20141979wHmCt4Nf1D.png


5.燒錄電路,(SWDIO、SWCLK)

最後燒錄腳,主要燒錄腳兩隻SWCLK(Pin37)跟SWDIO(Pin34),有這兩隻還有燒錄器的GND要跟MCU共地就可燒錄了:
https://ithelp.ithome.com.tw/upload/images/20210915/20141979EScREH1cvK.png
看到上圖,我把燒錄腳、GND、3.3V引出來用就可用燒入器來做燒入了,至於燒錄器一般電子零件行都有賣
可以去零件行找ST-Link燒錄器,通常1百多塊而已


最後貼上我完整的原理圖、PCB圖、實體圖
https://ithelp.ithome.com.tw/upload/images/20210915/20141979268i65hyna.png
https://ithelp.ithome.com.tw/upload/images/20210915/201419794iPy2xWFxw.png
https://ithelp.ithome.com.tw/upload/images/20210925/20141979pvsl3bq72x.jpg

相信有看完上面的內容就知道為什麼我前面說想學嵌入式一定要會看Datasheet(資料手冊)和Reference manual(參考手冊)了,只要你懂怎麼看,不管換哪顆MCU你都會很快上手,移植也不會困難,像韌體撰寫,或暫存器的位置查找,和各個暫存器的功能配置在Datasheet裡面都寫的清清楚楚~。

明天預計講這塊PCB Layout的規劃順便講解一下如何用安裝Keil5環境來撰寫韌體,我使用的是標準庫,其實ST官方有出STM32CubeIDE,只要點一點配製一些所需要開啟的功能,就會產生HAL庫程式,這樣就能快速開發相關程式,但我覺的這樣有好有壞,好處是可以很快開發驗證出你想要的功能,但你會不好了解他到底幫你配置了那些暫存器功能,除非你你很有好學心,1個1個打開函式去看。
簡單說一下標準庫跟HAL庫的差別,HAL庫有點像是標準庫的加強版本,比標準庫更精簡,但以效率來講標準庫會好一些,功能函式較多。
由於我一開始學的就是標準庫,也用習慣了,我就只說明標準庫的東西。

以上就是我剛接觸嵌入所學的知識分享,假如漏甚麼或少東西或想了解甚麼相關知識,可以在下面提出來我懂的話會盡力回答。
/images/emoticon/emoticon37.gif


上一篇
[DAY 1] _ ARM-M0架構MCU之韌體開發教學規劃
下一篇
[DAY 3] _ 開發板規劃補充(stm32f030)
系列文
基於ARM-M0架構MCU之落摔檢測韌體開發35
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言