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


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

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

我们点击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”中