单片机学习笔记整理与示例讲解
一、环境搭建
1. Keil 软件(MDK-ARM)
- 卸载:进入 Keil 安装目录(如
C:\Keil_v5
),运行Uninstall.exe
,选择需要移除的工具链(如 ARM 开发工具),点击Remove
。 - 安装:
- 从
01_Realview MDK
文件夹中运行MDK536.EXE
,按提示安装; - 安装芯片支持包(如
Keil.STM32U5xx DFP.2.1.0.pack
); - 使用
keygen.zip
中的破解工具激活(参考keygen使用说明.docx
)。
- 从
2. STM32CubeMX
- 安装:
- 先安装 Java 环境(
jre-8u271-windows-x64.zip
); - 运行
ST SetupSTM32CubeMX-6.8.1-Win.exe
,按向导完成安装; - 安装 STM32U5 系列软件包(
stm32cube_fw_u5_v120.zip
)。
- 先安装 Java 环境(
二、STM32U575RIT6 开发板套件
核心组件
- 核心板:含 STM32U575RIT6 芯片、SWD 调试接口、电源指示灯、复位按键等。
- 底板:扩展 WiFi 模组、独立按键、蜂鸣器(引脚 PA15)、RTC 纽扣电池等。
- 资源拓展板:含温湿度传感器、LED(如 LD1)、485/CAN 总线接口等。
三、引脚查找案例(以 LD1 为例)
目标:找到控制拓展板 LD1 的芯片引脚
- 硬件连接链:资源拓展板 → 底板 → 核心板 → STM32U575RIT6 芯片。
- 查找步骤:
- 拓展板 LD1 对应
LED1
引脚,连接到拓展板接插件 J1 的 4 号引脚; - 底板接插件 J6 的 4 号引脚与拓展板 J1 的 4 号引脚相连;
- 底板 J6 的 4 号引脚通过底板 J2 的 15 号引脚连接到核心板 J3 的 15 号引脚;
- 核心板 J3 的 15 号引脚对应芯片
PC4
引脚(芯片第 24 号引脚)。
- 拓展板 LD1 对应
- 结论:
LD1 → LED1 → PC4
(需通过原理图逐层验证硬件连接)。
四、芯片手册与寄存器分析
1. RCC 寄存器(时钟控制)
- 功能:控制外设时钟使能,需先使能 GPIO 端口时钟才能操作引脚。
- PC4 引脚对应的时钟配置:
- 需使能
GPIOC
端口时钟; - 对应寄存器
RCC_AHB2ENR
的Bit2(GPIOCEN)
:置 1 时使能 GPIOC 时钟,置 0 时关闭。
- 需使能
2. GPIO 寄存器(引脚控制)
- 初始化结构体:
GPIO_InitTypeDef
包含引脚编号(Pin
)、模式(Mode
,如输出推挽GPIO_MODE_OUTPUT_PP
)、上下拉(Pull
)、速度(Speed
)。 - 直接操作寄存器:
BSRR
:高 16 位清 0 对应引脚,低 16 位置 1 对应引脚(如GPIOC->BSRR = (1<<4)
置位 PC4,GPIOC->BSRR = (1<<20)
清零 PC4);BRR
:低 16 位专门用于清 0 对应引脚(如GPIOC->BRR = (1<<4)
清零 PC4)。
五、STM32CubeMX 工程创建与配置
流程示例(以控制 PC4 输出为例)
- 安装软件包:打开 CubeMX,进入
Manage embedded software packages
,安装STM32Cube FW U5 V1.2.0
。 - 选择 MCU:
New Project → Access to MCU Selector
,搜索STM32U575RIT6
并选择。 - 配置引脚:
- 在
Pinout
视图中找到PC4
,右键配置为GPIO_Output
(绿色表示配置并使能成功)。
- 在
- 时钟配置:
- 在
Clock Configuration
中,设置系统时钟(SYSCLK
)为最高 160MHz(通过 PLL 倍频实现)。
- 在
- 生成代码:
Project Manager
中设置工程名(如BSP_01_GPIO
)、路径(无中文),工具链选择MDK-ARM
;- 点击
GENERATE CODE
,若提示 “ICACHE 未使能”,选择Yes
继续。
六、Keil 工程与 HAL 库函数
1. 工程结构
- 启动文件:
startup_stm32u575xx.s
(初始化芯片内核); - 用户代码:
main.c
(主函数)、gpio.c
(GPIO 初始化); - HAL 库:
Drivers/STM32U5xx_HAL_Driver
(硬件抽象层函数)。
2. 核心 HAL 库函数(GPIO 操作)
函数名 | 功能 | 参数示例 | 示例用法 |
---|---|---|---|
HAL_GPIO_WritePin |
输出高低电平 | GPIOC, GPIO_PIN_4, GPIO_PIN_SET |
点亮 LED:HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4, 1); |
HAL_GPIO_ReadPin |
读取引脚电平 | GPIOC, GPIO_PIN_4 |
读状态:uint8_t state = HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_4); |
HAL_GPIO_TogglePin |
翻转引脚电平 | GPIOC, GPIO_PIN_4 |
闪烁 LED:HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_4); |
3. 示例代码(LED 闪烁)
c
运行
// main.c中USER CODE块内
int main(void) {
// 初始化HAL库
HAL_Init();
// 初始化系统时钟(CubeMX生成)
SystemClock_Config();
// 初始化GPIO(PC4为输出,CubeMX生成)
MX_GPIO_Init();
while (1) {
// LED亮(PC4输出高电平)
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4, GPIO_PIN_SET);
HAL_Delay(1000); // 延时1秒
// LED灭(PC4输出低电平)
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4, GPIO_PIN_RESET);
HAL_Delay(1000);
}
}
七、程序烧录
- 配置 Debug:
- Keil 中打开工程,点击
Options for Target
→Debug
,选择ST-Link Debugger
,点击Settings
; - 确认
SW Device
识别到芯片(如0x0BE12477
),在Flash Download
中勾选 “Program” 和 “Verify”。
- Keil 中打开工程,点击
- 烧录:点击
Load
按钮,烧录成功会显示 “Programming Done” 和 “Verify OK”。
八、任务实践(按键控制外设)
需求:按键按下一次,外设(如 LED)工作;再按一次,外设停止(循环切换)
实现思路:
- 硬件连接:按键接
PA0
(输入模式,上拉),LED 接PC4
(输出)。 - 代码逻辑:
- 用
HAL_GPIO_ReadPin
读取按键状态(按下时为低电平); - 用变量
state
记录外设状态(0:停止,1:工作); - 按键按下时切换
state
,并通过HAL_GPIO_WritePin
控制 LED。
- 用
c
运行
// main.c中
uint8_t state = 0; // 0:LED灭,1:LED亮
uint8_t key_prev = 1; // 记录上一次按键状态(初始高电平)
while (1) {
uint8_t key_curr = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0); // 读按键
// 按键按下(下降沿触发)
if (key_prev == 1 && key_curr == 0) {
state = !state; // 切换状态
HAL_Delay(20); // 消抖
}
key_prev = key_curr; // 更新上一次状态
// 控制LED
if (state == 1) {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4, GPIO_PIN_SET); // 亮
} else {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4, GPIO_PIN_RESET); // 灭
}
}
总结
本文整理了单片机学习的核心知识点,包括环境搭建、硬件分析、寄存器操作、工程配置、库函数使用及实践案例。重点需掌握:
- 引脚查找的 “硬件连接链” 分析方法;
- 寄存器(如 RCC、GPIO)与 HAL 库函数的对应关系;
- 工程创建与代码编写的规范(如 USER CODE 块、无中文路径)。
通过实际案例(LED 闪烁、按键控制)可加深对知识点的理解,建议结合开发板动手调试。
编辑分享
总结一下寄存器分析的具体步骤
提供一些在学习过程中加深对知识点理解的建议
讲解一下如何使用HAL库函数进行工程创建