STM32MP157具有A7內(nèi)核核M4內(nèi)核,前面介紹的一些文章,都是在A7內(nèi)核上進(jìn)行的,本篇來(lái)介紹M4內(nèi)核的開發(fā),以及開發(fā)時(shí)要用到的STM32 CubeIDE軟件的使用。
1 STM32 CubeIDE創(chuàng)建LED工程
STM32CubeIDE是一體式多操作系統(tǒng)開發(fā)工具,是STM32Cube軟件生態(tài)系統(tǒng)的一部分。
下載地址:https://www.st.com/zh/development-tools/stm32cubeide.html#st-get-software
首先要先安裝STM32 CubeIDE,普通的exe安裝,這里不展開介紹。
1.1 新建工程
文件,新建,STM32工程
第一次會(huì)進(jìn)行一些文件的下載
等待下載完成后界面如下,有4個(gè)窗口切換標(biāo)簽:
- MCU/MPU Selector:MCU/MPU芯片選擇窗口Board Selector:ST官方的一些開發(fā)板選擇窗口Example Selector:示例程序選擇窗口,ST官方開發(fā)板的一些現(xiàn)有示例Corss Selector:交叉引用工具窗口,選擇對(duì)應(yīng)的CPU型號(hào),會(huì)彈出一個(gè)相同系統(tǒng)的CPU型號(hào)的資源對(duì)比界面
在搜索框輸入STM32MP157D后,右邊可以看到4個(gè)具體的型號(hào),其中STM32MP157DAC1中描述的是STM32MP157D-DK1開發(fā)板,那就選這個(gè):
點(diǎn)Next之后,設(shè)置工程的名稱,例如01_LED,可以勾選Use default location指定位置:
再Next之后,點(diǎn)擊Firmware Updater可修改固件包的位置:
點(diǎn)Finish之后,會(huì)彈出Open Associated Perspective的窗口,點(diǎn)Yes即可:
下載某些文件需要登錄ST賬號(hào),沒(méi)登錄可能會(huì)提示類似如下失敗的彈窗,可以先不管,后面再處理。
然后來(lái)到這個(gè)界面,又有4個(gè)可切換的窗口的標(biāo)簽:
- Pinout & Configuration:引腳配置窗口Clock & Configuration:時(shí)鐘配置窗口Project Manager:項(xiàng)目管理配置窗口Tool:相關(guān)工具配置窗口
剛才說(shuō)到,因?yàn)闆](méi)登錄ST的賬號(hào),有些文件沒(méi)下載成功。現(xiàn)在可以再來(lái)下載,點(diǎn)擊菜單Help中的Manage embedded software packsges,彈出如下窗口,找到STM32MP1,勾選Pachage,點(diǎn)擊安裝:
然后就會(huì)再次下載:
下載完成,關(guān)聯(lián)成功,就會(huì)變成綠色的方塊:
可以在下載位置查看下載的文件:
1.2 配置引腳
使用LED中的LD7進(jìn)行LED控制,根據(jù)文檔,對(duì)應(yīng)的是PH7引腳,高電平點(diǎn)亮:
搜索PH7引腳,設(shè)置為Output模式:
然后再右鍵,設(shè)置Pin Reserved,選擇Cortex-M4 FW。
點(diǎn)擊左邊的System Core,再點(diǎn)到GPIO,可以進(jìn)行GPIO配置,如上下拉、速率等:
然后,時(shí)鐘可以不用再配置,項(xiàng)目管理這里,注意勾選如下兩項(xiàng):
-
- Copy only the necessary library files,工程會(huì)從 STM32Cube MCU 軟件包中拷貝需要用到的 HAL 庫(kù)文件,
-
- 沒(méi)用到的不會(huì)拷貝Generate peripheral initialization as a pair of '.c/.h' files per peripheral ,表示讓每個(gè)外設(shè)生成獨(dú)立的'.c/.h'文件,如果此項(xiàng)不勾選,那么外設(shè)相關(guān)的初始化代碼將會(huì)生成在 man.c 中了
最后Ctrl+S保存,會(huì)提示要生成代碼,點(diǎn)Yes即可:
然后還會(huì)有一個(gè)彈窗,點(diǎn)Yes即可:
1.3 修改代碼并編譯
在main.cpp中,添加控制LED亮滅邏輯代碼:
HAL_GPIO_WritePin(LD7_GPIO_Port,LD7_Pin,GPIO_PIN_SET);
HAL_Delay(500);
HAL_GPIO_WritePin(LD7_GPIO_Port,LD7_Pin,GPIO_PIN_RESET);
HAL_Delay(500);
注意代碼添加的位置,要添加在成對(duì)出現(xiàn)的BEGIN和END的區(qū)域之間:
然后點(diǎn)擊“小錘子”圖標(biāo)進(jìn)行編譯,可以看到如上圖0錯(cuò)誤0警告。
2 燒錄程序測(cè)試
2.1 切換BOOT啟動(dòng)模式
開發(fā)板的BOOT配置BOOT0為OFF,BOOT1為ON,板子的ST-LINK接口連接板子到電腦。
2.2 配置ST-Link
菜單中Run中選擇Debug Configurations...
然后,雙擊STM32 Cortex-M C/C++ Application 就會(huì)自動(dòng)創(chuàng)建和打開名為HAL_LED_CM4 Debug 的配置項(xiàng):
切換到調(diào)試器窗口,選擇thru JTAG/SWD link:
然后點(diǎn)擊 Aply,Debug 開始調(diào)試。
第一次在 STM32CubeIDE 用 ST-Link 下載程序的話,系統(tǒng)會(huì)提示更新 ST-LINK 固件:
彈出的窗口中,選擇ST-LINK:
然后再重新插拔USB線,點(diǎn)擊Open in update mode,彈出如下界面:
點(diǎn)擊 Upgrade 更新 ST-Link 固件,等待更新完成即可
2.3 調(diào)試運(yùn)行程序
然后繼續(xù)在剛才的調(diào)試器窗口,點(diǎn)擊Debug 開始調(diào)試
全速運(yùn)行后,可以看到LD7的橘色燈會(huì)循環(huán)亮滅:
2.4 通過(guò)Linux系統(tǒng)運(yùn)行elf固件
將板子的BOOT開關(guān)切換到從SD卡啟動(dòng)Linux系統(tǒng),然后將STM32 CubeIDE編譯出的elf文件:
如01_LED_CM4.elf拷貝到開發(fā)板的/lib/firmware目錄中,添加可執(zhí)行權(quán)限,然后使用如下指令即可運(yùn)行M4內(nèi)核的程序:
#加載固件
echo 01_LED_CM4.elf >/sys/class/remoteproc/remoteproc0/firmware
#啟動(dòng)固件
echo start >/sys/class/remoteproc/remoteproc0/state
3 總結(jié)
本篇介紹了STM32MP157D-DK1開發(fā)板M核程序的開發(fā)流程,包括STM32CubeIDE創(chuàng)建工程,引腳配置與程序編寫,最終實(shí)現(xiàn)了基礎(chǔ)了LED亮滅實(shí)驗(yàn)。