02 ✨新建工程
CubeMX中新建工程 导入到MDK编辑
up的视频讲解: https://space.bilibili.com/1455872040
1 ✨在CubeMX中新建程序
- 1 点击左上角file,选择new project
tips
第一次建立程序确保网络连接好

- 2 在左上角输入芯片型号,点击F103C8T6

- 3 选择F103C8T6,点击右上角的Start Project

- 4 简单介绍下:
左边是我们选择配置芯片外设的区域,右边是配置了外设后芯片引脚对应的状态
MCU之所以叫微控制器,就是它内部集成了丰富的外设 去控制与各个设备的交互,很显然物理上是通过 芯片的引脚 去连接,这也是为什么会分成这两部分的原因.

2 🧭在CubeMX中配置
先跟着up操作, 基础课会详细从硬件到软件解释原理!
知识点
一款芯片的最小系统,通常包含以下:
- 电源
- 晶振
- 复位
- 下载
- 1 配置串行烧录接口(
SW),用于下载程序到STM32

- 2 配置时钟
RCC,选择外部石英晶体振荡器(简称 晶振)
(对点灯来说可以不用外部时钟,up这里是想让大家形成习惯,在以后的项目中都需要用到这个)

- 4 点击上方的Project Manager
- 输入工程名
- 选择IDE工具为
MDK

- 5 点击左侧Code Generator,
- 选择仅复制必要的库文件 (不然文件会很大)
- 选择为每个外设生成一对.c/.h文件 (不然都会放到main.c里)

- 5 点击右上方 GENERATOR CODE 生成代码然后打开项目,此时cube会打开之前选择的IDE工具

- 6 我们可以看到我们的MDK左侧就是 Cube生成的代码 ,简单介绍以下
- Application/MDK-ARM 启动文件
- Application/User/Core 用户代码(你写程序、main 函数、初始化都在这里)
- Drivers/STM32F1xx_HAL_Driver 外设驱动
- Drivers/CMSIS 内核代码

3 🐎导入到MDK编辑代码
- 1 打开main.c文件,往下翻找到
main函数
(main函数是所有程序的入口 换句话说 所有程序都是在这里面按顺序执行的)

- 2 我们分析一下整个main函数,它分为了两个区域
- 初始化区域 (程序从头开始执行一遍,进入循环后就一直在循环里了)
- 无限循环区域 (程序在这里面不断循环)

- 3 细心的同学一定观察到,代码里面生成了很多一行一行的注释
- CubeMX就是通过这样的方式去划分
用户代码区间和自动生成的代码区间 - 含有USER CODE就是给用户写代码的区间
- 其他的就是CubeMX管的区间 (写在这里面 生成代码的时候会被删掉)
- CubeMX就是通过这样的方式去划分

4 🔥在MDK中编译并烧录
- 1 选择编译器 点击左上方
魔法棒,在弹窗中点击 Target,在右侧选择 Version 6 编译器,点击OK

- 2 编译 点击左上角
的中间图标,没有errors则表示编译成功
- 左边图标: 仅编译当前打开的文件
- 中间图标: 编译被修改过的文件 (修改了少量代码时使用) 最常用
- 右边图标: 强制编译所有文件 (修改了系统配置时使用)

- 3 选择下载器 点击左上方
魔法棒,在弹窗中点击Debug,在左侧选择ST-Link

- 4 编译下载(烧录) 点击左上角下载图标

STLink
当此时STLink的蓝绿信号灯交替闪烁,就代表程序从电脑下载到了我们的微控值器(MCU)里面
✅生成代码后检查什么
先看main里的调用顺序:HAL_Init、SystemClock_Config、各MX外设初始化,然后才进入while。用户代码放USER CODE BEGIN/END之间;独立驱动文件还需加入工程和包含路径。
SYS Debug保留Serial Wire,板上8 MHz晶体对应RCC的Crystal/Ceramic Resonator,不能选成外部有源时钟的Bypass。BOOT0保持正常Flash启动设置。保存.ioc,它记录的是配置本身;只保留main.c不能完整重建工程。
练习:先生成一个无业务代码的工程,确认编译下载,再加入点灯代码。若空工程都无法运行,先解决工具链与时钟问题。