自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Day75 RS-485 通信协议设计、串口编程与嵌入式系统部署实践

字段长度说明PACK_HEAD1B0x55Length1B有效数据长度(含命令码 + 数据)CMD1B命令类型(见下文枚举)DatanB实际数据(如温度、湿度)Checksum1B校验和 =PACK_TAIL1B0xAAGET_TEMP = 1, // 获取温度GET_HUMI, // 获取湿度GET_ALL // 获取全部(温度+湿度)} CMD;0x550xAA// 计算校验和:对指定长度的字节数组求和,返回低8位i < len;功能。

2025-11-01 23:56:09 632

原创 Day74 嵌入式Linux项目开发:驱动、编译、模块化、通信协议

型号:光雨一体式变送器(485接口)供电:DC 5~24V(注意:开发板需直流电源!量程雨量:0~24mm/min(分辨率0.1mm)光照:0~200000 lx(分辨率1 lx)输出方式:RS-485(Modbus RTU协议)工作温度:-40~60°C尺寸:直径6cm(安装时需考虑空间)本次会议系统梳理了从底层物理层(UART/232/485)到应用层(Modbus RTU)的完整通信链路,并深入讲解了驱动加载、交叉编译、Makefile优化、模块化编程、通信协议设计等核心技术。

2025-10-30 19:55:00 921

原创 Day73 嵌入式传感器技术全栈开发

字符型设备驱动以字节为单位读写,无缓存。适用于鼠标、键盘、串口等。cdev。块设备驱动以固定块大小(如512k)读写,带缓存。适用于硬盘、Flash等存储设备。网络设备驱动基于TCP/IP协议栈,用于网络通信。特性UART(串口)I²CSPI线数2(TX/RX)2(SCL/SDA)速度低(kbps 级)中(100kbps–400kbps)高(MHz 级)主从点对点多从机(地址区分)多从机(CS 区分)全双工是半双工是典型应用GPS、蓝牙、调试串口。

2025-10-29 19:50:48 1008

原创 Day72 传感器分类、关键参数、工作原理与Linux驱动开发(GPIO/I²C/Platform/Misc框架)

本日学习涵盖传感器分类选型、工作原理、Linux驱动四大框架(字符设备/Misc/Platform/I²C子系统)、设备树配置、应用层交互及交叉编译环境搭建,为嵌入式传感器项目开发奠定完整基础。

2025-10-28 20:06:17 2078 1

原创 Day71 MQTT数据上传与ARM端交叉编译部署全链路实践

任务验收标准✅ 编译 ARM 版 Paho + OpenSSLfile a.out显示 ARM 架构✅ 配置 Ubuntu 双网卡共享开发板成功✅ 开发板上传数据至 OneNETOneNET 控制台可见实时数据✅ Web 浏览器查看数据无需上位机,直接网页访问💡经验总结网络调试需分层验证:物理 → IP → 路由 → DNS → 应用。交叉编译务必检查编译器头文件路径库路径。OneNET 强制 TLS,OpenSSL 不可省略。“做技术,要么得到结果,要么得到经验——没有白干的事。

2025-10-28 13:03:52 631

原创 Day70 基于 Mailbox 机制的多线程传感器数据处理系统设计与实现

本系统通过Mailbox + 队列 + 命名线程多消费者速率不匹配问题;高耦合锁机制带来的维护难题;模块扩展困难等痛点。本质是“以空间换解耦,以队列换同步”,是嵌入式与高并发系统中的经典范式。通过本次实现,我们不仅构建了一个可运行的传感器数据处理流水线(collect→showsave),还深入理解了多线程通信中的内存管理、线程安全、解耦设计等核心概念。后续可在此基础上扩展网络上传、异常报警等模块,验证系统的可扩展性。

2025-10-24 17:55:29 795

原创 Day69 SQLite3动态库移植 + BMP图像解析显示 + 进度条控件设计与动态文本管理

/ 新增:百分比数字的颜色} bar_t;内存对齐是二进制文件解析的常见陷阱,务必使用。组件化设计(如bar_t)极大提升代码复用性与可维护性。批量 I/O是性能优化的核心手段,避免高频小数据读写。坐标系转换(BMP vs 屏幕)需显式处理,避免图像倒置。多实例支持:通过动态分配结构体,避免全局变量限制。局部更新:通过背景备份与恢复,实现高效、无闪烁的动态UI更新,这是所有GUI系统的基础。💡关键提醒:务必理解save_mem和的调用时机。save_mem应在所有。

2025-10-23 20:15:09 357

原创 Day68 静态库与动态库原理、移植实践、内存布局及Framebuffer显示开发

特性静态库(.a)动态库(.so)链接时机编译时运行时可执行文件大小大(含库代码)小(仅含引用)运行依赖无需要库文件存在多程序共享否(各自独立副本)是(共用同一文件)升级方式重编译整个程序仅替换库文件典型应用免安装工具、嵌入式程序桌面软件、大型应用(如游戏、办公软件)

2025-10-22 20:49:07 1031

原创 Day67 Linux I²C 总线与设备驱动架构、开发流程与调试

I²C 驱动 = 总线驱动 + 设备驱动开发流程:设备树声明 → 应用层验证 → 编写驱动 → 测试关键匹配:DTS 中compatible必须与驱动id_table一致数据读取:先写寄存器地址,再读数据(LM75);先写内存地址,再读/写(AT24C08)调试原则:先通逻辑,再写驱动;硬件问题优先排查“不是重复造轮子,而是把轮子装到车上。—— 内核提供 I²C 通信“轮子”,开发者只需将设备逻辑“装上车”

2025-10-21 19:03:24 870

原创 Day66 DHT11温湿度传感器驱动开发与单总线通信协议

/ 存储从设备树获取的GPIO编号✅说明:包含必要头文件,定义设备名和全局GPIO变量。DHT11单总线通信协议(起始信号、响应、数据格式、校验)bit时序判别原理(高电平长短区分0/1)Linux平台驱动开发(设备树、miscdevice、GPIO控制)用户空间测试程序编写驱动编译、加载与调试流程💡核心思想:硬件通信依赖精确时序,驱动需严格遵循协议,并加入超时保护与错误处理。

2025-10-20 18:52:55 726

原创 Day65 linux内核中断机制与底半部处理:从gpio中断注册到tasklet/workqueue应用

/ 初始化理解并掌握在 Linux 驱动开发中,如何通过设备树(Device Tree)直接定义中断,替代传统 GPIO 转换获取中断号的方式,提升驱动的可移植性与规范性。将中断信息提前写入设备树节点,由内核自动解析并传递给驱动。驱动只需从设备树中提取中断号,无需关心具体 GPIO 映射。对比项方式一:GPIO → IRQ(动态转换)方式二:DTS 直接定义中断(推荐)是否硬编码 GPIO是(驱动中写死)否(由 DTS 描述)可移植性差(换平台需改驱动)

2025-10-17 18:21:18 870

原创 Day64 设备树与GPIO子系统驱动开发实践

在你的开发板.dts文件中(如),添加一个新节点来描述你的设备。在或&iomuxc节点下,定义具体的引脚功能和电气属性。// 将GPIO1_IO03配置为GPIO功能,电气属性为0x10B0// 将GPIO1_IO18配置为GPIO功能,电气属性为0x10B0开发模式特点适用场景传统platform驱动手动匹配设备名,硬编码资源老版本内核,无设备树设备树 + platform驱动通过compatible匹配,资源动态获取主流开发模式,推荐使用GPIO子系统标准API操作引脚,无需关心寄存器。

2025-10-16 20:15:13 1027

原创 Day63 Linux设备驱动开发进阶——从静态分配到平台总线模型

本日学习内容围绕字符设备驱动的高级主题展开,从手动管理设备号到利用内核提供的便捷框架,再到设备与驱动分离的platform模型,逐步深入。核心知识点包括:动态分配设备号以避免冲突,使用杂项设备(miscdevice)简化注册流程,通过ioctl接口进行设备属性控制,以及理解并实现platform总线架构下的设备与驱动分离。

2025-10-15 20:30:22 783

原创 Day62 设备驱动程序开发基础与LED控制

驱动程序是操作和管理硬件的程序。在操作系统中,应用程序不能直接访问硬件,必须通过内核提供的驱动程序接口来间接操作硬件。为驱动程序分配一个唯一的设备号。通常,主设备号从较大的数字开始分配(如255),因为较小的号码已被系统占用。// 定义主设备号、次设备号和设备名称248// 主设备号0// 次设备号#define DEV_NAME "led1" // 设备名称根据芯片手册,定义相关寄存器的物理地址。0x20e0068// IOMUXC_GPR_GPR1寄存器地址,用于设置引脚复用功能。

2025-10-14 20:53:01 699

原创 Day61 Linux内核编译、裁剪与驱动开发基础

通过采用传感器融合技术和云端数据同步机制,突破传统MCU方案的资源限制,实现丰富的图形化人机交互界面和智能化健康管理功能。内核之所以庞大,是因为它需要支持海量的硬件和功能。因此,内核引入了强大的条件编译机制,通过配置来决定哪些代码被编译进最终的镜像。包含所有硬件设备的驱动代码,是内核与硬件交互的关键。,根据项目需求对内核进行裁剪。例如,可以禁用不需要的驱动、文件系统等,以减小内核体积。: 根目录下的 Makefile,用于控制整个内核的编译流程。按照以下步骤,可以成功编译出一个适用于目标平台的内核镜像。

2025-10-13 19:50:06 886 1

原创 Day60 ARM嵌入式Linux开发环境搭建与系统启动流程

交叉编译 (Cross Compilation): 在一个平台上编译另一个平台可运行的程序。编译工具链 (Toolchain): 包含编译器、链接器、汇编器等一系列工具的集合。: 用于在网络上共享文件系统的协议。: 用于在网络上传输小文件的简单协议。: 系统启动的第一阶段程序,负责初始化硬件和加载内核。内核 (Kernel): 操作系统的核心,负责管理系统资源和硬件。根文件系统 (Rootfs): 包含操作系统运行所需所有文件的顶层文件系统。页表 (Page Table)

2025-10-11 17:59:35 483

原创 Day59 SPI驱动与ADXL345传感器应用及Linux系统移植基础

本日内容涵盖SPI总线协议的底层配置、ADXL345加速度计的驱动实现,以及Linux内核驱动开发前的系统移植基础知识。我们将从裸机驱动的SPI初始化开始,逐步封装读写函数,最终在板卡上读取传感器数据并显示。随后,我们将过渡到Linux内核驱动领域,详细解析系统启动的三个核心阶段:Bootloader、Kernel和Rootfs,并介绍相关的硬件存储概念。

2025-10-10 21:41:23 759

原创 Day58 触摸屏GT9147驱动与SPI通信

全称: Serial Peripheral Interface (串行外设接口)。特点: 同步、全双工、高速、板级通信。用途: 连接各种外设,如传感器、Flash存储器、ADC/DAC等。发明公司: Motorola。ADXL345是一款常用的三轴数字加速度计,可通过SPI或I²C接口访问。测量范围: ±2g, ±4g, ±8g, ±16g。分辨率: 13位。输出: 16位二进制补码格式。初始化步骤:读取器件ID (寄存器0x00) 以验证通信。

2025-10-09 19:31:53 406

原创 Day57 LCD显示与PWM背光控制

脉冲宽度调制(PWM)是一种通过改变方波的占空比来控制平均功率的技术。周期(T): 一次完整高电平+低电平的时间。频率(f): f = 1/T。占空比: 高电平时间占整个周期的比例。极性: 决定PWM信号从高电平还是低电平开始。硬件初始化: 完成了引脚复用、时钟配置和LCDIF寄存器设置。基础绘图: 封装了清屏、画点、画线、画矩形等基础函数。字符显示: 成功移植并使用了多尺寸的ASCII字符库,在屏幕上显示文字和数字。背光控制。

2025-10-08 19:38:19 692

原创 Day56 LCD显示原理与驱动配置

本日课程从ADC的基础概念出发,深入探讨了LCD的核心参数、工作原理和时序控制,并通过实战项目,在i.MX6ULL平台上完成了LCD的驱动配置。这不仅加深了对嵌入式系统图形显示的理解,也为后续更复杂的图形界面开发打下了坚实的基础。成功的硬件驱动往往始于对数据手册的细致阅读和对底层寄存器的精准操作。

2025-10-07 20:00:39 1102

原创 Day55 ADC模块配置、自校准、采样与软件滤波

本日学习内容围绕i.MX6ULL芯片的ADC(模数转换器)模块展开,涵盖其核心特性、寄存器配置、硬件自校准功能、基础数据采集以及通过软件实现高级滤波(剔除粗大误差)的完整流程。旨在将原始模拟信号稳定、准确地转换为数字量,并最终计算出对应的电压值。

2025-09-30 15:45:57 1020

原创 Day54 IIC通信协议与LM75温度传感器应用及ADC原理

LM75A是一款数字温度传感器,集成了Σ-Δ模数转换器和I²C接口。2.7V 至 5.5V。在 -25°C 至 +100°C 范围内为 ±2°C,在 -55°C 至 +125°C 范围内为 ±3°C。9位,即最小分辨率为0.5°C。A0, A1, A2,最多支持8个器件在同一总线上。通过I²C总线输出温度值。

2025-09-30 09:17:47 728

原创 Day53 I2C通信协议与代码实现

本实验使用的传感器核心是一个AT24C08 EEPROM芯片。厂商: ATMEL (现Microchip)。类型: 电可擦写可编程只读存储器 (Electrically Erasable Programmable Read-Only Memory)。容量: 8Kbit = 1KByte (1024字节)。工作电压我们使用3.3V供电。通信速率: 最高可达400kHz,但受限于3.3V电压,我们配置为100kHz。引脚功能VCC: 电源正极 (接3.3V)。GND: 电源负极 (接地)。SCL。

2025-09-28 21:19:14 1055

原创 Day52 串口通信原理与IMX6ULL UART驱动开发

本日内容聚焦于嵌入式系统中至关重要的技术。我们将从基础概念入手,深入剖析其工作原理,并最终在 IMX6ULL 开发板上实现一个完整的 UART 驱动程序,包括数据的发送、接收以及标准库stdio的移植,使我们能够像在 PC 上一样使用printf和scanf进行调试和交互。

2025-09-26 18:36:12 913

原创 Day51 时钟系统与定时器(EPIT/GPT)

时钟系统和定时器。时钟系统是所有外设工作的基础,我们掌握了PLL、PFD、Prescaler三大硬件组件的作用,并通过寄存器配置成功将ARM内核主频提升至528MHz。EPIT定时器用于产生精确的周期性中断,适用于需要定时唤醒或调度的任务。GPT定时器功能更丰富,我们利用其自由运行模式实现了高精度的delay_us()和delay_ms()延时函数,解决了传统软件延时不精确的问题。这些知识是后续学习更复杂外设(如UART、I2C、PWM等)和操作系统的基础。务必理解每个寄存器配置背后的逻辑和目的。

2025-09-25 21:28:42 1098

原创 Day50 GPIO中断与GIC控制器

硬件结构:两红一黄三个开关,中间是复位按钮,左边低功耗按钮,右边为允许用户独立控制的试验按键原理图分析打开底板原理图,找到按键部分。我们要操作的是按键K0,其左侧接地,右侧有网络编号K0,K0右侧接10K限流电阻,电阻上方接3.3V DCDC稳压电源。整个按键电路连接到SOC的引脚,就是网络编号K0对应的引脚。按键电路(KEY)(按键电路(KEY)。电路中,DCDC_3V3 是 3.3V 的直流电源,R12 是阻值为 10KΩ 的电阻,KEY0 是按键,GND 是地)GPIO输入配置。

2025-09-25 09:06:51 657

原创 Day49 C语言裸机驱动移植(含启动代码、Makefile、寄存器结构体、BSP工程、链接脚本、蜂鸣器驱动)

/ 时钟控制模块(CCM)volatile。

2025-09-23 20:23:36 730

原创 Day48 ARM汇编LED控制与交叉编译 启动代码 C与汇编互调 异常处理 多模式栈

⚠️ 正常速度:~136KB/s;异常速度(>1MB/s)→ 读卡器接触不良 → 重启虚拟机重试。一个32位数若是“立即数”,必须能通过“偶数位循环右移”使所有1落在低8位,且高24位为0。:LED灯以固定频率闪烁(亮→延时→灭→延时→循环)

2025-09-22 21:10:11 934

原创 day47 ARM汇编 启动代码 寄存器操作 条件标志 函数调用 栈管理

学习ARM汇编不是为了编写业务逻辑,而是为了💡C语言运行依赖栈空间和特定工作模式,而栈需手动在内存中划分,模式需手动切换——这些操作C语言自身无法完成(存在“鸡生蛋”悖论),必须由汇编在C运行前初始化。

2025-09-20 19:09:32 1009

原创 Day46 ARM硬件体系 从计算机架构、处理器类型、指令集到内核寄存器与SoC总线结构

以应用为中心、以计算机技术为基础、软硬件可剪裁的专用计算机系统。所有课程(C语言、Linux、数据结构、单片机、裸机、驱动等)均围绕此核心展开。PC(R15):程序计数器,控制指令执行流LR(R14):链接寄存器,保存函数返回地址SP(R13):栈指针,管理函数调用栈帧。

2025-09-19 21:16:23 1091

原创 Day45 51单片机UART串口通信与数码管时钟系统

/ 数码管段码表(共阴极,0-9 和 "-" 符号)// 索引0~9对应数字0~9,索引10对应"-"// 全局变量:用于计时(时、分、秒)// 秒// 分// 时// 全局变量:UART接收缓冲区// 接收数据缓冲数组// 接收字节数计数器发送:采用查询方式while(!TI);),逻辑简单,适合教学示例。接收:采用中断方式,高效不阻塞,适合实时接收。实际项目推荐发送也改用中断,实现全非阻塞通信。

2025-09-18 17:44:31 865

原创 Day44 51单片机UART串行通信 软件模拟UART + 硬件UART回显

通过定时器中断精确控制GPIO电平翻转可软件模拟UART协议实现低速串行通信,而利用51单片机内置串口控制器配合定时器1波特率发生器可实现高效稳定的硬件UART收发,两者结合掌握串行通信底层原理与工程实践,是嵌入式开发的必备技能。工程一(软件UART):持续发送“hello”,串口助手显示“hellohellohello…”,P2口周期闪烁;工程二(硬件UART回显):发送任意字符立即原样返回,实现“你说我复读”,P2口持续闪烁;共同点。

2025-09-17 19:58:30 1234

原创 Day43 嵌入式 中断、定时器与串行通信

波特率:单位时间内传输的码元数(bit/s)。UART中每个码元为1 bit,因此波特率即为每秒传输的比特数。常见波特率:9600、115200、19200等。📌 注意:通信双方必须设置相同的波特率,否则无法正确解析数据。数码管显示:正确显示HH:MM:SS格式的时间,每秒自动更新。按键功能:按下任意按键后,数码管显示对应数字(1~16)。外部中断:每次按键按下,num增加1,可用于计数。定时器精度:时间误差小于±0.002%,适合数字时钟应用。模块核心内容应用场景中断系统。

2025-09-16 20:50:22 770

原创 Day42 51单片机中断系统与8×8 LED点阵扫描显示

74HC595 是一个 8 位串行输入、并行输出的移位寄存器芯片,通过 3 根控制线(SER、SRCLK、RCLK)即可控制 8 路输出,极大节省单片机 I/O 资源。

2025-09-15 18:49:11 951

原创 day41 51单片机最小系统、GPIO控制、时序逻辑器件(74HC138/595)与LED点阵驱动原理

先设计硬件,基于硬件设计软件实现一个具体的功能 ——

2025-09-13 18:30:58 850

原创 EDID 数据结构解析与编辑工具:校验和计算、厂商/设备名编解码、物理地址读写、颜色与时序信息提取

本程序实现对 Extended Display Identification Data (EDID) 二进制文件的完整解析与交互式编辑功能,涵盖数据校验、制造商ID编解码、显示器名称读写、物理地址设置、颜色坐标解析、时序信息展示等核心知识点。所有代码保留原始变量名与函数名,每条代码均添加详细注释,并附带理想运行结果示例。🔢 二、校验和计算与修复1. 计算128字节块的校验和2. 修复块的校验和(修改第127字节)🏭 三、制造商ID编解码1. 解码16位制造商代码为3字母字符串2.

2025-09-12 20:46:40 620

原创 俄罗斯方块终端游戏实现 —— C语言系统编程与终端控制

本项目是一个使用 C语言 实现的简易 俄罗斯方块(Tetris)终端游戏,完整涵盖了 系统调用、终端控制、随机数、二维数组地图、碰撞检测、图形绘制、非阻塞输入、光标控制、清屏与重绘、方块旋转与锁定、行消除与计分机制 等多个核心知识点。游戏逻辑 碰撞检测、方块锁定、行消除、计分 checkCollision(), lockBlock(), checkLineClear()✅ 理想结果:游戏持续运行,方块自动下落,支持左右移动和旋转,落地后锁定,消除行并计分,新方块生成,帧率稳定。

2025-09-12 20:32:14 772

原创 Day40 Web服务器原理与C语言实现:从HTTP协议到静态资源服务

万维网工作原理(客户端-服务器、TCP、HTTP)HTTP请求/响应报文结构HTTP状态码分类与含义C语言Socket网络编程HTTP服务器实现(解析请求、发送响应、文件传输)项目规划与模块划分本日学习内容完整涵盖网络基础协议、服务器实现与项目架构设计,为后续Web开发打下坚实基础。

2025-09-10 15:34:04 2755

原创 day40 SQLite3单词查询程序设计与实现

关键机制解析:为何精确对应单词释义1. SQL查询语句的精准投影:这是关键的"投影"操作,明确指定只返回这一列结果集结构:当查询命中时,返回的结果集每行只有1列数据数组索引关系:在回调函数中,自然对应这唯一一列(即单词释义)2. 数据存储结构的一致性插入顺序固定:第二列存储单词(),第三列存储释义()查询匹配:当条件满足时,返回的正是第三列存储的释义数据3. 回调函数执行机制查询结果情况回调函数调用数组内容值找到1个匹配结果调用1次1找到N个

2025-09-10 15:33:18 411

原创 Day39 SQLite数据库操作与HTML核心API及页面构建

SQLite是一个轻量级的嵌入式数据库,具有以下特点:SQLite使用动态类型系统,根据"类型亲和性"(Type Affinity)规则自动转换数据类型:重要特性:SQLite使用datetime类型处理时间数据,支持内置函数操作时间值:理想运行结果:(实际输出为当前时间+8小时,如东八区时间)SQLite通过实现自动增长(无需AUTOINCREMENT):关键说明:执行逻辑:理想结果:数据导出与导入:执行效果:可视化工具安装:作用: 提供图形界面操作数据库(建表、查询、导入导出等)1) sql

2025-09-09 20:08:11 786

空空如也

空空如也

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

TA关注的人

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