关于HAL库
STM32的标准库其实已经停更仅支持早期系列(F0/F1/F2/F3/F4/L1)
但是因为标准库的影响够远,很多国产的芯片也接近标准库的风格去开发
对于新时代来说要开发stm32更加建议的是HAL库和LL库
HAL更加注重效率,开发更简单
而LL库更加接近底层寄存器开发,所以难度会大一点
我们这里介绍的是HAL开发
cubemx
STM32cubemx是STM32发布新的嵌入式开发工具
他主要是可以用图形化直接快速配置
快速生成代码工厂文件,不用像以前一样要慢慢的手动导入各种库
关于STM32cubemx下载:
安装
不能有中文路径!!!
不能有中文路径!!!
不能有中文路径!!!


选择安装路径然后一直下一步就可以了
安装芯片库
新版的cubemx不再要求登录ST账号了
但是如果你的cubemx还是没有网络的情况
建议去安装一下java看看有没有好转

有这个标志就是说明没网,没有就是正常

如果还是没网
请安装WebView2
[WebView2下载](Microsoft Edge WebView2 | Microsoft Edge Developer)
然后再使用火绒断网修复工具,或者360断网修复工具修复,一般是证书的问题
如果还是不行
或者我们切换到java自己的证书
我们打开软件的安装目录
打开STM32CubeMX.l4j.ini这个文件


把-Djavax.net.ssl.trustStoreType=WINDOWS-ROOT
改成-Djavax.net.ssl.trustStoreType=JKS
(如果还是不行,请参考这篇文章STM32HAL库修复断网)
我们点击help然后选择 Check for Updates
看看有没有环境要更新

我们点击help然后选择 Manage embedded software packages

选择要安装的芯片
离线安装
如果你没网,可以去下载离线包
左下角点From Local选择你的包去安装
新建工程

左上角点击File然后再选择New Project新建工厂

我们选择CommercialPart Number先搜索相应的芯片
然后选择芯片
然后点击右上角Start Project来创建芯片
配置工程


我们先来配置时钟
红色:代表着STM32的4种时钟
| 名称 | 中文 | 速度 | 来源 | 精度 | 主要用途 |
|---|---|---|---|---|---|
| HSE | 外部高速 | 几 MHz~几十 MHz | 外部晶振 | 高 | 系统主时钟、高精度外设 |
| HSI | 内部高速 | 8/16MHz | 内部 RC | 中 | 默认系统时钟、无晶振方案 |
| LSE | 外部低速 | 32.768kHz | 32768 晶振 | 很高 | RTC 精准计时 |
| LSI | 内部低速 | ~32kHz | 内部 RC | 低 | 看门狗、粗略计时 |
蓝色:代表着时钟不经过分频器和倍频系数直接作用
黄色:代表经过分频器

这个梯形一样的东西叫:系统时钟多路选择器
选着哪一路的时钟的信号
绿色:单片机实际运行时钟(F103c8t6最大频率是72Mhz)
如果页面是灰色的无法进行选中或者修改,说明时钟没有开启
开启时钟

我们点Pinout & Configuration
选择RCC
然后选择你要开启HSE还是LSE
这里我们选择开启HSE选择Crystal/Ceramic Resonator
| 选项 | 含义 | 适用场景 |
|---|---|---|
| Disable | 失能 | 禁用 |
| Crystal/Ceramic Resonator | 使用外接晶振 / 陶瓷谐振器 | 你板子上焊了晶振 / 陶瓷谐振器(比如 8MHz 晶振),STM32 内部的振荡电路配合它产生时钟信号 |
| BYPASS Clock Source | 旁路时钟源(外部有源晶振 / 时钟信号) | 你给 STM32 的 OSC_IN 引脚直接输入了一个现成的时钟信号(比如 50MHz 有源晶振输出),跳过了内部振荡电路 |
补充一点:
记得配置SYS,不然芯片只能烧录一次了,如果忘记了要用TTL重新烧录
| 选项 | 含义 | 适用场景 |
|---|---|---|
| No Debug | 禁用所有调试接口 | 生产环境,彻底关闭调试功能,释放调试引脚做普通IO,同时也能防止程序被读取 |
| Serial Wire | SWD 单线调试(2线:SWDIO + SWCLK) | 绝大多数开发场景,只需2根线,占用引脚少,是最常用的选项 |
| JTAG (4 pins) | JTAG 4线模式(TMS、TCK、TDI、TDO) | 需要兼容传统JTAG调试器,占用4个专用引脚 |
| JTAG (5 pins) | JTAG 5线模式(4线 + nRST) | 完整的JTAG接口,包含复位引脚,调试器可控制芯片复位 |
| Trace Asynchronous Sw | SWD + 异步跟踪(SWO) | 需要实时查看程序执行轨迹、输出调试信息,额外占用SWO引脚 |
然后回到:Clock Configuration


按照我的图片上配置就可以了
输出工程

不能有中文路径!!!
不能有中文路径!!!
不能有中文路径!!!
我们点击Project Manager
我们只需要修改项目名称还有项目路径
然后修改要输出的IDE (MDK-ARM一般就是KEIL)版本号一般默认就好
| 配置项 | 你的设置 | 说明 |
|---|---|---|
| Project Name | 配置初始化 | 工程名,建议改成英文 / 数字,避免中文和空格,防止编译报错 |
| Project Location | C:\Users\admin\Desktop | 工程路径,建议全英文路径,中文路径可能导致 Keil 编译失败 |
| Toolchain/IDE | MDK-ARM | 生成 Keil 工程,Min Version 选了 V5.32,适配 Keil5 |
| Minimum Heap Size | 0x200(512 字节) | 堆大小,用于动态内存分配,基础项目够用,用 malloc 建议加大 |
| Minimum Stack Size | 0x400(1024 字节) | 栈大小,用于局部变量和函数调用,基础项目够用,复杂项目可适当加大 |
| Firmware Package | STM32Cube FW_F1 V1.8.7 | F1 系列的 HAL 库版本,勾选了 Use latest available version,会自动用最新版库 |
我们再点击Project Manager

建议把这个勾上Backup previously generated files when re-generating
| 配置项 | 作用与说明 |
|---|---|
| STM32Cube MCU packages Copy all used libraries into the project folder |
把所有用到的 HAL 库文件复制到工程目录,推荐保留,这样工程可独立编译,不会依赖本地 CubeMX 库路径 |
| Peripheral initialization Generate peripheral initialization as a pair of .c/.h files |
每个外设的初始化代码生成独立的.c/.h文件,推荐保留,代码结构更清晰,方便管理 |
| Backup previous files | 重新生成代码时不备份旧文件,容易误删你写的代码,建议勾选 |
| Keep User Code when re-generating | 重新生成代码时,保留你写在/* USER CODE BEGIN /和/ USER CODE END */之间的代码,必须勾选,否则你的代码会被覆盖 |
| Delete previously generated files | 删除上一次生成的、本次不再使用的文件,避免工程残留垃圾文件,推荐保留 |
| HAL Settings | Set all free pins as analog可降低功耗,Enable Full Assert用于调试时的断言检查,开发阶段建议按需开启 |

最后点击右上角GENERATE CODE就可以生成工程

打开生成的工程


我们打开工程,在这里可以找到主函数
1 | 这里不会保存 |
在cubeMX生成的工程中,一定要将代码写在“BEGIN”和“END”中