Clion配置stm32嵌入式开发环境

简介:

最近一段时间一直在学习Linux平台下的嵌入式stm32开发环境的搭建,现在终于搭建完毕,基本满足了自己的开发需求,就顺便写下自己的一点心得。

最开始做嵌入式开发是在win平台下,后来因为学习需要转到了deepin(一个linux的发行版)平台,但是总不能一直两个系统切换吧,况且Keil嵌入式开发软件,虽然强大,但是语法补全功能实在做的捉急,各种嫌弃。作为一个IDE党,于是转投Clion,想使用Clion进行嵌入式开发。

Clion的优势:

1. 编译,连接自动化辅助工具Cmake很大程度上解决了,嵌入式开发环境复杂的编译链接过程

2. 强大的语法智能补全、debug  功能  (2017版本刚好又已经有了嵌入式所需要的 remote debug)

开发环境:

平台:deepin 

工具链 :  arm-none-eabi

IDE :  Clion

调试器驱动:开源 openocd (适用于多种调试器jlink、stlink。这里我用的是stlink调试器)

辅助工具:expect, telnet     (这两个软件可以直接在软件仓库下载 `sudo apt-get install xxxx` )

配置模板:


cmake配置:

cmake有一部分宏定义是需要在IDE -> setting -> build...->cmake 里面进行配置的,作为全局变量在cmake编译过程中生效,这里我会一一进行详细说明。


CMake宏定义设置

这里主要设置了两个宏定义供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命令地址,还有一些是硬件相关的参数。

两个宏定义的路径是基于自己的文件路径定义的,不要盲目搬砖!!

oolchain-arm-eabi-gcc.cmake  文件的内容将下面内容保存,我将它放在了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 是整个项目的编译配置文件,包含了编译、连接参数的配置以及输出编译文件的路径, 默认是在 工程目录下的build文件夹下。

cmakeList的具体配置我就不多说了,具体看文件内部的注释。

gdb相关配置:

openocd相当于建立了一个gdb-server。clion使用arm-noen-eabi-gdb的进行调试的时候需要进行先关的设置


设置第一步

进入run/debug configuration界面以后 点击左上角的 `+`号,里面选择remote gdb debugger 选项,然后按照如下进行配置。

openocd的默认tcp 调试端口是3333。

symbol file的路径是 project/build/xxx.elf     看你项目的名字了     xxx 由项目根目录下CMakeList 文件中的项目名字决定。


debugger配置参数

还需要对gdb初始化文件进行配置,初始化配置文件 `.gdbinit`可以在两个地方

1. gdb程序的绝对地址所在的目录下

2. ~/.gdbinit

一般我们选择第二种方式,如果没有在 ~路径下创建。

~/.gdbinit 内容如下

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的相关配置:

我们使用openocd其实是为了将它作为一个gdb-server传递指令,我们在Clion中要新建一个相关的工具,开启gdb-server服务。

新建tool工具栏选项

配置具体如下:

注意 下方倒数第三个栏目 program栏目中程序的路径是根据自己程序存放的地址来定义的。

第二行参数是与调试器相关的我的是stlink v2所以使用的是这个参数。jlink的参数可以到官网查询,也可以在网上直接搜到很简单我就不说了。


openocd stlink-v2的具体配置


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


项目的编译:

项目的debug:

上张图中 step1:切换到remote debug栏目,切换后然后直接按下按钮右边debug按钮即可。


debug截图


美中不足的是不能查看对应的汇编寄存器变量,不过对我来说是够了。


参考文章:

使用CLion做嵌入式开发  这篇文章少了.gdbinit的配置这个很重要 缺少后会一直报错

STM32高级开发(11)-使用GDB调试你的工程  gdb调试命令解释的很详细

windows下使用CLion+OpenOCD+expect做嵌入式开发(在CLion中编译、烧录、调试stm32) win平台下的clion参考 

github stlink 开源的stlink驱动 这个的作用和openocd一样 都是gdb-server 看它的readme很有用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容

  • 简介 实现了在CLion中编译、烧录、调试stm32。主要参考了 在Mac下使用CLion做嵌入式开发和CLion...
    fightfa阅读 14,279评论 5 18
  • 移植 下面我们就来看下一个内容叫做移植的基本步骤,也就是说我们要现有一个大体的思路,如果说我作为产品开发者,或者说...
    随波逐流007阅读 1,005评论 0 1
  • 又想起了过去,想起了那最开心的日子,不觉间离开高中近3个月了,在这段时间里,没有老师的谆谆教诲,没有起早贪黑的...
    smile其实很简单阅读 167评论 0 0
  • 大家好,我是你们的导游!你们可能会想:“我们要去哪里?”不要吃惊!我们要去未来世界,看看未来的新科技! ...
    666小周阅读 206评论 0 0
  • 逃离城市的喧闹 在宁静的小镇中 亲身体验乡村的质朴气息 感受蔚蓝的天空带来的无限想象 清晨 伴随着出升的太阳 人们...
    cc夏亦丿初扬阅读 244评论 0 1