一、下载和安装 Keil
可参考:【嵌入式工具】Keil 下载,安装,配置教程大全 - CSDN 博客
二、导入 STM32L451CCUx 的 Pack
Pack 下载地址:MDK5 - STMicroelectronics STM32L451CCUx
导入方法参考:使用 keil 添加新的包详细教程_keil 怎么导入 pack 包 - CSDN 博客
三、导入 Pack 后创建 STM32L451CCUx 工程
在 Keil 中创建工程时,需要在Manage Run-Time Environment窗口中勾选:
CMSIS→CORE(提供 Cortex-M4 内核寄存器定义和中断向量支持)Device→STM32CubeMX(用于启动 CubeMX 生成初始化代码)
注意:Device下没有独立的Startup或HAL选项,因为 STM32L451CCUx 的 DFP(设备支持包)不再包含编译所需的源文件(如启动文件、系统初始化文件和 HAL 驱动源码)。DFP 现在主要负责调试和烧录相关的底层支持(如 FLM 烧录算法、SVD 调试描述文件等),而所有与代码编译相关的文件都需要通过 STM32CubeMX 生成并导入到 Keil 工程中。
这是因为 STM32L451CCU6 属于 STM32L4 系列,该系列官方不再提供标准外设库(SPL)。ST 从 L4、F7 等后续系列开始,全面转向以 HAL 库和 LL 库为核心的软件生态,而这些库必须通过 CubeMX 来配置和生成。因此,对于 L4 系列的工程,使用 CubeMX 已经不是可选项,而是标准工作流中的强制前提。
简单来说:DFP 负责“烧录”和“调试”,CubeMX 负责“生成代码”;两者配合才能完成一个完整的 L4 工程。
所以你需要再下载 STM32CubeMX:参考,STM32CubeMX 下载及安装教程 - CSDN 博客
四、CubeMX 工程配置
4.1 配置 RCC
- MCU 外部接入晶振
- CubeMX 需要使能 RCC
- RCC Mode and Configuration(复位与时钟控制的模式和配置)
- Mode:
- High Speed Clock (HSE):配置高速外部时钟,为芯片提供精确的主时钟
Crystal/Ceramic Resonator:板子上有无源晶振BYPASS Clock Source:板子上有有源晶振或外部时钟信号Disable:不使用外部高速时钟
- Low Speed Clock (LSE):配置低速外部时钟,常用于 RTC(实时时钟)的低功耗、高精度时钟源
Crystal/Ceramic Resonator:板子上有 32.768kHz 的无源晶振BYPASS Clock Source:板子上有有源晶振或外部时钟信号Disable:不使用外部低速时钟
- Master Clock Output:允许将一个高速内部时钟(如系统时钟 SYSCLK、HSE、PLL 等)通过专用引脚输出,供外部设备使用。可作为外部电路的时钟源或用于调试。
- LSCO Clock Output:允许将一个低速时钟(LSE 或 LSI)通过专用引脚(通常是 PA2)输出。常用于为低功耗外部设备提供时钟,或在低功耗模式下使用。
- CRS SYNC Source LSE:为 CRS(时钟恢复系统)选择同步信号源。用于 USB 等需要精确时钟的应用,可通过同步信号自动调整内部时钟。
- High Speed Clock (HSE):配置高速外部时钟,为芯片提供精确的主时钟
- Configuration
- Parameter Settings:
- VDD voltage (V):告诉芯片当前供电电压。这会影响 GPIO 输出高电平的幅值,以及 ADC 的参考电压。
- Instruction Cache:开启指令缓存,将常用代码缓存起来,减少等待时间。建议保持开启,否则代码执行会变慢。
- Prefetch Buffer:开启预取缓冲区,在 CPU 还没执行当前指令时,提前从 Flash 读取下一条指令。能显著提升性能,建议开启。
- Data Cache:开启数据缓存,加快变量读取。保持开启,但操作外设寄存器时芯片会自动绕过缓存,不用担心冲突。
- Flash Latency (WS):CPU 速度远快于 Flash,必须插入等待周期(WS)来匹配。0 WS 意味着 CPU 主频极低(通常 ≤ 16MHz)。
- HSI / MSI Calibration Value:内部时钟的微调值。用于修正内部振荡器因温度、电压变化产生的频率偏差。如果你不使用串口通信(或对波特率精度要求不高),保持默认即可;如果要跑 115200 这样的高波特率,建议使用外部晶振(HSE),因为内部时钟误差较大。
- MSI Auto Calibration:MSI 自动校准功能。如果启用,它会根据外部低速晶振(LSE)自动校准 MSI 频率,以获得更高精度。如果你没接 LSE(32.768kHz 晶振),保持 Disabled 即可。
- HSE Startup Timeout:高速外部晶振(HSE)的起振等待超时时间。如果你在上一页的
Mode里选了Crystal/Ceramic Resonator,但板子上没焊晶振,芯片会卡在这里等待 100ms 后才报错跳过。 - LSE Startup Timeout:低速外部晶振(LSE)的起振等待超时时间(5 秒)。这个时间一般留给高精度的 RTC(实时时钟)。如果你不用外部 32.768kHz 晶振,在上一页把 LSE 设为
Disable即可,这个值不用管。 - Power Regulator Voltage Scale:内核电压等级,影响性能强度
- User Constants:代码生成辅助工具,它的作用是在 CubeMX 图形界面里帮你提前定义好 C 语言中的宏(
#define) - NVIC Settings:嵌套向量中断控制器设置
- 复选框:全局使能开关
- Preemption Priority:抢占优先级
- Sub Priority:子优先级
- Parameter Settings:
- Mode:
4.2 GPIO 配置
- 原理图中涉及两个输出 POWER1_EN 和 POWER2_EN 以及一个输入 KEY1
- 配置选择
- POWERx_EN:当 POWER_EN 输出高电平(3.3V)时,电流经 R2 流入 Q1 基极使 NPN 三极管导通,其集电极被拉至 0V,进而通过 R3 将 P-MOS 管 U1 的栅极拉低,使其栅极电压 ≈ 0V 而源极接 VBAT1,产生约 -12V 的 Vgs 电压,满足导通条件,VBAT1 从源极流向漏极,后级负载获得供电;当 PA3 输出低电平(0V)时,Q1 基极无电流而截止,U1 栅极失去下拉路径,经 R3 被拉回至与源极相同的 VBAT1 电位,此时 Vgs ≈ 0V,P-MOS 不具备导通条件而关断,后级负载断电。
- GPIO output level:Low
- GPIO mode:Output Push Pull,推挽输出
- GPIO Pull-up/Pull-down:No pull-up and no pull-down
- Maximum output speed:Low
- KEY1:该按键电路为低电平有效检测方式,常态下由 MCU_VCC 经 10K 电阻 R1 将 KEY1 信号拉至高电平(3.3V),按键按下时 S1 将 KEY1 短接到 GND 使其变为低电平(0V),同时 C22(100nF)用作硬件消抖、D2(ESD5Z)提供 ESD 静电防护。
- Input mode
- No pull-up and no pull-down
- POWERx_EN:当 POWER_EN 输出高电平(3.3V)时,电流经 R2 流入 Q1 基极使 NPN 三极管导通,其集电极被拉至 0V,进而通过 R3 将 P-MOS 管 U1 的栅极拉低,使其栅极电压 ≈ 0V 而源极接 VBAT1,产生约 -12V 的 Vgs 电压,满足导通条件,VBAT1 从源极流向漏极,后级负载获得供电;当 PA3 输出低电平(0V)时,Q1 基极无电流而截止,U1 栅极失去下拉路径,经 R3 被拉回至与源极相同的 VBAT1 电位,此时 Vgs ≈ 0V,P-MOS 不具备导通条件而关断,后级负载断电。
4.3 串口配置和调试口配置
- 原理图中涉及了串口和调试端口,在 CubeMX 的图形化界面点击引脚选择对应的复用功能就配置完
4.4 时钟树配置
选择 HSE 输入,因为原理图接入了晶振,对外部时钟进行输入分频、倍频和输出分频接到各个外设总线上,设置为硬件支持的最高频率 80MHz
4.5 Project Manager
- Project 页面:
- Project Name:工程名称
- Project Location:工程的存放路径
- Application Structure:
- Basic(基础):所有源文件都在根目录,简单明了,适合小项目。
- Advanced(高级):按外设模块分文件夹(如
Src/、Inc/、Drivers/),更适合大型复杂项目。
- Toolchain / IDE:目标开发环境。选
MDK-ARM就意味着生成 Keil uVision 工程(.uvprojx文件)。如果你用 IAR 或 STM32CubeIDE,就在这切换。 - Minimum Heap Size:用于
malloc()、calloc()等动态内存分配。如果你不使用动态内存,保持默认即可;如果用到文件系统、USB 或网络协议栈,这个值通常要大幅调大(如0x1000)。 - Minimum Stack Size:用于存放局部变量、函数调用现场。如果程序出现莫名其妙的死机(HardFault),很可能就是栈溢出了。
- Mcu Reference:显示当前选择的芯片型号
- Firmware Package Name:使用的 HAL(硬件抽象层)库版本。只要代码能编译通过,不建议轻易更换,因为不同版本间可能存在 API 差异。
- Use latest available version:若勾选,每次生成代码时会自动联网下载最新的库
- Code Generator 界面:
- Copy all used libraries:将所有 HAL 库文件(很大)全部复制到你的工程里
- Copy only the necessary library files:仅复制你用到的外设驱动文件
- Add necessary library files as reference:不复制库,只在 Keil 工程中保留引用路径(指向 CubeMX 安装目录)
- Generate peripheral initialization as a pair of '.c/.h' files per peripheral:为每个外设单独生成
.c/.h文件(如gpio.c、i2c.c),而不是全部塞进main.c