摘要
在嵌入式領(lǐng)域中開發(fā)以ARM公司的Cortex M內(nèi)核為代表的單片機時程序員使用最多的IDE一定是Keil公司的MDK4 MDK5,而Keil已經(jīng)脫離現(xiàn)代智能IDE,近年來IAR逐步向現(xiàn)代智能IDE靠近但還不足,一些芯片原廠提供了基于eclipse改裝版IDE,這些工具在調(diào)試方面有優(yōu)勢,比如查看外設(shè)寄存器,內(nèi)核寄存器,反匯編,支持多種調(diào)試器燒錄固件,但在代碼提示,代碼跳轉(zhuǎn)、代碼重構(gòu)、查找調(diào)用代碼等等這些功能很匱乏,而Jetbrains公司的Clion是一款現(xiàn)代化跨平臺IDE,不僅能編寫傳統(tǒng)c/c++程序,還能配合插件開發(fā)單片機程序,解決了傳統(tǒng)嵌入式IDE的痛點。專業(yè)的嵌入式IDE是內(nèi)置燒錄調(diào)試工具,使用第三方IDE需要借助開源工具openocd,openocd有很多版本適配不同芯片能夠滿足使用。當前最熱門的單片機就是stm32,得益于資料公開,有第三方板卡商家,SDK代碼規(guī)范易讀,甚至還有初始化代碼生成工具CubeMX極大程度降低了嵌入式開發(fā)的門檻(有些國內(nèi)半導(dǎo)體廠家的資料是傳家寶見不得人),讓嵌入式程序員更加注重應(yīng)用。本文主要內(nèi)容是使用Clion+CubeMX+arm-gcc+openocd開發(fā)stm32環(huán)境,當然不僅僅是開發(fā)stm32,只要是能使用gcc系列編譯器編譯代碼,并配合編寫編寫的cmake腳本的都可以爆改適配,博主已經(jīng)適配過樂鑫的ESP32、沁恒微電子的CH32。
關(guān)鍵字: Clion、STM32、CubeMX
環(huán)境說明
- 操作系統(tǒng):win11
- 單片機:stm32f103rct6
- IDE:Clion2023
- 代碼生成器:STM32CubeMX 6.8.1
- 工具鏈:amr-gcc
- 固件燒錄軟件:openocd -20231002
- 調(diào)試器:ST-Linkv2
下載安裝clion
- 進入官網(wǎng)下載windos版,下載完成雙擊安裝
- 點擊下一步
- 選擇安裝路徑,安裝路徑不要有空格和中文
- 安裝選項,勾選如圖就行了,再點擊下一步
- 默認創(chuàng)建菜單文件夾,點擊安裝就開始安裝了
- 安裝完成選擇稍后重啟
下載arm-gcc
- 進入官網(wǎng)下載windos版arm交叉編譯器,選擇zip壓縮包鏈接,解壓后可以不用安裝直接使用。
- 進入解壓的bin文件夾,把這個路徑添加到系統(tǒng)環(huán)境變量PATH中。以win11為例 設(shè)置 -->系統(tǒng)–>高級系統(tǒng)設(shè)置–>環(huán)境變量–>系統(tǒng)變量–>在PATH中添加解壓后的bin文件夾路徑
- 在命令行中驗證添加成功沒有,wim+r,輸入cmd打開命令行,輸入 arm-none-eabi-gcc.exe -v(注意隔了一個空格),出現(xiàn)了版本號說明添加成功,沒有成功重啟電腦系統(tǒng)重新加載環(huán)境變量再驗證,還是沒有驗證成功查詢下如何添加系統(tǒng)環(huán)境變量。
下載配置openocd
- 進入第三方網(wǎng)站(博主在官網(wǎng)沒有找到已經(jīng)編譯好的程序只有源碼)下載解壓就行了,這個網(wǎng)站也提供arm-gcc下載。
- 安裝驅(qū)動,本文使用的ST-Link,安裝ST-Link驅(qū)動,雙擊bat腳本自動安裝驅(qū)動
- 使用J-link時,先安裝J-link驅(qū)動,再用UsbDriverTool軟件轉(zhuǎn)換USB驅(qū)動為libusb。
- openocd燒錄調(diào)試程序時需要配置文件,下文提供了配置文件示例。調(diào)試燒錄器配置項是通用的(為了演示提供的文件中設(shè)置了三種,選擇一個就行了)適用于很多芯片,選擇接口同理,文件命令后綴與上圖相同,名字隨意。
#設(shè)置使用的調(diào)試燒錄器為ST-Linkv
source [find interface/stlink.cfg]
#設(shè)置使用的調(diào)試燒錄器為J-link
source [find interface/jlink.cfg]
#設(shè)置使用的調(diào)試燒錄器為DAP-Link
source [find interface/cmsis-dap.cfg]
# 調(diào)試接口選擇swd,此類型是ST-Link專用的
transport select hla_swd
# 調(diào)試接口選擇swd,此類型是J-link,DAP-Link通用
transport select swd
#設(shè)置目標芯片,選擇stm32f1x,如果是f4系列的換成f4就行了其他系列以此類推
source [find target/stm32f1x.cfg]
編輯完成文件保存到openocd的文件夾,方便在clion中選擇配置文件
下載安裝STM23Cubemx
- 進入官網(wǎng),向下滑動頁面,找到如圖windos版欄,選擇6.8.1版本,下載安裝包需要登錄st賬號沒有賬號可以使用郵箱注冊一個,注冊以后ST時不時會往郵箱發(fā)一些新聞類郵件(可能是為了推廣產(chǎn)品),所以選擇一個不常用的但能收到郵件的郵箱就行了,博主測試高版本安裝后發(fā)現(xiàn)有bug且需要登錄賬號才能下載開發(fā)包,下載后是一個壓縮包,解壓后直接雙擊安裝。
- 點擊下一步
- 同意下一步
- 同意下一步
- 選擇安裝路徑,并下一步,安裝路徑不要有空格和中文
- 沒有文件夾需要創(chuàng)建,點擊確認
- 選擇開始菜單文件,按需修改,點擊下一步開始安裝
- 安裝完成,下一步
- 完成安裝
- 啟動CubeMX安裝開發(fā)包(也可以不安裝后續(xù)新建工程選擇芯片自動下載)
- 選擇對應(yīng)芯片型號點擊install安裝,安裝完成地點擊clsoe退出
新建demo工程
使用CubeMX生成初始化代碼
- 輸入芯片名稱選好型號,開始新建工程
- 配置外部時鐘
- 配置調(diào)試器接口
- 配置GPIO點燈,引腳編號根據(jù)實際的板卡來,直接在右下側(cè)配置IO為輸出
- 配置外部時鐘,注意使用的外部時鐘頻率與板卡匹配
- 工程配置,注意IDE選擇STM32CubeIDE,Clion能轉(zhuǎn)換這個工程為cmake工程
- 生成代碼以源文件加頭文件方式(方便模塊化代碼編寫),再點擊生成代碼,彈框選擇打開文件夾
使用Clion寫代碼和燒錄固件
創(chuàng)建一個嵌入式如門經(jīng)典demo工程點燈
- 右鍵菜單選擇使用clion作為工程打開
- 第一次使用clion打開選擇不發(fā)送
- 信任項目
有插件且已經(jīng)配置過一次情況
- 選擇openocd配置文件(沒有彈窗可能是插件沒有設(shè)置,后文再說明),沒有圖中的配置見上文提到的添加配置文件,由于博主是已經(jīng)搭建過一次環(huán)境有一些配置和插件是以前的,還有登錄賬號會自動同步設(shè)置和插件。順便提一下clion是一個收費軟件,第一次使用會讓登錄賬號激活,或者填入激活碼,這部分移步其他地方查詢方法,又能力的可以直接購買正版年費,想白嫖可以搞一個校園郵箱注冊賬號免費使用。
- 在while循環(huán)添加以下代碼每隔500毫秒閃爍LED
while (1)
{
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_8);
HAL_Delay(500);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
- 有圖中的圖標說明已經(jīng)安裝了插件(新版已經(jīng)默認綁定安裝了),沒有則看下文安裝插件,點擊錘子構(gòu)建,右側(cè)三角就是燒錄,蟲子是調(diào)試,調(diào)試注意打斷點
沒有插件情況
- 安裝插件
- 第一步選擇左側(cè)的插件市場,為了演示本文選擇已經(jīng)安裝選項(已經(jīng)安裝過的插件在插件市場搜不到)
- 安裝完成進行插件設(shè)置,選擇openocd存放路徑,Cubemx安裝路徑,右側(cè)有可以測試軟件是否可用,完成點擊OK退出
- 添加工程構(gòu)建運行配置,添加完成后就有了上文提到的功能,就可以coding了
- 板卡配置文件見上文,點擊右側(cè)幫助會自動彈出選擇窗口,點擊確認配置完成
調(diào)試
調(diào)試功能同keil相比稍遜色些,但仍然可以斷點調(diào)試、查看寄存器、反匯編、查看內(nèi)存、變量值文章來源:http://www.zghlxwxcb.cn/news/detail-856914.html
printf重定向
- 在clion中打開CubeMX工程文件,添加打印串口生成代碼,關(guān)閉CubeMX回到Clion中
- 由于printf函數(shù)很耗時(庫的原因)所以使用寄存器代碼,在Core/Src/usart.c文件中添加以下代碼
/* USER CODE BEGIN 1 */
int __io_putchar(int ch)
{
while ((USART1->SR & 0X40) == 0) // 等待上一次發(fā)送完
;
USART1->DR = (uint8_t)ch; //串口發(fā)送字符
return 1;
}
/* USER CODE END 1 */
- 在Core/Src/usart.h文件中添加以下代碼
/* USER CODE BEGIN Includes */
#include <stdio.h>
/* USER CODE END Includes */
- 在Core/Src/main.c中添加以下代碼,IO翻轉(zhuǎn)根據(jù)實際情況填寫參數(shù),注意printf打印是帶有緩沖的遇見換行才會打印輸出
/* USER CODE BEGIN WHILE */
char str[] = "demo\n";
while (1)
{
for (int i = 0; i < 5; ++i)
{
printf("%d", i);
}
printf("%s", str);
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_8);
HAL_Delay(500);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
斷點調(diào)試調(diào)試
- 打好斷點,點擊小蟲子開始調(diào)試,在變量欄中右擊顯示內(nèi)核寄存器值
- 調(diào)試菜單
- 在內(nèi)存中查看變量值
查看外設(shè)寄存器值
- 查看外設(shè)寄存器,直接加載keil包中svd,svd文件在keil的Packs文件夾下,選擇對應(yīng)芯片的svd就行了
- 就能看見熟悉的寄存器了
- 以查看IO輸出數(shù)據(jù)為例(ODR)
寫在后面
如果本文對你有幫助不要吝嗇你的點贊、收藏、評論、關(guān)注,你的支持將是我繼續(xù)輸出優(yōu)質(zhì)文章的動力,也歡迎嗮出你的博客一起進步文章來源地址http://www.zghlxwxcb.cn/news/detail-856914.html
到了這里,關(guān)于使用clion配合STM32CubeMX開發(fā)stm32(包含斷點調(diào)試,查看寄存器值,printf重定向)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!