自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 USB描述符

USB描述符是USB设备的核心元数据,采用四层树形结构:设备描述符(身份信息)、配置描述符(工作模式)、接口描述符(功能定义)和端点描述符(数据传输通道)。通过这种分层机制,单个物理设备可实现多种功能模式(如4G上网卡切换U盘模式),各层描述符共同构成了设备的"能力说明书"。枚举过程中主机会按层次读取这些描述符,其中配置0是必备的控制端点。理解描述符结构对开发USB设备和驱动程序至关重要,它们实现了设备的即插即用、功能扩展和跨厂商兼容性。

2025-12-24 22:14:50 589

原创 USB协议详解:从物理连接到数据传输的完整解析

本文系统介绍了USB通信的核心概念和机制。主要内容包括:1)USB树形拓扑结构(主机、集线器、设备);2)数据包组成(SOP、PID、CRC等)及四种PID类型;3)事务三阶段(令牌、数据、握手)及四种传输类型(批量、中断、实时、控制);4)控制传输的详细三阶段流程;5)关键机制如数据交替、错误处理等。文章通过层次化方式(传输→事务→包→域→位)解析USB通信原理,并对比了不同传输类型的特点和应用场景,为开发USB设备驱动程序和应用提供了理论基础。

2025-12-23 22:35:01 743

原创 USB设备编辑

USB设备通过物理连接时的上拉电阻触发电压变化,被主机检测并识别速度(低速、全速或高速)。设备遵循严格的状态机流程:从上电、复位、分配地址到配置完成,实现即插即用。高速设备通过特殊握手协议切换至480Mbps模式。数据传输采用NRZI编码和位填充技术,通过同步字段确保时钟同步,并以差分信号增强抗干扰能力。断开检测依靠阻抗匹配和反射信号分析。这种分层设计使上层应用无需关心底层电气细节,实现了可靠的热插拔与高效通信。

2025-12-23 19:03:19 955

原创 面向对象封装UART

本文提出了一种基于面向对象思想的UART驱动框架设计,通过结构体封装实现多UART端口的统一管理。核心采用DMA+IDLE中断接收机制,将数据存入队列缓冲,并通过设备结构体抽象初始化、发送、接收三个关键操作。该设计支持通过简单的设备指针切换实现不同UART端口的操作,具有高内聚低耦合、易于扩展和维护的优势。文中详细说明了框架的实现原理、扩展方法及使用示例,特别适合需要管理多个UART端口的嵌入式应用场景。

2025-12-22 11:50:07 736

原创 FreeRTOS 同步互斥与任务协作 学习笔记

本文介绍了FreeRTOS中的同步与互斥机制。同步机制通过"等待-唤醒"模式协调任务执行顺序,如计算任务完成后触发显示任务。互斥机制则通过互斥量保护临界资源,确保同一时间仅一个任务访问共享资源。文章从生活场景类比到代码实现,详细解析了同步标志、临界区保护等核心概念,并对比了自定义实现与FreeRTOS标准API的优劣。重点包括:同步中的volatile关键字作用、轮询效率问题,互斥中的原子操作必要性、优先级翻转风险等。建议实际开发优先使用FreeRTOS提供的信号量、互斥量等标准同步机制

2025-08-26 18:27:04 817

原创 栈的概念(韦东山学习笔记)

本文解析栈在函数调用和RTOS任务中的核心问题:1)LR覆盖问题:通过"入口PUSH保存LR+出口POP恢复PC"解决嵌套调用中的返回地址覆盖;2)局部变量分配:通过调整SP预留空间并按声明顺序和对齐规则填充;3)RTOS独立栈:每个任务需独立栈来隔离保存执行现场,确保任务切换时能正确恢复。文章还指出栈溢出、地址无效等易错点,并提及编译器优化和RTOS上下文切换等扩展知识。

2025-08-20 18:53:30 1091

原创 堆内存管理核心逻辑 超详细复习笔记

本文详细解析了堆内存管理的核心逻辑,包括初始化、分配和释放三个关键环节。系统通过全局堆管理结构体和链表机制实现动态内存管理:初始化时标记整块内存为空闲;分配时遍历链表查找合适空闲块并进行分割;释放时定位内存块头并重新标记为空闲,支持相邻块合并以减少碎片。文章对比了链表式管理和线性分配的优缺点,指出链表式更灵活但实现复杂,线性分配简单但无法释放。最后总结了常见错误(如指针回推错误、碎片问题)和扩展知识(不同内存管理算法)。这套机制是理解嵌入式系统和RTOS内存管理的基础。

2025-08-19 17:29:01 1083

原创 ARM 架构简明教程学习笔记

本文详细解析了ARM架构底层原理与FreeRTOS前置知识,重点介绍: RISC架构特点:精简指令集通过"读-算-写"三步完成运算,需借助寄存器暂存数据; 核心寄存器组:包括R0-R15通用寄存器和xPSR状态寄存器,承担数据暂存、流程控制等关键功能; 汇编指令分类:详解内存读写(LDR/STR)、算术运算(ADD/SUB)、流程控制(B/BL)等指令的工作原理; 函数调用机制:结合栈操作(SP)、返回地址保存(LR)和程序跳转(PC),解析ARM架构下完整的函数调用流程; 易错点提醒:

2025-08-18 20:59:32 1120

原创 FreeRTOS【3-1】创建第一个多任务程序复习笔记

本课程讲解FreeRTOS多任务程序创建,重点包括:1)理解多任务意义,实现功能"并行"处理;2)掌握任务句柄的概念与作用;3)学习xTaskCreate函数参数配置(任务函数、名称、栈深度、优先级等);4)通过LED控制与LCD显示两个任务实例,演示多任务创建与调度流程。课程提供完整源码工程,指出栈深度设置、任务死循环、优先级冲突等常见问题,并给出调试建议。最终目标是让开发者能够独立搭建基础多任务应用,为后续复杂RTOS开发奠定基础。(149字)

2025-08-18 20:18:50 897

原创 定时器计数功能超级保姆级学习笔记(韦东山)

本文档针对基于SysTick定时器实现的延时函数(udelaymdelay)和纳秒级时间获取函数()进行整理,核心围绕ARM Cortex-M 内核的 SysTick 定时器工作原理及应用展开。所有函数均依赖SysTick 定时器,核心是通过LOAD和VAL寄存器计算时间。延时函数(udelaymdelay)通过累计周期数实现精确等待;通过组合毫秒数和周期数实现高精度时间获取。SysTick需配置为load + 1个周期 = 1 毫秒(由时钟频率决定)。

2025-08-09 20:32:47 152

原创 韦东山STM32_HAl库入门教程(SPI)学习笔记[09]内容

核心作用:把四种 SPI 模式的规则表格化,方便快速查询和配置。阴暗细节(表格逐行解析)模式 0(CPOL=0, CPHA=0)SCK 空闲低电平,第一个时钟沿(上升沿)采样数据 → 常用,很多外设默认支持。模式 1(CPOL=0, CPHA=1)SCK 空闲低电平,第二个时钟沿(下降沿)采样数据 → 部分外设(如某些传感器)可能用。模式 2(CPOL=1, CPHA=0)SCK 空闲高电平,第一个时钟沿(下降沿)采样数据 → 较少用,但某些旧设备可能要求。

2025-08-05 19:54:54 1677

原创 OLED 显示汉字原理与实现(对应韦东山老师HAL库[8—5—1/2])

本文详细解析了SSD1306 OLED屏幕的驱动原理与汉字显示实现。主要内容包括:1)I2C通信时序,重点说明从机地址(0x3C)、控制字节(区分命令/数据)和应答机制;2)三种地址寻址模式(页地址、水平和垂直模式)的特点及适用场景;3)核心显示控制逻辑,包括列地址和页地址设置方法;4)汉字显示全流程,从PCtoLCD2002工具生成16×16点阵字模,到代码实现坐标转换和数据发送。文章通过命令手册与代码实例对照,系统阐述了OLED屏幕驱动的关键技术要点。

2025-08-02 18:14:49 1172

原创 I2C(韦东山HAL库)

通过对 OLED 显示系统从硬件连接到软件层次的分析,我们清晰了解在 OLED 显字符串的完整流程。从应用程序简单调用,到层层向下的函数处理,再到底层硬件通信,各环节相互配合。掌握这些知识,助我们复习嵌入式开发中软硬件协同工作原理,也能在实际项目更好调试、优化 OLED 显示功能,为开发更复杂显示应用打基础。硬件:两条线(SCL、SDA)+ 上拉电阻,开漏模式实现线与逻辑。时序:开始 / 停止信号定边界,8 位数据 + 1 位 ACK 保证传输,SCL 高电平锁存数据。流程。

2025-08-02 11:05:43 1653

原创 【7】串口编程三种模式(查询/中断/DMA)韦东山老师学习笔记(课程听不懂的话试着来看看我的学习笔记吧)

这里定义了串口句柄(通过extern引用)、一些用于按键处理的变量(虽然在串口中断中可能暂时没用到,但属于整个工程的变量)以及用于标记发送完成的 volatile 变量g_tx_cplt(因为在中断回调函数和主函数中都会访问,需要用 volatile 保证其可见性)。初始化:建环形缓冲区仓库,打开串口中断监听。收数据:串口收到数据 → 触发中断回调 → 数据存进环形缓冲区 → 重新开启中断,等下一个数据。取数据:主程序循环从环形缓冲区取数据,处理后可以再发回去。发数据。

2025-07-30 21:37:51 1355

原创 嵌入式通信知识串讲:从同步 / 异步传输到 UART 协议 & STM32F103 硬件解析

本文系统介绍了电子设备间数据传输的两种基础策略:同步传输和异步传输。同步传输依赖专用时钟线协调数据收发,抗干扰能力强但需要额外线路;异步传输则通过严格约定波特率和起始信号实现通信,线路精简但依赖时钟精度。文章以红外遥控器为例,详细解析了异步传输的实现机制,包括起始信号识别、数据位编码规则等。随后重点讲解了UART串口通信技术,涵盖其数据帧结构、传输流程、波特率配置及抗干扰机制,并深入剖析了STM32F103的UART硬件架构,包括发送/接收模块、寄存器配置等核心内容。全文通过大量图示和类比,将复杂通信原理转

2025-07-24 21:10:55 1109

原创 按键消抖与环形缓冲区保姆级教程

这篇文章详细讲解了嵌入式开发中按键处理的两种关键技术:定时器消抖和环形缓冲区。作者通过生动的比喻和代码拆解,帮助读者理解按键抖动问题(金属弹片导致电平跳变)的解决方案——延迟确认机制,以及如何用环形缓冲区防止快速按键导致的数据丢失。文中提供了完整的代码实现,包括软定时器结构体、环形缓冲区的读写操作,并详细说明了在Keil5中的工程配置步骤。文章特别适合嵌入式初学者,通过结合理论讲解和实战演示,让读者能够掌握按键处理的核心思想,为后续嵌入式开发打下坚实基础。

2025-07-23 14:21:52 1279

原创 [3-1]使用OLED进行调试

本教程详细介绍了使用OLED屏调试STM32程序的方法。通过I2C协议连接STM32和OLED(SCL接PB6,SDA接PB7),利用CubeMX配置I2C外设并生成初始化代码。添加OLED驱动文件后,编写显示函数即可实现字符和变量的实时显示。OLED采用128×64分辨率,支持16×8字符布局,通过坐标控制显示位置。相比传统调试方式,OLED调试具有可视化效果好、实时性强、操作简便三大优势,能直观展示程序状态和变量变化,极大提升调试效率。

2025-07-20 21:19:44 939

原创 STM32 中断体系深度解析:基于 HAL 库的按键控制 LED 完整流程(从原理到代码)

摘要:本文详细讲解了STM32按键中断处理机制,从死循环检测的缺陷引入中断的必要性。通过生活类比(门铃中断)和硬件架构解析,阐明中断处理流程的7个步骤。重点剖析ARM中断处理三阶段(准备、触发、执行),并拆解STM32的EXTI-NVIC-CPU联动机制,包括GPIO映射、触发模式配置、优先级分组等关键细节。最后通过CubeMX配置和HAL库回调函数实现按键控制LED的完整示例,演示如何利用中断提升CPU效率。全文以"工厂紧急任务"为隐喻,将复杂中断流程可视化,适合嵌入式新手理解底层硬件

2025-07-20 18:15:46 1158

原创 [2-1]光敏传感器控制蜂鸣器开发全流程(附电路原理 + 代码实操)

本文详细介绍了基于光敏传感器的环境光控报警系统实现方案。系统通过光敏传感器检测环境光线变化,当光线变暗时自动触发LED照明和蜂鸣器报警。硬件部分包括光敏传感器模块、有源蜂鸣器模块和LED控制电路,分别连接至STM32单片机的PB11、PA8和PC13引脚。软件实现采用CubeMX图形化配置工具生成初始化代码,并编写光线检测、蜂鸣器控制和LED控制等核心函数。主程序通过循环检测光线状态实现联动控制,达到暗光报警功能。最后提供了硬件连接检查和功能测试方法,确保系统稳定运行。整个方案实现了从传感器检测到执行器控制

2025-07-19 18:41:03 1176

原创 保姆级教程!按键/光敏控制 LED 从原理到代码全拆解

本文介绍了通过STM32实现按键控制LED的两种方法:CubeMX配置和手动代码配置。首先分析了按键电路原理,强调上拉/下拉电阻对稳定电平的重要性,并解释了消抖处理(硬件电容滤波或软件延时检测)。接着详细对比了两种实现方式:CubeMX可图形化配置输入引脚,自动生成初始化代码;手动编码则需自行设置GPIO模式、时钟使能等底层参数。核心控制逻辑均通过HAL_GPIO_ReadPin读取按键状态,再经HAL_GPIO_WritePin控制LED亮灭,形成"检测输入-驱动输出"的闭环。最后给出

2025-07-19 16:09:42 971

原创 GPIO的工作模式(保姆级学习笔记)

本文系统解析了MCU引脚的工作原理与应用场景。首先从按键电平检测基础电路入手,对比上拉/下拉电阻的作用,进而揭示MCU内部集成电阻的等效逻辑。重点分析了推挽与开漏两种输出模式的特点:推挽模式通过P/N-MOS实现强驱动能力,适合单芯片应用;开漏模式则依靠外部上拉电阻,具备多设备协同工作优势。文章还深入讲解了施密特触发器的双阈值迟滞机制如何消除信号抖动,以及引脚复用功能通过MODE和CNF寄存器配置实现的原理。最后提供了配置建议和常见问题解决方案,为硬件开发实践提供了系统指导。

2025-07-19 10:17:34 1481

原创 学习HAL库必要的C语言基础知识(学完就可以开始HAL库啦)

本文系统讲解了C语言指针与硬件操作的底层原理。首先通过"房间钥匙"比喻解析指针的本质,说明指针是软件访问硬件的桥梁;其次详细阐述结构体的内存布局与typedef优化技巧,结合STM32寄存器操作实例展示结构体指针的高效应用;进而深入剖析进制转换原理及C语言表示方法;最后详解位操作五大运算(与、或、移、反)的二进制逻辑及硬件控制应用。全文采用"快递柜""积木"等生活化类比,将计算机底层抽象概念具象化,为理解HAL库底层机制及嵌入式开发奠定坚实

2025-07-17 12:13:18 1229

原创 [1-1]使用GPIO操作与HAL库点灯

本文通过三种不同的实现方法,对比分析了使用 HAL 库函数与自行编写函数实现点灯功能的差异:从代码简洁度来看,HAL 库函数封装了底层操作,代码更精炼;从执行效率而言,自定义函数可针对性优化,响应更快速;从开发难度上讲,HAL 库降低了硬件操作门槛,适合快速开发。

2025-07-16 17:33:58 727

原创 [7]定时器/按键控制LED流水灯模式&定时器时钟

本文介绍了STC89C52单片机定时器的基本原理与应用,主要包含三部分内容:1. 定时器资源介绍,包括T0、T1、T2三个定时器的配置方法、工作模式及中断机制;2. 定时器使用步骤,通过代码实例演示如何初始化定时器和编写中断服务程序;3. 两个实际应用案例:按键控制LED流水灯模式和定时器时钟的实现。文章重点讲解了16位定时器的配置技巧、中断处理流程以及基于定时器的多任务实现方法,为嵌入式开发中的精确时间控制和外设管理提供了实用参考。

2025-05-29 23:37:54 1055

原创 [6]矩阵键盘及矩阵键盘密码锁

这篇笔记总结了嵌入式学习中矩阵键盘和密码锁的实现方法。通过LCD1602显示屏作为交互界面,详细讲解了矩阵键盘的行列扫描原理(逐行/逐列扫描)、硬件连接方式和代码实现,重点说明了按键消抖处理和准双向I/O配置。随后展示了如何基于矩阵键盘开发电子密码锁,包括密码输入处理(左移算法)、错误提示和清零功能。文中提供了完整的代码实现和注释,并分享了开发过程中遇到的典型问题及解决方法(如输入位数限制)。该案例体现了矩阵连接节省I/O口的优势,适合嵌入式初学者参考实践。

2025-05-26 22:08:36 1052

原创 [5]模块化编程及LCD1602调试工具

作为初次尝试嵌入式开发的新手,深知自身所学尚浅,远未达能 “教学” 的境界。本章仅以模块化编程与LCD 1602 调试工具为切入点,将个人学习过程中的笔记与实践思路整理分享,本质是为自我复习梳理脉络。若文中内容能为同样初入此领域的学习者提供些许参考,或是引发更多交流探讨,便是意外之喜。关于开发板环境搭建、新建工程、程序下载等基础操作,已在首篇文章中记录具体步骤,本文将聚焦核心逻辑展开,不足之处还望各位读者海涵。

2025-05-22 13:25:50 973

原创 [4]静态/动态数码管显示

在51单片机开发板设计中,数码管的显示方式主要有静态和动态两种。静态显示适用于固定数值,通过独立控制每个数码管的段码,显示稳定但硬件资源消耗大;动态显示则通过段码和位选配合,轮流点亮数码管,节省硬件资源,但需要快速刷新以避免闪烁。静态显示控制简单,无需高频刷新,而动态显示则需不断刷新,编程较复杂。为解决动态显示可能出现的闪烁问题,可以采用专用驱动芯片。此外,文章还详细介绍了数码管的引脚定义、C51数组和子函数的定义,以及如何通过代码实现数码管的静态和动态显示,并提供了优化前后的代码示例。通过掌握这些技术,可

2025-05-19 22:00:01 1224

原创 [3]独立按键控制LED(亮灭/状态/显示二进制/移位)

本文记录了作者学习51单片机的过程,重点介绍了如何通过编程控制LED灯的亮灭、状态切换、二进制显示及移位操作。文章详细说明了所需的软件和材料准备,以及具体的代码实现和调试步骤。通过按键控制LED的实验,作者深入理解了单片机的基本输入输出功能,并分享了实践中的经验和收获。文章旨在为初学者提供参考和启发,鼓励大家通过简单的项目逐步掌握嵌入式系统的基础知识

2025-05-19 21:56:47 1147

原创 [2] LED(点亮/闪烁/流水灯)

这篇博客详细记录了学习51单片机控制LED灯的过程,从点亮、闪烁到流水灯的实现。首先介绍了所需的软件和材料,并解释了LED的基本控制原理,如通过P2口输出高低电平来控制LED。接着,作者逐步展示了在Keil软件中创建项目、编写代码并下载到单片机的详细步骤。代码部分包括点亮LED、实现LED闪烁以及流水灯效果的实现,并解释了延时函数的作用。最后,作者总结了学习成果,鼓励读者实践并提出问题,共同进步。这篇博客不仅为初学者提供了清晰的指导,也展示了单片机编程的实际应用

2025-05-19 21:53:49 621

原创 [1]关于基本步骤和材料的准备

本文介绍了使用Kelluvision5软件进行单片机编程的基本步骤,重点是如何创建新项目、配置开发环境以及下载程序到单片机。首先,用户需在Kelluvision5中新建项目并选择正确的单片机型号(如AT89C52)。接着,通过添加C语言文件并调整字体设置来编写代码。在编程环节,确保单片机型号正确,并检查串口连接。最后,通过STC-ISP软件找到生成的.hex文件并下载到单片机,实现LED的点亮控制。本文还提醒用户注意型号匹配和串口连接问题,以避免常见的操作错误。

2025-05-19 20:19:26 286

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除