最近巴西龟在冬眠,本来想买个水温计监测下水温,但是突然想到家里有DS18B20探头、stm32最小系统板、LCD1602A液晶屏,自己拼装一下写程序烧进去不就可以检测水温了吗?甚至可以加装一个ESP8266模块实时网络通知水温,低温报警都行,这不比买个水温计强?想到就干,太久没玩单片机了,也可以回忆记录一下
环境搭建
硬件准备
以下是我准备的硬件:
- STM32F103C6T6A最小系统板(好多人用c8t6,当初看它便宜够用买的,也差不多)
- ST LINK V2 编程器
- USB转串口模块(有编程器了,我好像用不到)
- DS18B20探头(温度检测,引出3线,单总线协议)
- LCD1602A液晶屏(显示实时温度的,占用IO口太多了,调通后考虑换个支持IIC协议的oled屏幕)
- ESP8266模块(串口WIFI模块,调通后考虑通过网络上传温度)
软件准备
我这里准备在macbook上搭建环境开发:
- CLion(作为一个Java开发,自然想到用jetbrains家的产品)
- STM32CubeMX(准备基于HAL库开发,曾经自学过标准库,忘光光了,还是生成代码香)
- ARM 交叉编译工具链 arm-none-eabi-gcc(没啥好说的,CLion 又不自带 ARM 编译器)
- 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),配置这三个
- C Compiler: /arm-none-eabi-gcc
- C++ Compiler: /arm-none-eabi-g++
- 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,直接搜索双击选择即可:

先设置一下时钟和调试debug,在RCC下设置高速时钟启用外部晶振,切换到Clock Configuration这个下面可以看到时钟树配置,简单点就是直接把HCLK输入72回车确认,它会自动识别使用外部晶振以及相关的倍频参数。
这里比较重要的是要记得切换到SYS配置下,将Debug设置为Serial Wire,我一开始没设置程序一烧录进去SWD就被锁死,后续就没发烧录了,只能按住reset烧录

时钟以及调试设置好后,就可以配置外设了,不过我这里想先测试一下,先生成一个测试程序,比如板子上的PC13这个IO口上接了led,可以设置GPIO口PC13推挽输出模式,直接点击右边的芯片图的PC13引脚,选择GPIO_Output,用它默认的配置就好。
最后切换到Project Manager,设置一下工程名称,工具链什么的

导入CLion
生成好的代码直接打开CLion,open这个工程,进入有报错不管它

Run/Debug Configurations,添加一个配置OpenOCD Download & Run

其中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就可以烧录程序到开发板了,可以看到控制台打印如下信息:

就算是成功了,不过我这里还没改代码,现在我们去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的实时温度检测上报
评论区