单片机学习笔记

发布于:2025-09-12 ⋅ 阅读:(26) ⋅ 点赞:(0)

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

一、环境搭建

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 Target → Debug,选择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库函数进行工程创建


网站公告

今日签到

点亮在社区的每一天
去签到