Clion配置stm32嵌入式開發(fā)環(huán)境

簡介:

最近一段時間一直在學(xué)習(xí)Linux平臺下的嵌入式stm32開發(fā)環(huán)境的搭建,現(xiàn)在終于搭建完畢,基本滿足了自己的開發(fā)需求,就順便寫下自己的一點心得。

最開始做嵌入式開發(fā)是在win平臺下,后來因為學(xué)習(xí)需要轉(zhuǎn)到了deepin(一個linux的發(fā)行版)平臺,但是總不能一直兩個系統(tǒng)切換吧,況且Keil嵌入式開發(fā)軟件,雖然強大,但是語法補全功能實在做的捉急,各種嫌棄。作為一個IDE黨,于是轉(zhuǎn)投Clion,想使用Clion進行嵌入式開發(fā)。

Clion的優(yōu)勢:

1. 編譯,連接自動化輔助工具Cmake很大程度上解決了,嵌入式開發(fā)環(huán)境復(fù)雜的編譯鏈接過程

2. 強大的語法智能補全、debug ?功能 ?(2017版本剛好又已經(jīng)有了嵌入式所需要的 remote debug)

開發(fā)環(huán)境:

平臺:deepin?

工具鏈 : ?arm-none-eabi

IDE : ?Clion

調(diào)試器驅(qū)動:開源 openocd (適用于多種調(diào)試器jlink、stlink。這里我用的是stlink調(diào)試器)

輔助工具:expect, telnet ? ? (這兩個軟件可以直接在軟件倉庫下載 `sudo apt-get install xxxx` )

配置模板:


cmake配置:

cmake有一部分宏定義是需要在IDE -> setting -> build...->cmake 里面進行配置的,作為全局變量在cmake編譯過程中生效,這里我會一一進行詳細說明。


CMake宏定義設(shè)置

這里主要設(shè)置了兩個宏定義供CMake編譯的時候使用:

-DTOOLCHAIN_DIR=/home/sunqi/program/gcc-arm-none-eabi-5_4-2016q3

-DCMAKE_TOOLCHAIN_FILE=/home/sunqi/Desktop/mcu_proj/conf/t

第一個宏定義是自己arm-none-eabi編譯工具鏈的path

第二個宏定義是cmake自己的處理文件,基于第一個宏定義,找出所需要的編譯時用到的gcc,ld命令地址,還有一些是硬件相關(guān)的參數(shù)。

兩個宏定義的路徑是基于自己的文件路徑定義的,不要盲目搬磚!!

oolchain-arm-eabi-gcc.cmake ?文件的內(nèi)容將下面內(nèi)容保存,我將它放在了project根目錄下

include(CMakeForceCompiler)

set(CMAKE_SYSTEM_NAME Generic)

set(CMAKE_SYSTEM_PROCESSOR cortex-m3)

find_program(ARM_CC arm-none-eabi-gcc ${TOOLCHAIN_DIR}/bin)

find_program(ARM_CXX arm-none-eabi-g++ ${TOOLCHAIN_DIR}/bin)

find_program(ARM_OBJCOPY arm-none-eabi-objcopy ${TOOLCHAIN_DIR}/bin)

find_program(ARM_SIZE_TOOL arm-none-eabi-size ${TOOLCHAIN_DIR}/bin)

CMAKE_FORCE_C_COMPILER(${ARM_CC} GNU)

CMAKE_FORCE_CXX_COMPILER(${ARM_CXX} GNU)

set(CMAKE_ARM_FLAGS

"-mcpu=cortex-m3 -mthumb -fno-common -ffunction-sections -fdata-sections"

)

if(CMAKE_SYSTEM_PROCESSOR STREQUAL"cortex-m3")

set(CMAKE_C_FLAGS"${CMAKE_C_FLAGS} ${CMAKE_ARM_FLAGS}")

set(CMAKE_CXX_FLAGS"${CMAKE_CXX_FLAGS} ${CMAKE_ARM_FLAGS}")

set(CMAKE_EXE_LINKER_FLAGS"${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_ARM_FLAGS}")

else()

message(WARNING

"Processor not recognised in toolchain file,"

"compiler flags not configured."

)

endif()

# fix long strings (CMake appends semicolons)

string(REGEX REPLACE";" " "CMAKE_C_FLAGS"${CMAKE_C_FLAGS}")

set(CMAKE_C_FLAGS"${CMAKE_C_FLAGS}"CACHE STRING"")

set(BUILD_SHARED_LIBS OFF)

Clion項目根目錄下還有一個CMakeList 是整個項目的編譯配置文件,包含了編譯、連接參數(shù)的配置以及輸出編譯文件的路徑, 默認是在 工程目錄下的build文件夾下。

cmakeList的具體配置我就不多說了,具體看文件內(nèi)部的注釋。

gdb相關(guān)配置:

openocd相當(dāng)于建立了一個gdb-server。clion使用arm-noen-eabi-gdb的進行調(diào)試的時候需要進行先關(guān)的設(shè)置


設(shè)置第一步

進入run/debug configuration界面以后 點擊左上角的 `+`號,里面選擇remote gdb debugger 選項,然后按照如下進行配置。

openocd的默認tcp 調(diào)試端口是3333。

symbol file的路徑是 project/build/xxx.elf ? ? 看你項目的名字了 ? ? xxx 由項目根目錄下CMakeList 文件中的項目名字決定。


debugger配置參數(shù)

還需要對gdb初始化文件進行配置,初始化配置文件 `.gdbinit`可以在兩個地方

1. gdb程序的絕對地址所在的目錄下

2. ~/.gdbinit

一般我們選擇第二種方式,如果沒有在 ~路徑下創(chuàng)建。

~/.gdbinit 內(nèi)容如下

add-auto-load-safe-path ~/.gdbinit

define target hookpost-remote

#file "~/CLionProjects/mcu/build/mcu.elf"

monitor reset

monitor halt

load

break main

end


openocd的相關(guān)配置:

我們使用openocd其實是為了將它作為一個gdb-server傳遞指令,我們在Clion中要新建一個相關(guān)的工具,開啟gdb-server服務(wù)。

新建tool工具欄選項

配置具體如下:

注意 下方倒數(shù)第三個欄目 program欄目中程序的路徑是根據(jù)自己程序存放的地址來定義的。

第二行參數(shù)是與調(diào)試器相關(guān)的我的是stlink v2所以使用的是這個參數(shù)。jlink的參數(shù)可以到官網(wǎng)查詢,也可以在網(wǎng)上直接搜到很簡單我就不說了。


openocd stlink-v2的具體配置


整個工程的模板我放在了我的github


項目的編譯:

項目的debug:

上張圖中 step1:切換到remote debug欄目,切換后然后直接按下按鈕右邊debug按鈕即可。


debug截圖


美中不足的是不能查看對應(yīng)的匯編寄存器變量,不過對我來說是夠了。


參考文章:

使用CLion做嵌入式開發(fā)? 這篇文章少了.gdbinit的配置這個很重要 缺少后會一直報錯

STM32高級開發(fā)(11)-使用GDB調(diào)試你的工程? gdb調(diào)試命令解釋的很詳細

windows下使用CLion+OpenOCD+expect做嵌入式開發(fā)(在CLion中編譯、燒錄、調(diào)試stm32)?win平臺下的clion參考?

github stlink?開源的stlink驅(qū)動 這個的作用和openocd一樣 都是gdb-server 看它的readme很有用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 簡介 實現(xiàn)了在CLion中編譯、燒錄、調(diào)試stm32。主要參考了 在Mac下使用CLion做嵌入式開發(fā)和CLion...
    fightfa閱讀 14,658評論 5 18
  • 移植 下面我們就來看下一個內(nèi)容叫做移植的基本步驟,也就是說我們要現(xiàn)有一個大體的思路,如果說我作為產(chǎn)品開發(fā)者,或者說...
    隨波逐流007閱讀 1,173評論 0 1
  • 又想起了過去,想起了那最開心的日子,不覺間離開高中近3個月了,在這段時間里,沒有老師的諄諄教誨,沒有起早貪黑的...
    smile其實很簡單閱讀 190評論 0 0
  • 大家好,我是你們的導(dǎo)游!你們可能會想:“我們要去哪里?”不要吃驚!我們要去未來世界,看看未來的新科技! ...
    666小周閱讀 222評論 0 0
  • 逃離城市的喧鬧 在寧靜的小鎮(zhèn)中 親身體驗鄉(xiāng)村的質(zhì)樸氣息 感受蔚藍的天空帶來的無限想象 清晨 伴隨著出升的太陽 人們...
    cc夏亦丿初揚閱讀 262評論 0 1