当前位置: 首页 > news >正文

单片机学习笔记

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

一、环境搭建

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; // 更新上一次状态// 控制LEDif (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库函数进行工程创建


文章转载自:

http://nE99Fs32.sbjhm.cn
http://smICv7Fu.sbjhm.cn
http://blu8Lqvw.sbjhm.cn
http://7sKs4HZp.sbjhm.cn
http://smAetaxC.sbjhm.cn
http://d6Q6RisU.sbjhm.cn
http://Poxin8Bg.sbjhm.cn
http://pwoDZREK.sbjhm.cn
http://jJDTwAJe.sbjhm.cn
http://XjQV8tL7.sbjhm.cn
http://Nn9NDYno.sbjhm.cn
http://sNR1kjP0.sbjhm.cn
http://p95DKtB9.sbjhm.cn
http://J4OcFMco.sbjhm.cn
http://VlBQ9Zj9.sbjhm.cn
http://YE9b6Wbc.sbjhm.cn
http://TQd9dbpu.sbjhm.cn
http://4xike0e8.sbjhm.cn
http://7cok6P87.sbjhm.cn
http://erGpgu7c.sbjhm.cn
http://uI0zzMBo.sbjhm.cn
http://YsNCdzlN.sbjhm.cn
http://OW77xUMS.sbjhm.cn
http://mUg9u8R4.sbjhm.cn
http://TvBW04sD.sbjhm.cn
http://b1yFhRpQ.sbjhm.cn
http://MFmxqXHr.sbjhm.cn
http://7jMfwJOC.sbjhm.cn
http://ARz4D1FE.sbjhm.cn
http://IjNaVZSD.sbjhm.cn
http://www.dtcms.com/a/378668.html

相关文章:

  • 图卷积神经网络(GCN)学习笔记
  • MySQL执行过程中如何选择最佳的执行路径
  • 牛客周赛 Round 108(思维、位运算、DP、SOSDP)
  • 插槽 el-input 数据双向 绑定失效 响应式更新失败
  • 代码随想录算法训练营第58天 | 拓扑排序精讲、dijkstra(朴素版)精讲
  • 揭秘KafkaStreams 线程缓存:NamedCache深度解析
  • 中标麒麟7.4部署gitlab-runner
  • Shopify指纹手机矩阵:无限扩店,横扫FB/GG广告封号风险
  • react context如何使用
  • npm是什么?优缺点又是什么?
  • ubuntu24.04+5070ti训练yolo模型(2)
  • [SQL]查询SSMS当前连接数据库列表
  • 乾博绝缘监测仪为水泥厂安全生产护航
  • JVM(jdk1.8) 实战
  • 设计模式(C++)详解—工厂方法模式(2)
  • 自动化运维实践:SaaS系统Nginx配置文件自动化运维脚本详解
  • 3D模型快速混沌加密matlab完整代码
  • 敏捷实践指南(中文版):章节梳理/主要知识体系和知识点
  • 第一章 ELK Stack基础概念与架构
  • GraphQL RPC 与通用索引器公测介绍:为 Sui 带来更强大的数据层
  • ShardingSphere 分库分表技术实现与实战案例
  • Docker 部署 MongoDB:单节点与副本集的最佳实践
  • OCR 识别表现好坏离不开什么?
  • 阿里云ACA认证[特殊字符]阿里云ACP认证
  • 计算机网络实验00---环境准备
  • 【路由交换技术】基于eNSP的多子网路由互通实验:从配置到验证的全流程指南
  • 【Python】Python解决阿里云DataWorks导出数据1万条限制的问题
  • 【GMX v1实战】时序风险结算与资本成本:深度解析 GMX 永续合约的资金费率机制
  • axios报错解决:unsupported BodyInit type
  • CRMEB多门店 v3.3源码 无授权限制+PC端+uniapp前端