Clion配置stm32嵌入式开发环境

作者: 5353f429a042 | 来源:发表于2017-09-18 21:18 被阅读757次

    简介:

    最近一段时间一直在学习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很有用

    相关文章

      网友评论

      本文标题:Clion配置stm32嵌入式开发环境

      本文链接:https://www.haomeiwen.com/subject/stobsxtx.html