觀眾們應該都知道，我喜歡用Arduino Nano
或Arduino Pro Mini在我的作品中
因為他們的核心ATmage328P具備多種功能
可用Arduino IDE來對其進行編程
我也有很多關於如何使用他們的影片教學
我很推薦使用這些開發板
但有時候仍會發現使用上的限制
也許是10bit解析度的類比數位轉換器
5V電壓每階相差的4.9mV並不夠精確
或者是62.6kHz.6kHz下的最高8-bit PWM 的速度不夠快
或是你的作品中需要超過2個腳位的外部中斷
這是為什麼我要在這支影片介紹這塊開發板
又稱為Blue Pill
其核心為STM32F103C8T6 32-bit的ARM微控制器
從中國進口只需要2美元
更棒的是可以使用Arduino IDE來對其編程
讓我們用點時間來看看這塊板子與傳統Arduino Nano/Pro Mini相比有什麼優缺點
讓我們開始吧!
這個影片由JLPCB贊助播出
只要上傳你的檔案
便能幫您用非常便宜的價格做出高品質的PCB板
現在還有免運
可應用於您的作品或產品
我們要寫在板子上寫些程式
先將其接到5V電源
拿出USB轉串列轉接板
因為STM32工作在2~3.6V，所以轉接板選擇3.3V之後
將GND接到GND，Tx接到A10，Rx接到A9
將轉接器接到電腦上
開啟Arduino IDE
將這串網址貼到附加開發板管理員
並用開發板管理員安裝STM32F1xx的函式庫
我能想到的第一個簡單的程式作為範例
也就是LED閃爍
目前為止唯一與傳統Arduino程式不同的地方只有腳位名稱
腳位名稱都印刷在開發板上
在LED焊接上限流電阻並接該腳位與GND後
把BOOT0跳帽改到1的位置
為了可以上傳程式碼，選擇適當的燒錄設置
可以看到我們的程式成功地執行了
但請注意微控制器的重置按鈕會使程式被清除
避免這種事情發生，在重置或者重新上電之前，需要將BOOT0跳帽接回0的位置
接著用digitalRead與Serial.printIn測試序列傳輸
和我們熟悉的使用方法相同
上傳程式之後，我們將該腳位接觸5V或GND
打開序列監控視窗可看到程式正確運作中
但請稍等一下，即使這是3.3V的系統，我卻可接到5V電壓
這是因為有些腳位是可以接到5V的，但有些則不行
順帶一提，這個腳位圖對於開發很有幫助
總而言之，這個板子不只和Arduino一樣有內建上拉電阻，
另一個很棒的功能是他也具備下拉電阻
除了數位輸入，讓我們嘗試更複雜的功能
像是PWM
不同的是，這是我們宣告有PWM功能的腳位，使用pwmWrite函式
analogWrite函式還是可以使用，但和Arduino 一樣，他只提供8-bit的解析度
pwmWrite函式則有16-bit的解析度
從0~255階提高到0~65536階
這變得方便許多
如果你想知道我從哪裡得到這些資訊
可以進一步到LeafLabs Documentation Index網站上查看
這裡有幾乎所有的Blue Pill功能介紹
還有詳細且易於理解的解釋
我們再深入一點
上傳程式並將板子接到示波器
我們可以查看PWM訊號
不幸的是，他的頻率只有549Hz
問題出在於Timer1
對應腳位是由Timer1來輸出PWM訊號的
為了將Prescaler改成1
並加速該腳位的PWM訊號
我用到LeafLabs文件中提到的一行指令
上傳程式
就能看到這個PWM訊號的頻率提高了
還有個問題是，Timer暫存器會計數到65535
時脈頻率為72MHz下會花費大約1秒鐘
將72MHz除以65535
得到1098Hz的頻率
正是剛剛測量到的數值
解決方法是把這個16-bit Timer，也就是溢位值設成8-bit
並調整這個pwmWrite參數
上傳之後，就能得到與Arduino相同的8-bit PWM訊號
但是運作在281kHz的頻率下
把Timer調到極限，甚至可以得到36MHz的PWM訊號
說到Timer，我們來談談Timer中斷
不得不說，透過LeafLabs的文件
相比傳統Arduino，我可以更容易實作1 sec的比較中斷
 
你只需要注意是否有其他的pwm也使用到這個Timer，一般來說他都能正常執行
接下來，讓我們把其中一個類比輸入腳位接上可變電阻
並將轉換後的數值印到序列監控視窗
同樣地，與傳統Arduino只有腳位的不同而已
上傳後就能透過可變電阻得到0~4095之間的數值
這代表其具有12-bit的解析度
所以是每階0.8mV的電位差
傳統Arduino的10-bit解析度則是3.2mV的電位差
最後，我們來試試外部中斷
同樣參考LeafLabs的文件，就能簡單地實作出來
你可能會好奇為什麼使用PA1，嗯...沒有為什麼
因為所有腳位都支援外部中斷
這個表總共紀錄15個外部中斷腳位
反之Arduino只有2個外部中斷
而Arduino所有I/O腳位都有pin change中斷，但他們都不夠快且不易使用
上傳程式到STM32之後
可以看到中斷副程式也能正確執行
讓我們做個總結
Blue Pill提供更多記憶體，更多腳位
更多PWM腳位、Timer
更多ADC、外部中斷、以及各種通訊協定
且具備更高速度以及解析度
實作上甚至比傳統Arduino更容易
而且變數的記憶體空間可到64bit
唯一的缺點是並非所有函式庫都可以相容
但你參考Arduino for STM32的論壇的內容
因此，對我來說這個開發板是在測試元件時絕佳的替代品
希望你喜歡這個影片，別忘了按讚、分享，並訂閱我的頻道
保持你的創造力，我們下次見!
