使用clion搭建stm32开发环境

相信多数人在开发STM32的时候用的都是Keil这个老牌IDE,但keil的界面比较复古,代码补全等功能也不是十分完善,也存在的一定的版权问题,keil不是每个人都能负担高额的授权费用;但clion就没有这么多的顾虑了,优雅的界面,强大的自动补全,丰富的第三方插件支持,低廉的授权费用,极短的编译时间等等都让人很难拒绝。接下来,本文将以 STM32F103C8T6为例,简明扼要的讲解如何使用clion搭建stm32开发环境。

1.准备工作

  • clion
  • STM32CubeMX
  • MinGW
  • OpenOCD
  • arm-none-eabi-gcc
  • STM32F103C8T6最小系统板
  • ST-Link下载器

2.clion安装

clion直接去jet的网站下载就好,激活可以用教育邮箱,这里附上下载链接:https://www.jetbrains.com.cn/en-us/clion/download/#section=windows

3.STM32CubeMX安装

这个也直接去意法半导体的网站下载就好,安装过程也十分简单,这里也附上官网的下载链接:https://www.st.com/en/development-tools/stm32cubemx.html

4.OpenOCD安装

OpenOCD是用于对STM32进行下载仿真的工具,是一个开源软件包,下载好解压到一个目录,并把bin目录添加到环境变量。这里附上 OpenOCD 的下载链接:https://openocd.org/pages/getting-openocd.html

5.MinGW64安装

Clion需要使用MinGW64环境来配置工具链,所以需要安装 MinGW64,安装完成后,与OpenOCD一样,需要把bin目录添加到系统环境变量,这里附上MinGW64的官网下载链接:https://www.mingw-w64.org/downloads/#mingw-builds

6.arm-none-eabi-gcc安装

下载之后解压到文件夹,然后把bin目录添加到系统环境变量即可,这里附上下载链接:https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads

7.clion配置

1.在设置-构建、执行、部署-工具链选项卡中添加MinGW环境,路径指向MinGW安装文件夹。

2.在设置-构建、执行、部署-嵌入式开发中配置 STM32CubeMX 与 OpenOCD 的路径,分别指向\STM32CubeMX.exe与\bin\openocd.exe。

8.STM32工程的创建

在Clion中选择文件-新建项目选项卡可以创建STM32CubeMX的项目,新建了一个ioc文件后,点击通过STM32CubeMX打开,默认选中的芯片型号是STM32F030F4Px,我们可以点击上方该芯片型号来更换,另外需要注意项目名称与clion工程的文件夹名称相同,IDE选择SW4STM32,最后生成代码即可。

9.烧录程序与在线调试

点击编译按钮旁边的配置栏下拉,选编辑配置,打开配置窗口,设置面板配置文件,这里以STM32F103C8T6与st-link为例提供一种配置文件的写法

# choose st-link/j-link/dap-link etc.
#adapter driver cmsis-dap
#transport select swd
source [find interface/stlink.cfg]
transport select hla_swd
source [find target/stm32f1x.cfg]
# download speed = 10MHz
adapter speed 10000

这里说明一下,前两行设置了仿真器的类型和接口,下面几行指定了Flash大小、芯片类型、下载速度等。如果对自己的芯片不知道怎么设置,可以参考OpenOCD自带的一系列配置文件,路径在OpenOCD安装目录的share\openocd\scripts下,重点是以下目录:

  • board:板卡配置,各种官方板卡
  • interface:仿真器类型配置,比如ST-Link、CMSIS-DAP等都在里面
  • target:芯片类型配置,STM32F1xx、STM32L0XX等等都在里面

另外,在配置文件中不要加reset_config srst_only这一句,会导致下载失败,这一句是指示系统重启的,删除不影响下载。

如果下载时出现Warn : UNEXPECTED idcode: 0x2ba01477的警告,原因是开发板用的芯片不是stm32f103c8,而是一个中国国产仿制版本 CS32F103C8T6(没错,我就买到假芯片了),去除该警告的方法是修改 OpenOCD安装目录\share\openocd\scripts\target\stm32f1x.cfg文件,在swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID后添加-expected-id 0x2ba01477即可。

10.添加include与编译目录

CLion中组织编译规则都是基于CMakeLists.txt文件的,不用过于了解其具体语法,只需要知道怎么在这个文件里面添加源码目录和include文件夹的路径就行了,但需要注意,修改该文件后,当使用STM32CubeMX重新生成代码时,修改会重置,配合git版本控制对其进行回退较为省时省力,下面对 CMakeLists.txt 文件的修改 举个例子:

include_directories(
     ......
// 其他include目录
)


file(GLOB_RECURSE SOURCES
        "Core/*.*"
// *.*表示通配符,也就是这个文件夹里的所有文件都会被编译
        )

11.printf重定向问题

在Keil里面为了使用printf函数我们需要重定向fputc函数:

int fputc (int ch, FILE *f)
{
    (void)HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000);
    return ch;
}

其中的FILE定义在stdio.h头文件中,所以需要在项目中包含这个头文件,但是,Keil里面包含的是MDK\ARM\ARMCC\include这个目录下的stdio.h,而在Clion中是不会链接到这个文件的。因此如果在Clion中也按这种方法进行重定向,会发现printf没有任何输出。所以我们需要直接修改CMakeList.txt,加入下述编译选项就可以使用printf函数:

set(COMMON_FLAGS "-specs=nosys.specs -specs=nano.specs -u _printf_float -u _scanf_float")

或者可以参照st官方给的例程,在main.c的Private function prototypes里添加如下代码

#ifdef __GNUC__
/* With GCC, small printf (option LD Linker->Libraries->Small printf
   set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */

在USER CODE BEGIN 0里添加如下代码

PUTCHAR_PROTOTYPE
{
    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
    return ch;
}

最后,不要忘记把STM32Cube_FW_F1_V1.6.0\Projects\STM3210C_EVAL\Examples\UART\UART_Printf\syscalls.c 文件复制到src目录,该库文件的路径可以在cubemx主页help-Updater Settings里查看与修改。

© 版权声明
THE END
喜欢就支持以下吧
点赞11 分享
相关推荐