使用模板在STM32 Blue Pill上啟動(dòng)“Blinky”項(xiàng)目
在第一篇文章中,我們從頭開(kāi)始構(gòu)建了一個(gè)干凈的、完全可控的Zephyr RTOS開(kāi)發(fā)環(huán)境?,F(xiàn)在是時(shí)候讓它發(fā)揮作用了。
在本指南中,我們將使用我們的新環(huán)境來(lái)構(gòu)建和閃光一個(gè)項(xiàng)目到一個(gè)真正的微控制器-流行的STM32F103C8T6“Blue Pill”。
為此,我們將使用一個(gè)最小的、生產(chǎn)就緒的模板,該模板預(yù)先配置為Visual Studio Code中的無(wú)縫體驗(yàn),并解決了開(kāi)箱即用的常見(jiàn)硬件問(wèn)題。
1. 你需要什么
在我們開(kāi)始之前,請(qǐng)確保一切都準(zhǔn)備好了。硬件很簡(jiǎn)單,如果您按照我們的第一個(gè)指南進(jìn)行操作,軟件應(yīng)該已經(jīng)配置好了。
硬件:
?STM32F103C8T6“Blue Pill”板
?ST-Link V2程序員
?連接線(跳線)
軟件:
?一個(gè)完整配置的Zephyr RTOS環(huán)境(Python, Git, West, SDK等)。
?Visual Studio Code與推薦的擴(kuò)展(包括C/ c++, CMake工具,和任務(wù)管理器)。
剛剛開(kāi)始?如果你還沒(méi)有準(zhǔn)備好你的開(kāi)發(fā)環(huán)境,請(qǐng)先按照我的詳細(xì)指南:Manual Zephyr RTOS Installation on Windows。此項(xiàng)目模板假定您的環(huán)境已經(jīng)準(zhǔn)備就緒。
2. 快速入門(mén):從零到閃爍
重要:確保您的Zephyr環(huán)境已激活!zephyr-env運(yùn)行。CMD -你的終端應(yīng)該在提示符下顯示(.venv)。
2.1. 獲取項(xiàng)目模板
將存儲(chǔ)庫(kù)克隆到本地機(jī)器并在Visual Studio Code中打開(kāi)它:
2.2. 連接硬件
通過(guò)SWD接口連接ST-Link至Blue Pill:
?Swdio→Swdio
?SWCLK→SWCLK
?GND→GND
?3.3v→3.3v
然后將ST-Link插入電腦的USB接口。
2.3. 構(gòu)建項(xiàng)目
我們將使用VS Code任務(wù)來(lái)簡(jiǎn)化工作流。你有兩個(gè)選擇:
選項(xiàng)A:命令面板
?按Ctrl+Shift+B或進(jìn)入“Terminal→Run Task…”
?從下拉菜單中選擇Build
選項(xiàng)B:任務(wù)瀏覽器(推薦)
?打開(kāi)任務(wù)資源管理器面板(側(cè)欄)
?單擊Build任務(wù)旁邊的play按鈕
?等待構(gòu)建完成。您應(yīng)該在終端中看到構(gòu)建成功。
2.4. 閃光板
使用相同的方法運(yùn)行Flash (64k)任務(wù)。
運(yùn)行Flash (128k)。
注意:如果閃爍失敗無(wú)效的閃存大小錯(cuò)誤,您的芯片可能有64KB的閃存。使用Flash (64k)任務(wù)代替。
2.5. 慶祝!
PC13上的LED現(xiàn)在應(yīng)該每秒閃爍一次。您剛剛運(yùn)行了第一個(gè)Zephyr應(yīng)用程序!
3. 引擎蓋下:是什么讓這個(gè)模板聰明
3.1. 硬件配置(bluepill_f103c8.overlay)
覆蓋文件告訴Zephyr我們的電路板是如何連接的:
主要特點(diǎn):
?配置為ACTIVE_LOW的LED(當(dāng)引腳為L(zhǎng)OW時(shí)亮)
?禁用JTAG,啟用SWD進(jìn)行調(diào)試
?引腳PA15, PB3, PB4現(xiàn)在可用于您的應(yīng)用
3.2. 項(xiàng)目配置(Project .conf)
這條單線使OpenOCD能夠在閃爍期間自動(dòng)停止和重置微控制器-不再手動(dòng)按reset按鈕!
3.3. 應(yīng)用程式碼(src/main.c)
讓我們看看實(shí)際的閃爍代碼:
這里發(fā)生了什么:
1. 我們使用my-led別名從設(shè)備樹(shù)中獲取LED配置
2. 檢查GPIO端口是否準(zhǔn)備好
3. 配置引腳作為輸出
4. 在無(wú)限循環(huán)中每秒切換LED
注意,我們從來(lái)沒(méi)有硬編碼pin -所有的東西都來(lái)自設(shè)備樹(shù)。這使得代碼可移植和可維護(hù)。
3.4. VS Code工作流
任務(wù)。json:定義Build、Flash和Clean腳本。它還包括一個(gè)Flash (128k)任務(wù),因?yàn)橐恍〤8T6主板秘密包含一個(gè)128kb閃存的芯片。如果標(biāo)準(zhǔn)閃存失敗,這個(gè)替代任務(wù)通常可以解決問(wèn)題。
c_cpp_properties。這個(gè)文件配置IntelliSense(代碼完成)。它指向一個(gè)compile_commands。Zephyr的構(gòu)建系統(tǒng)自動(dòng)生成的json文件。重要:您必須至少運(yùn)行一次構(gòu)建任務(wù),以使代碼完成工作完美!
4. 常見(jiàn)問(wèn)題處理
?“AP寫(xiě)入錯(cuò)誤,復(fù)位不會(huì)停止”
發(fā)生時(shí):構(gòu)建干凈或項(xiàng)目克隆后的第一次flash。這只能發(fā)生一次,在下次刪除構(gòu)建文件夾之前。
原因:OpenOCD不能停止正在運(yùn)行的微控制器。
解決方案:
1. 按住藍(lán)色藥丸上的RESET按鈕
2. 在VS Code中運(yùn)行Flash任務(wù)
3. 當(dāng)出現(xiàn)“正在下載…”消息時(shí),釋放RESET
預(yù)防:確保在prj.conf(已經(jīng)包含)中設(shè)置了CONFIG_DEBUG=y。
?“Flash寫(xiě)入失敗” / “Flash大小無(wú)效”
原因:你的芯片有64KB的閃存,而不是128KB。
解決方案:使用Flash (64k)任務(wù)代替Flash (128k)。
?“west: command not found”
原因:西風(fēng)環(huán)境未激活。
解決方法:運(yùn)行zephyr-env。cmd (Windows)或源環(huán)境腳本。
您的提示符應(yīng)該顯示(.venv)。
本文編譯自hackster.io