自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 嵌入式Linux驱动框架的理解——板级驱动层的抽象

本文介绍了基于Linux内核的LED驱动开发框架,采用分层设计思想实现硬件操作与驱动逻辑的解耦。整个系统分为四个层次:1) 接口层(led_opr.h)定义LED操作的标准函数指针结构体;2) 板级驱动层实现具体硬件寄存器操作;3) 通用驱动层通过file_operations对接应用层系统调用;4) 应用层提供用户控制接口。核心创新点是通过函数指针结构体实现硬件操作的抽象化,使驱动代码无需关心底层硬件差异,只需调用统一接口。

2025-12-17 09:18:14 661

原创 嵌入式Linux初探索——点灯背后的驱动层与应用层及其交互

本文介绍了基于Linux内核的LED设备驱动开发,包含驱动层和应用层实现。驱动层通过字符设备框架注册设备操作函数,使用ioremap映射GPIO寄存器地址,实现LED开关控制。应用层通过open/write系统调用与驱动交互,传递on/off指令。关键点在于用户态与内核态的数据交互,通过copy_from_user安全拷贝数据,并操作GPIO寄存器控制硬件。整个流程展示了从应用层命令解析、系统调用到驱动层硬件操作的全链路实现,体现了Linux设备驱动的典型开发模式。

2025-12-12 15:32:27 1246

原创 我的嵌入式权限踩坑实录

嵌入式Linux开发中权限问题频发,本文总结常见"坑点"及解决方案。核心问题包括:noexec分区导致程序无法执行、设备文件权限不足、传输后权限丢失等。文章从Linux权限机制出发,提出全流程避坑指南:1)编译阶段采用静态链接;2)传输后及时添加执行权限;3)设备文件手动开放666权限;4)执行时使用sudo提权;5)调试时通过ls、mount等命令快速定位。针对嵌入式系统精简特性,特别强调设备文件权限处理与noexec分区的应对策略,提供从源码到运行的完整权限管理方案。

2025-12-12 10:05:42 991

原创 嵌入式 Linux 字符设备驱动编写:从原理到实战

本文详细介绍了嵌入式Linux字符设备驱动的开发流程,通过一个完整的hello字符设备驱动案例,解析了驱动开发的核心步骤和关键知识点。主要内容包括:驱动层实现设备注册、文件操作接口定义和自动创建设备节点;应用层通过标准文件IO接口验证驱动功能。重点阐述了file_operations结构体的作用、内核与应用层的数据交互机制(copy_to/from_user)、驱动入口/出口函数实现,以及自动创建设备节点的方法。

2025-12-10 11:41:10 1221

原创 16×16 点阵汉字 LCD 显示程序解析

该程序基于Linux帧缓冲驱动,实现16×16汉字和8×16英文字符在LCD屏幕上的显示。通过直接操作帧缓冲内存完成像素绘制,结合HZK16汉字库解析字形。程序包含五大模块:基础变量、像素绘制、字符显示、汉字显示和主函数。关键技术包括:1)帧缓冲内存映射实现像素级控制;2)HZK16字库的GB2312编码解析;3)16×16汉字点阵数据定位与绘制。程序执行流程为:初始化帧缓冲→加载字库→清屏→显示字符→释放资源。其中汉字显示需通过区码/位码计算点阵位置,与ASCII字符相比具有更复杂的编码解析和绘制逻辑。

2025-12-09 16:54:28 698

原创 嵌入式Linux—点阵字符显示原理与代码实现(从困惑到通透)

本文解析了8x16点阵字符显示的两层坐标逻辑:屏幕全局坐标(x,y)和字符内部局部坐标(i,b)。详细说明了点阵数据的二进制映射原理,每个字符由16字节数据组成,每位对应一个像素点。提供了完整的字符显示函数实现,包括核心函数lcd_put_ascii、像素绘制函数lcd_put_pixel和字库数据定义。重点强调了坐标转换关系、字库匹配、坐标越界检查和颜色格式适配等关键注意事项。该方案可直接应用于嵌入式LCD显示开发,实现高效的点阵字符渲染。

2025-12-09 16:49:56 990

原创 STM32F的 PLL 锁相环对「分频 / 倍频系数组合」有严格的硬件约束

摘要:STM32F407在使用USB HID键盘功能时,若PLL锁相环配置不当会导致枚举失败。关键原因在于PLL对分频/倍频系数组合有严格硬件约束,即便数学计算得到48MHz,若PLL输入频率低于1MHz或PLLVCO频率超出192-432MHz范围,都会导致时钟失稳。USB模块对时钟精度要求极高(±0.25%),不满足约束时会出现频率漂移或抖动,使主机拒绝枚举。正确配置需确保PLL参数符合手册要求,才能保证USB时钟稳定工作。

2025-12-05 09:11:03 937

原创 嵌入式Linux学习——Framebuffer 应用编程详解(理论知识)

本文详细介绍了Linux系统中Framebuffer(帧缓冲)的编程原理与应用。Framebuffer将显示设备抽象为可直接读写的内存区域,通过标准文件接口操作显存实现图形显示。文章从核心概念、编程流程、关键操作到实战案例,系统讲解了Framebuffer的五大编程步骤:打开设备→获取参数→映射显存→操作像素→关闭资源。重点包括像素格式解析、显存地址计算、RGB颜色处理等核心内容,并提供了完整的可运行示例代码,涵盖填充全屏、绘制像素和直线等基础操作。该教程特别适合初学者快速掌握Linux底层图形显示原理,通

2025-12-01 15:24:45 711

原创 嵌入式Linux学习——dup函数的使用

摘要:dup/dup2是Unix/Linux系统中用于复制文件描述符的系统调用,使多个描述符指向同一文件表项并共享偏移量和状态。dup自动分配新描述符,而dup2可指定目标描述符。主要用途包括重定向标准I/O(如将printf输出重定向到文件)和管道通信(父子进程间数据传输)。典型应用场景如:通过dup2(fd,1)将标准输出重定向到指定文件,或使用pipe+dup2实现进程间通信。dup2比dup更常用,因其能直接指定目标描述符,避免手动关闭和分配步骤。

2025-11-29 14:30:01 822

原创 嵌入式Linux学习——从一个CSV处理程序深入理解嵌入式Linux文件I/O与字符串操作

该程序实现了一个CSV文件处理工具,主要功能是读取学生成绩数据并计算总分和评级。程序采用Linux系统调用进行文件操作,使用read_line()函数逐行读取输入文件,process_data()函数处理数据(包括解析姓名、各科成绩,计算总分和评级),最后将结果写入输出文件。关键点包括:1)使用sscanf/sprintf进行字符串解析和格式化;2)基于文件描述符的低级I/O操作;3)UTF-8文件头处理。程序体现了嵌入式开发中常见的底层文件处理技术,适合处理结构化数据文件。

2025-11-28 15:46:58 791

原创 嵌入式Linux学习—文件IO

本文对比分析了Linux系统中的open()和fopen()两个文件操作接口。open()是POSIX系统调用,直接返回文件描述符,无缓冲机制,适用于底层开发;fopen()是C标准库函数,返回文件指针并自带缓冲,适合普通文件操作。文章详细说明了二者的函数原型、参数用法及典型示例,并指出open()支持更多底层特性,而fopen()提供更友好的高级接口。最后解释了open()创建文件时的权限计算规则(mode & ~umask),并通过示例展示了最终权限的形成过程。

2025-11-28 15:35:02 802

原创 嵌入式Linux学习——gcc编译程序的整个过程

GCC编译流程详解:GCC将C程序编译为可执行文件需经历预处理、编译、汇编和链接四个阶段。预处理阶段处理宏定义和头文件,生成.i文件;编译阶段将预处理代码转为汇编代码.s文件;汇编阶段将汇编代码转为机器码.o文件;最后链接阶段合并目标文件和库文件生成可执行文件。开发者可通过gcc命令分步执行各阶段,也可直接使用gcc source.c -o output一键完成编译。理解完整编译流程有助于程序调试和性能优化。

2025-11-21 13:13:34 560

原创 嵌入式Linux学习——fork函数

嵌入式Linux中fork()函数通过复制父进程创建子进程,采用写时复制优化内存使用。子进程继承父进程资源但拥有独立PID,适用于多任务并发场景(如设备控制与日志记录)。使用时需注意资源限制、僵尸进程处理、实时性要求及文件描述符冲突。典型用法是父进程运行主逻辑,子进程执行辅助任务。编译需使用交叉编译器,适用于需要任务隔离或独立执行的嵌入式应用场景。

2025-11-18 14:32:02 274

原创 嵌入式Linux学习——环境变量与配置文件的关系(⭐难理解)

Shell环境变量与配置文件的关系涉及多个维度,包括配置文件详解、执行顺序、作用范围及启动方式影响。主要配置文件如/etc/profile(系统级)、~/.bash_profile(用户登录式)和~/.bashrc(非登录交互式)分别在不同场景下加载环境变量。登录式Shell按顺序加载/etc/profile、~/.bash_profile等,而非登录式则加载/etc/bash.bashrc和~/.bashrc。环境变量分系统级、用户级和临时生效三种作用范围。

2025-11-11 15:57:32 664

原创 嵌入式Linux——Shell脚本编程

摘要:Shell脚本是一种通过编写命令集合实现自动化任务的技术,广泛应用于系统管理和批量处理。本文介绍了Shell脚本的基础概念、基本结构与运行方式,详细讲解了变量、输入输出、条件判断、循环结构、函数等核心语法,并以文件备份脚本为例进行实战演示。文章还总结了执行权限、变量引用、条件判断等常见问题及解决方法,为Shell脚本编程提供入门指南。

2025-11-11 13:36:15 866

原创 嵌入式Linux学习——Shell

在嵌入式 Linux 中,Shell 是 **“瑞士军刀” 般的工具 **:既是用户与系统交互的入口,也是自动化任务的载体,更是调试和管理资源受限设备的核心手段。其轻量级实现与嵌入式场景高度适配,通过简单的命令和脚本,即可高效完成硬件控制、系统配置、问题排查等关键工作。

2025-11-10 17:22:44 578

原创 嵌入式Linux学习——文件目录

摘要:嵌入式Linux的文件目录结构遵循FHS标准,但会根据硬件资源进行精简定制。核心目录包括存放命令的/bin、/sbin,配置文件/etc,动态库/lib,以及虚拟文件系统/proc、/sys。嵌入式系统中常移除/home、/boot等非必要目录,优化存储空间。BusyBox工具将常用命令集成到单个可执行文件,显著缩小系统体积。开发时需合理配置交叉编译工具链,并利用/proc、/sys进行系统监控调试。

2025-11-10 16:18:24 889

原创 STM32串口发送时使用奇偶校验学习感悟——Even(偶校验)

本文介绍了串口通信中数据校验奇校验的实现方法,并详细说明了每种校验方式的工作原理。通过STM32CubeMX配置9位数据格式(8位数据+1位校验位),实现了包含偶校验的串口通信方案。文章展示了核心代码实现,包括USART初始化、DMA配置以及中断处理逻辑,重点说明了如何在数据接收时处理校验错误并实现数据回显功能。该方案能有效检测传输过程中的数据错误,提高通信可靠性。

2025-11-07 17:57:38 1032

原创 一文看懂常用的串口标准——RS232、RS422(待完善)、RS485

摘要:RS232、RS422和RS485是三种串行通信标准,主要区别体现在电气特性、传输方式、拓扑结构和应用场景上。RS232采用单端传输,适合短距离点对点通信;RS422和RS485采用差分信号传输,抗干扰能力强,适合长距离通信。其中RS422支持全双工,RS485支持半双工和多设备组网,是工业场景首选。实际应用中,通过电平转换芯片(如SP3232)可实现TTL与RS232/RS485的转换,满足不同设备的通信需求。

2025-11-07 16:16:19 886

原创 FATFS文件系统——中文名及长文件名支持

FATFS支持长文件名及中文命名的关键配置步骤:1.修改ffconf.h开启FF_USE_LFN(1/2/3)并设置FF_MAX_LFN长度;2.配置FF_CODE_PAGE选择适当编码(中文GBK需设为936);3.添加对应编码转换文件(中文需cc936.c替代默认ccsbcs.c)。注意工程中不能同时存在多个编码转换文件,且需确保系统编码与配置一致(如GBK)。这些配置可支持255字符长度的中文文件名,但会略微增加代码体积。

2025-11-03 14:36:30 674

原创 FATFS 文件系统学习2——移植的常规流程指南

FATFS文件系统移植指南:1. 准备阶段需下载源码包(ff.c、ff.h等)并明确硬件存储介质类型;2. 核心配置需修改ff.h文件,包括数据类型适配、功能特性选择及字符编码设置;3. 关键步骤是实现diskio.c中的5个底层函数(初始化、状态检查、读写操作等);4. 可选实现时间戳和内存分配函数;5. 最后通过挂载、格式化、文件操作等基础功能进行测试验证。移植重点在于正确配置系统参数和完整实现底层驱动接口。

2025-11-03 11:43:24 959

原创 一文看懂SPI通讯协议 附W25Q128实战代码(为FATFS文件系统移植做准备)

本文介绍了HAL库中SPI接口的使用方法。SPI是一种高速全双工同步串行通信接口,具有主从模式、四线连接等特点。文章详细解析了SPI的通信协议,包括四种工作模式(CPOL/CPHA组合)、数据采样时序等核心概念。通过STM32CubeMX和HAL库简化了SPI配置过程,使原本复杂的底层操作只需几行代码即可完成。教程以STM32F407ZGT6芯片为例,展示了如何创建SPI例程并移植读写程序,重点讲解了硬件SPI的配置和使用方法。

2025-11-03 11:13:36 1128 2

原创 为什么在开发时我们很少考虑堆和栈的溢出?

摘要:在STM32开发中,堆和栈溢出是常见隐患。栈用于存储局部变量和函数调用,从高地址向低地址增长;堆用于动态内存分配,从低地址向高地址增长。简单程序通常不会溢出,主要得益于默认配置充足、编程习惯间接规避以及程序规模较小。但对于复杂场景,必须采取预防措施:通过静态估算和动态检测监控内存使用,优化编程习惯(如避免大局部变量、减少动态分配),必要时调整堆栈大小。建议采用栈底标记法和内存跟踪等监控手段,并预留安全余量以确保系统稳定运行。

2025-10-30 15:21:12 856

原创 Git的学习之路——迈向高效的版本管理之路

本文摘要:Git快速入门指南聚焦3个关键点:核心概念(工作区/暂存区/本地库/远程库)、高频命令(init/add/commit/push等10个)和实战演练。重点解析暂存区机制,演示文件添加、版本回退和修改撤销等核心操作,强调通过「概念理解+场景练习」掌握Git,而非死记命令。特别提醒配置用户信息,并区分不同撤销场景(工作区/暂存区/已提交)的操作方法。附廖雪峰Git教程参考链接。

2025-10-30 09:55:24 1592

原创 通过 UART 串口打印格式化字符串(灵活进行printf函数封装)

改进点原因优点✅一次性发送整个字符串原代码逐字符调用提高效率,避免频繁中断✅增加长度检测与截断保护可能溢出缓冲区安全性更高✅参数类型更规范防止误改格式字符串更符合 C 规范✅通用函数支持任意 UART通过传入更灵活✅可保留快速封装兼容旧调用方式(易迁移。

2025-10-29 20:53:32 876

原创 SPI NOR Flash 家族的常见存储结构

SPI NOR 是一种非易失性存储器SPI 接口和NOR 存储类型,两者结合决定了它的通信方式和存储特性。页(Page):最小写入单位,通常为 256 字节、512 字节或 1024 字节(主流 256 字节)。写入数据时必须按整页或页内连续地址操作(不能跨页写入单字节)。扇区(Sector):最小擦除单位,通常由多个页组成(如 16 页 = 4KB,32 页 = 8KB)。擦除操作必须按整扇区执行(不能擦除单个页或字节)。块(Block)

2025-10-28 17:30:20 968

原创 STM32——使用定时器+按键中断来实现长按事件检测触发

该程序实现"长按3秒触发LED状态翻转"功能,核心流程为:1)按键按下时启动3秒定时器;2)定时期间若松开则终止计时;3)定时结束时若按键仍按下,则调用Key_ExitEvent翻转LED状态(通过flag变量切换GPIO输出);4)最终停止定时器。程序采用"外部中断+定时器二次校验"机制,确保只有持续3秒的长按才会触发操作,中途松开会取消动作。

2025-10-26 19:29:39 591

原创 STM32F103C8T6学习——直接存储器访问(DMA)HAL库实战(DMA串口接收与回显 (DMA-RX))(对比学习)

HAL 库通过 “句柄 + API 封装” 隐藏了大量与硬件相关的细节操作(如寄存器配置、状态管理、错误处理),开发者只需调用高层函数即可实现功能。而标准库需要显式编写每一步硬件操作,虽然灵活性更高,但代码更冗长且容易因遗漏细节(如标志位清除)导致 bug。任何一个 HAL API 都可能包含多步底层操作,其内部逻辑可通过查看源码(如)深入了解,这也是解决 HAL 库兼容性问题的核心方法。因为你每次都用重新启动接收,所以 Normal 和 Circular 都能用;

2025-10-15 10:10:52 824

原创 FATFS文件系统学习(1)——初识文件系统

FATFS是一个轻量级开源文件系统,专为嵌入式系统设计,采用标准C编写,支持FAT12/16/32格式。其核心创新是"簇"机制——将多个扇区合并管理,通过FAT表记录簇链而非单个扇区,大幅降低存储开销和查找时间(用空间碎片换取管理效率)。典型配置中,每簇包含2^n个扇区(512B-32KB),簇号从2开始编号。源码采用模块化设计,核心层(ff.c/h)必需,介质层(diskio.c)需适配硬件,其余功能插件可选。最小系统仅需5个文件即可实现基本功能,具有高度可裁剪性。

2025-10-13 09:51:51 654 2

原创 嵌入式开发基础知识补充—内存的种类和C语言变量的存储位置(非易失性存储和易失性存储)

这篇文章通过“开公司”的比喻,生动解释了MCU中Flash和SRAM的区别与联系: 硬件基础 Flash(仓库):非易失性存储,存放程序代码和常量数据,容量大但读写慢,适合长期存储。 SRAM(办公室):易失性存储,存放变量和运行时数据,速度快但容量小,适合频繁读写。 C语言映射 SRAM分为.data(已初始化变量)、.bss(未初始化变量)、堆(动态内存)和栈(函数局部变量)。

2025-10-10 22:16:17 1063

原创 微信小程序中 index.js文件

摘要:微信小程序的index.js是页面逻辑控制核心,通过Page()构造器管理数据、生命周期、交互事件和网络请求。它负责数据绑定(需用setData()更新)、处理页面生命周期钩子(如onLoad/onShow)、响应用户操作(按钮点击/输入等)、发起网络请求(wx.request)及调用微信API(如弹窗/跳转)。与同目录下的wxml(结构)、wxss(样式)、json(配置)共同构成完整页面,其中与wxml通过数据绑定实现动态渲染。

2025-10-04 19:52:47 581

原创 FreeRTOS—任务优先级和改善任务状态

FreeRTOS任务调度机制摘要: 优先级管理:0~(MAX-1),数值越大优先级越高,最高优先级任务优先执行。支持两种优先级查找方法,通用方法无限制但效率低,优化方法限32个优先级。 调度规则: 高优先级任务抢占执行 同优先级任务时间片轮转(默认1ms) 切换触发条件包括时间片耗尽、任务阻塞或主动让出CPU 任务状态: 运行态:正在执行 就绪态:准备就绪等待调度 阻塞态:等待事件(时间/同步) 暂停态:通过API手动挂起 优先级修改:提供uxTaskPriorityGet/vTaskPrioritySet

2025-09-27 14:41:58 810

原创 FreeRTOS学习笔记(五)——任务参数和删除任务

任务参数和删除任务

2025-09-14 17:54:32 455

原创 Vivado SDK 中 XScuGic(ARM Cortex-A9 SCU GIC 中断控制器)相关函数

摘要:本文介绍了Xilinx中断控制器(XScuGic)的关键API函数,包括初始化配置(XScuGic_CfgInitialize)、中断连接管理(Connect/Disconnect)、中断使能控制(Enable/Disable)、软件触发中断(SoftwareIntr)、优先级与触发类型设置(SetPriorityTriggerType)、多核中断映射(InterruptMaptoCpu等)以及CPU核心ID管理(SetCpuID/GetCpuID)。

2025-09-12 15:27:56 1307

原创 if-else 基本的条件判断结构剖析

本文总结了编程中if-else结构的常见用法与注意事项。从最基础的单分支if语句,到双分支if-else结构,再到多分支if-else if-else应用,详细说明了每种结构的语法特点和使用场景。特别强调了else就近匹配的原则,并通过示例代码演示了如何正确判断进入哪个else分支。文章还介绍了嵌套if-else的使用方法,指出大括号的重要性,并提醒避免嵌套过深。最后总结了if-else结构的关键规则:else就近匹配、多分支执行顺序、嵌套结构范围以及大括号的使用建议。

2025-09-11 14:36:45 355

原创 Xilinx GPIO 驱动库中相关函数的汇总解释

本文介绍了Xilinx GPIO驱动库的核心功能函数,包括初始化配置、方向控制、输出使能、数据读写和中断处理等。重点函数有:XGpioPs_LookupConfig()用于获取设备配置信息;XGpioPs_SetDirectionPin()和XGpioPs_SetOutputEnablePin()用于引脚配置;XGpioPs_WritePin()和XGpioPs_ReadPin()实现电平控制;XGpioPs_SetIntrTypePin()和XGpioPs_IntrEnablePin()处理中断功能。

2025-09-11 14:04:59 755

原创 FPGA—硬件电路一旦上电配置完成,各个功能模块会并行地持续工作

本文介绍了一个基于Verilog的LED闪烁控制模块,通过28位计数器实现0.25秒间隔的4位LED循环移位效果。该设计展示了FPGA的硬件并行特性,包括时钟驱动的时序逻辑、组合逻辑的即时响应以及状态机的工作机制。与软件程序不同,FPGA模块通过硬件并行处理实现持续运行,无需CPU顺序执行指令。文中详细解释了计数器逻辑、LED控制逻辑的实现原理,以及复位信号、时钟信号的处理方式,体现了FPGA设计中硬件描述语言与软件编程的本质差异。

2025-09-04 10:43:51 856

原创 兴趣爱好——虾哥开源小智AI机器人搭建(丐版—最低成本)ESP32开发板 MicroPython V1.0.0 Rev1

本文介绍了ESP32在VSCode+ESP-IDF环境下的丐版搭建教程,重点解决烧录成功后无现象的常见问题。主要原因是ESP32处于下载模式而非运行模式,表现为rst:0x1和boot:0x7的启动状态。提供了三种解决方案:硬件复位操作、检查GPIO0连接状态以及强制退出下载模式。特别提醒初学者在前期测试阶段不要过早引出GPIO0作为唤醒开关,建议先确保OLED正常显示后再进行相关操作。文中还提供了源码版本信息(1.5.6)和硬件连接参考。

2025-08-18 19:44:56 1016

原创 STM32F103C8T6学习——直接存储器访问(DMA)标准库实战3(ADC数据采集+DMA回传)

本文介绍了一个基于STM32F103C8T6微控制器的双通道模拟信号采集系统。系统采用ADC1(光敏和红外传感器输入)、DMA1(双通道数据自动传输)和USART1(串口通信)等外设,构建了高效的数据采集流水线。通过DMA实现ADC数据自动搬运至内存数组,CPU仅需定期格式化数据并通过DMA发送至上位机,显著降低了CPU占用率。重点阐述了ADC连续扫描模式配置、DMA循环传输机制及volatile关键字的使用,展示了硬件并行工作的嵌入式系统设计思想。该系统实现了2Hz的数据采集频率,具有高实时性和低功耗特点

2025-08-15 15:08:35 1827

原创 STM32F103C8T6学习——直接存储器访问(DMA)标准库实战2(DMA串口接收与回显服务器 (DMA-RX))

本项目基于STM32F103C8T6微控制器与标准外设库(SPL),成功实现了一个高性能、高健壮性的DMA串口回显服务器。该系统巧妙运用DMA循环模式接收数据,并结合串口的IDLE线路空闲中断来精确判断不定长数据帧的结束,极大降低了CPU开销。项目的关键和精髓在于中断服务函数中对DMA通道的精细化状态管理。通过在每次任务循环后,手动重置DMA接收通道的数据计数器、并清除DMA发送通道的“传输完成”标志位,我们最终解决了因硬件状态残留导致的“仅首次成功”和“数据错乱”等典型“坑点”。

2025-08-14 19:26:40 743

STM32串口发送时使用奇偶校验学习感悟-Even(偶校验)

STM32串口发送时使用奇偶校验学习感悟-Even(偶校验)

2025-11-07

FATFS 文件系统学习2-移植的常规流程指南

FATFS 文件系统移植成功,实现了文件系统底层的一些读写函数,具体请到代码中查阅

2025-11-03

一文看懂SPI通讯协议 附W25Q128实战代码(为FATFS文件系统移植做准备)

W25Q128加入页写入逻辑后的.c和.h文件以及相关的数据手册

2025-11-03

STM32F103C8T6学习-直接存储器访问(DMA)HAL库实战(DMA串口接收与回显 (DMA-RX))(对比学习)

STM32F103C8T6学习-直接存储器访问(DMA)HAL库实战(DMA串口接收与回显 (DMA-RX))(对比学习)

2025-10-15

STM32F103C8T6学习-直接存储器访问(DMA)标准库实战3(ADC数据采集+DMA回传)

本文介绍了一个基于STM32F103C8T6微控制器的双通道模拟信号采集系统。系统采用ADC1(光敏和红外传感器输入)、DMA1(双通道数据自动传输)和USART1(串口通信)等外设,构建了高效的数据采集流水线。通过DMA实现ADC数据自动搬运至内存数组,CPU仅需定期格式化数据并通过DMA发送至上位机,显著降低了CPU占用率。重点阐述了ADC连续扫描模式配置、DMA循环传输机制及volatile关键字的使用,展示了硬件并行工作的嵌入式系统设计思想。该系统实现了2Hz的数据采集频率,具有高实时性和低功耗特点

2025-08-15

STM32F103C8T6学习-直接存储器访问(DMA)标准库实战2(DMA串口接收与回显服务器 (DMA-RX))

本项目基于STM32F103C8T6微控制器与标准外设库(SPL),成功实现了一个高性能、高健壮性的DMA串口回显服务器。 该系统巧妙运用DMA循环模式接收数据,并结合串口的IDLE线路空闲中断来精确判断不定长数据帧的结束,极大降低了CPU开销。项目的关键和精髓在于中断服务函数中对DMA通道的精细化状态管理。 通过在每次任务循环后,手动重置DMA接收通道的数据计数器、并清除DMA发送通道的“传输完成”标志位,我们最终解决了因硬件状态残留导致的“仅首次成功”和“数据错乱”等典型“坑点”,确保了系统在连续通信下的可重复性与绝对稳定性。

2025-08-14

STM32F103C8T6学习-直接存储器访问(DMA)标准库实战1(入门级 - “解放CPU的直观展示”)

UARTTX+DMA

2025-08-13

【STM32F103C8T6】多路USART串口Printf重定向标准库版

多路USART串口Printf重定向测试源码

2024-12-28

基于STM32F103C8T6的PID增量式控制代码

基于STM32F103C8T6的PID增量式控制代码

2024-10-17

空空如也

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

TA关注的人

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