单片机学习笔记

单片机学习笔记整理与示例讲解

一、环境搭建

1. Keil 软件(MDK-ARM)

  • 卸载 :进入 Keil 安装目录(如C:\Keil_v5),运行Uninstall.exe,选择需要移除的工具链(如 ARM 开发工具),点击Remove
  • 安装
    1. 01_Realview MDK文件夹中运行MDK536.EXE,按提示安装;
    2. 安装芯片支持包(如Keil.STM32U5xx DFP.2.1.0.pack);
    3. 使用keygen.zip中的破解工具激活(参考keygen使用说明.docx)。

2. STM32CubeMX

  • 安装
    1. 先安装 Java 环境(jre-8u271-windows-x64.zip);
    2. 运行ST SetupSTM32CubeMX-6.8.1-Win.exe,按向导完成安装;
    3. 安装 STM32U5 系列软件包(stm32cube_fw_u5_v120.zip)。

二、STM32U575RIT6 开发板套件

核心组件

  • 核心板:含 STM32U575RIT6 芯片、SWD 调试接口、电源指示灯、复位按键等。
  • 底板:扩展 WiFi 模组、独立按键、蜂鸣器(引脚 PA15)、RTC 纽扣电池等。
  • 资源拓展板:含温湿度传感器、LED(如 LD1)、485/CAN 总线接口等。

三、引脚查找案例(以 LD1 为例)

目标:找到控制拓展板 LD1 的芯片引脚

  1. 硬件连接链:资源拓展板 → 底板 → 核心板 → STM32U575RIT6 芯片。
  2. 查找步骤
    • 拓展板 LD1 对应LED1引脚,连接到拓展板接插件 J1 的 4 号引脚;
    • 底板接插件 J6 的 4 号引脚与拓展板 J1 的 4 号引脚相连;
    • 底板 J6 的 4 号引脚通过底板 J2 的 15 号引脚连接到核心板 J3 的 15 号引脚;
    • 核心板 J3 的 15 号引脚对应芯片PC4引脚(芯片第 24 号引脚)。
  3. 结论LD1 → LED1 → PC4(需通过原理图逐层验证硬件连接)。

四、芯片手册与寄存器分析

1. RCC 寄存器(时钟控制)

  • 功能:控制外设时钟使能,需先使能 GPIO 端口时钟才能操作引脚。
  • PC4 引脚对应的时钟配置
    • 需使能GPIOC端口时钟;
    • 对应寄存器RCC_AHB2ENRBit2(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 输出为例)

  1. 安装软件包 :打开 CubeMX,进入Manage embedded software packages,安装STM32Cube FW U5 V1.2.0
  2. 选择 MCUNew Project → Access to MCU Selector,搜索STM32U575RIT6并选择。
  3. 配置引脚
    • Pinout视图中找到PC4,右键配置为GPIO_Output(绿色表示配置并使能成功)。
  4. 时钟配置
    • Clock Configuration中,设置系统时钟(SYSCLK)为最高 160MHz(通过 PLL 倍频实现)。
  5. 生成代码
    • 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);
  }
}

七、程序烧录

  1. 配置 Debug
    • Keil 中打开工程,点击Options for TargetDebug,选择ST-Link Debugger,点击Settings
    • 确认SW Device识别到芯片(如0x0BE12477),在Flash Download中勾选 "Program" 和 "Verify"。
  2. 烧录 :点击Load按钮,烧录成功会显示 "Programming Done" 和 "Verify OK"。

八、任务实践(按键控制外设)

需求:按键按下一次,外设(如 LED)工作;再按一次,外设停止(循环切换)

实现思路:
  1. 硬件连接 :按键接PA0(输入模式,上拉),LED 接PC4(输出)。
  2. 代码逻辑
    • 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库函数进行工程创建

相关推荐
是大强15 小时前
嵌入式开发中用于调试的技术Semihosting
单片机·嵌入式硬件
RaLi和夕16 小时前
嵌入式学习笔记4.STM32中断系统及外部中断EXTI
笔记·stm32·单片机·学习
瓢儿菜201816 小时前
【Proteus8.17仿真】 STM32仿真 0.96OLED 屏幕显示ds1302实时时间
stm32·单片机·嵌入式硬件
10001hours16 小时前
(基于江协科技)51单片机入门:8.DS1302
科技·嵌入式硬件·51单片机
充哥单片机设计16 小时前
【STM32项目开源】基于STM32的工地环境监测系统
stm32·单片机·嵌入式硬件
速易达网络17 小时前
树莓派点亮LED灯
单片机·嵌入式硬件
straw_hat.17 小时前
PCB学习——STM32F103VET6-STM32主控部分
stm32·嵌入式硬件·学习
hazy1k19 小时前
K230基础-显示画面
stm32·单片机·嵌入式硬件·k230
A9better1 天前
嵌入式开发学习日志31——stm32之外部中断与定时器中断的差别与选择
stm32·单片机·学习
沐欣工作室_lvyiyi1 天前
基于物联网的个人健康管理系统(论文+源码)
单片机·物联网·毕业设计·健康管理