目 录CONTENT

文章目录

CLion+openocd+stm32cubemx基于HAL库搭建开发环境

成培培
2026-01-15 / 0 评论 / 0 点赞 / 10 阅读 / 0 字

最近巴西龟在冬眠,本来想买个水温计监测下水温,但是突然想到家里有DS18B20探头、stm32最小系统板、LCD1602A液晶屏,自己拼装一下写程序烧进去不就可以检测水温了吗?甚至可以加装一个ESP8266模块实时网络通知水温,低温报警都行,这不比买个水温计强?想到就干,太久没玩单片机了,也可以回忆记录一下

环境搭建

硬件准备

以下是我准备的硬件:

  1. STM32F103C6T6A最小系统板(好多人用c8t6,当初看它便宜够用买的,也差不多)
  2. ST LINK V2 编程器
  3. USB转串口模块(有编程器了,我好像用不到)
  4. DS18B20探头(温度检测,引出3线,单总线协议)
  5. LCD1602A液晶屏(显示实时温度的,占用IO口太多了,调通后考虑换个支持IIC协议的oled屏幕)
  6. ESP8266模块(串口WIFI模块,调通后考虑通过网络上传温度)

软件准备

我这里准备在macbook上搭建环境开发:

  1. CLion(作为一个Java开发,自然想到用jetbrains家的产品)
  2. STM32CubeMX(准备基于HAL库开发,曾经自学过标准库,忘光光了,还是生成代码香)
  3. ARM 交叉编译工具链 arm-none-eabi-gcc(没啥好说的,CLion 又不自带 ARM 编译器)
  4. OpenOCD(烧录 + 调试必需)

CLion和STM32CubeMX的安装没啥好说的,直接谷歌搜索下载安装包安装就好了,后面两个我这边直接brew命令安装就好了:

# 安装
brew install --cask gcc-arm-embedded
brew install openocd
# 检查是否成功
arm-none-eabi-gcc --version
openocd --version

起初我是安装arm-none-eabi-gcc,结果发现缺失arm-none-eabi-gdb,换成gcc-arm-embedded安装就好了
STM32CubeMX安装好后要记得安装STM32Cube MCU Package
STM32CubeMX 中:

  • Help → Manage embedded software packages
  • 下载你芯片对应的:
    • STM32F1xx / F4xx / G0xx 等 HAL 包

这是生成代码的基础

CLion配置

CLion → Settings → Build, Execution, Deployment → Toolchains
点击 + 选择System新增一个工具链,取名 STM32 (ARM GCC),配置这三个

  1. C Compiler: /arm-none-eabi-gcc
  2. C++ Compiler: /arm-none-eabi-g++
  3. Debugger: /arm-none-eabi-gdb

CLion → Settings → Build, Execution, Deployment → CMake
4. CMake: Bundled
5. Build Tool: Bundled Ninja

生成代码

打开Stm32cubeMX,选择ACCESS TO MCU SELECTOR从选择芯片创建一个项目,我这里是stm32c6t6a,直接搜索双击选择即可:
https://www.chengpei.top/upload/stm32cubemx_access_mcu.png
先设置一下时钟和调试debug,在RCC下设置高速时钟启用外部晶振,切换到Clock Configuration这个下面可以看到时钟树配置,简单点就是直接把HCLK输入72回车确认,它会自动识别使用外部晶振以及相关的倍频参数。
这里比较重要的是要记得切换到SYS配置下,将Debug设置为Serial Wire,我一开始没设置程序一烧录进去SWD就被锁死,后续就没发烧录了,只能按住reset烧录
https://www.chengpei.top/upload/stm32cubemx_rcc.png
时钟以及调试设置好后,就可以配置外设了,不过我这里想先测试一下,先生成一个测试程序,比如板子上的PC13这个IO口上接了led,可以设置GPIO口PC13推挽输出模式,直接点击右边的芯片图的PC13引脚,选择GPIO_Output,用它默认的配置就好。
最后切换到Project Manager,设置一下工程名称,工具链什么的
https://www.chengpei.top/upload/stm32cubemx_project.png

导入CLion

生成好的代码直接打开CLion,open这个工程,进入有报错不管它
https://www.chengpei.top/upload/clion_config.png
Run/Debug Configurations,添加一个配置OpenOCD Download & Run
https://www.chengpei.top/upload/clion_run.png
其中Board config file用于描述“某一块具体开发板”的 OpenOCD 配置脚本,它把 interface + target + 板级特性 组合在一起,相当于告诉OpenOCD「这块板子怎么连、怎么复位、怎么供电」
我这里是在项目根目录下创建了一个stlink.cfg文件:

# 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

因为我用的是stlink,开发板是stm32f1x系列,配置好后,连接开发板和st-link,把st-link插到电脑上(这里要注意一点就是st-link的3.3v尽量不要接,而是采用外部单独供电,否则可能供电不足运行不稳定的问题,只是点个灯的问题不大,不过能单独供电最好单独供电),直接点击Run就可以烧录程序到开发板了,可以看到控制台打印如下信息:
https://www.chengpei.top/upload/clion_result.png
就算是成功了,不过我这里还没改代码,现在我们去main.c文件里,修改如下代码:

/* USER CODE BEGIN WHILE */  
while (1)  
{  
  /* USER CODE END WHILE */  
  
 /* USER CODE BEGIN 3 */  
 HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);  
 HAL_Delay(500);  
}  
/* USER CODE END 3 */

每隔500毫秒把PC13口电平反转,重新编译烧录,现在开发板上的led开始不断闪烁了。

好了,下一次我准备基于这套环境开发一个实时温度检测上报的功能,可以参考下一篇博文:
基于stm32、ds18b62、ESP-01s的实时温度检测上报

0

评论区