起因

用CLion当然是因为Keil太难用啦(。・∀・)ノ

安装软件

你需要安装以下软件

  • clion
  • stm32cubemx
  • openocd
  • arm-none-eabi-gcc(需要配置环境变量)
  • mingw(我也不确定需不需要这个,装一个吧)

创建项目

创建Clion项目

以stm32f103zet6作为例子创建一个闪烁led的项目

选择这个来创建STM32项目,设置好路径后等待加载

点击这里的蓝色字来打开stm32cubemx完成进一步配置

使用stm32cubemx生成代码

点击这里切换你的芯片

切换标签后按照需要配置GPIO

下面是很关键的一步,配置debug

如果你使用SW连接到开发板,必须按照以下方式配置,否则无法下载程序

到达下一步修改项目设置

在另一个菜单中更改这里的设置

完成之后点击生成代码,选择yes覆盖原项目

openocd开发板配置

这部分其实我也不是很懂如何操作。。。。但是我的配置能用。。。

选择一个开发板预设并复制到项目中,我们将在这个预设的基础上进行修改

打开复制的开发板配置文件,进行以下修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# STM320518-EVAL: This is an STM32F0 eval board with a single STM32F051R8T6
# (64KB) chip.
# http://www.st.com/internet/evalboard/product/252994.jsp
#
# This is for using the onboard STLINK/V2

source [find interface/stlink.cfg]

transport select hla_swd

# 内存大小 这里我的是64kb,就是10000
set WORKAREASIZE 0x10000

# chip name 改为STM32F103ZET6
set CHIPNAME STM32F103ZET6

# 改为stm32f1x
source [find target/stm32f1x.cfg]
# 删掉这一行,否则无法复位开发板
# reset_config srst_only


在main的循环内加入我们的代码,在两条注释中间的代码如果重新使用stm32cubemx生成项目将会保留

1
2
3
4
5
6
7
8
9
10
11
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
HAL_Delay(200);
}
/* USER CODE END 3 */

链接stlink和开发板

亲测按照以下方式链接可以避免各种问题,接口示意图请自行百度

1
2
3
4
5
6
7
8
9
TVCC(1) --- STM32 3.3V ; 必须连接 ST-LINK根据此调整输出电平

SWIO(7)---- STM32 JTMS

SWCLK(9)---- STM32 JTCK

GND(20)-----STM32 GND

VDD(19) ----- 3.3V

这样的连线出问题的概率好像小一些(大概吧)

运行项目

使用stlink的sw模式连接到开发板,在clion中直接点击运行即可下载并运行项目

然后你会得到一个无情的错误

目前我不知道这个问题的解决方案,据我观察下面的方法可能有效

  • 复位
  • 先使用串口下载程序
  • 上电复位后过一段时间再尝试连接
  • 按照上面的方式连接开发板

其实这个问题我发现是有几率出现的,一般来说上电复位之后过一小段时间总是能用的

使用串口下载一遍程序就可以正常使用stlink下载了

如果更改了项目源代码使用同样的方式即可快速下载并运行项目

调试项目

这个时候如果你直接按下了debug,你会得到这个错误

1
Truncated register 16 in remote 'g' packet

这时候你需要修改工具链配置

  • 打开工具链设置,将默认的mingw复制一份
  • 将debugger改为arm-none-eabi-gcc的gdb
  • 将复制后的工具链配置移到顶部

完成之后应该是这样的(我的路径可能和你的不同)

然后就可以愉快的debug了