自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(429)
  • 资源 (1)
  • 收藏
  • 关注

原创 嵌入式面试八股文(二十一)·嵌入式开发中C语言相关知识点扫盲

本文介绍了C语言在嵌入式开发中的10个核心知识点:函数原型的作用与重要性;递归函数的原理与应用;回调函数的概念与实现;预处理指令#define的使用场景;条件编译的语法与实例;#include指令的用法; 编译器优化选项的影响;#pragma指令的功能;位操作的实现方法; 野指针问题及防范措施。这些内容涵盖了嵌入式开发中常见的编程技巧、优化方法和错误防范,对提高代码质量和开发效率具有重要指导意义。

2026-03-14 16:11:31 417

原创 嵌入式面试八股文(二十)·C语言关键字相关知识点速通(static、const、volatile、struct、enum、union)

本文详细讲解了C语言中7个关键特性的嵌入式开发应用:static关键字用于控制变量生命周期和作用域;const关键字保护数据不被修改;3volatile确保变量不被编译器优化;指针操作硬件寄存器和内存管理;结构体组织复杂数据;枚举提高代码可读性;union节省内存并实现数据转换。这些特性在嵌入式开发中至关重要,直接影响系统性能和稳定性。

2026-03-14 15:54:14 464

原创 沁恒CH32·一键开关机功能设计·定时器版本(源码可直接移植)

内含源码可直接移植。本文介绍了基于沁恒CH32微控制器的一键开关机电路设计(定时器版本)。系统通过长按按键(≥1秒)触发开机,短按(30ms)切换LED模式,长按(≥3秒)实现关机。硬件电路采用P-MOS管控制电源通断,配合三极管和二极管实现自锁功能。软件部分通过定时器中断实现非阻塞式按键检测,包含电源引脚初始化、按键扫描、LED模式控制等模块。相比延时函数版本,定时器方案避免了程序阻塞,更适合复杂工程应用。文中详细解析了电路工作原理、代码实现逻辑及主程序流程,并提供了完整的工程资源下载链接。

2026-03-13 06:00:00 774

原创 沁恒CH32速通篇(二)·通用定时器点灯实验

本文介绍了在沁恒CH32V003单片机上实现定时器控制LED闪烁的方法。主要内容包括:CH32V003的定时器特性,包含1个高级定时器和1个通用定时器; 工程创建步骤,需添加Timer.c和Timer.h文件;定时器初始化配置,包括预分频值、计数模式等参数设置;中断服务函数的特殊声明方式,需添加"WCH-Interrupt-fast"属性; LED引脚初始化及主函数实现。通过配置TIM2定时器产生1秒定时中断,实现了LED的周期性闪烁控制。

2026-03-10 23:00:00 410

原创 沁恒CH32·一键开关机功能设计·延时函数版本(源码可直接移植)

内含源码可自行移植,本文介绍了基于CH32芯片实现一键开关机功能的硬件电路设计与软件实现方案。通过P-MOS管和三极管构建电源开关电路,实现长按开机(1秒)、短按模式切换(30ms)和长按关机(3秒)三种功能。软件部分详细阐述了GPIO初始化、按键检测逻辑(包括防抖处理)和LED模式控制(全闪、流水灯、单灯循环)的实现方法。系统采用非阻塞式设计,主循环以10ms为周期进行按键状态检测和LED状态更新,同时通过PC3引脚电平控制实现电源自锁功能。该方案在保证功能完整性的同时,兼顾了低功耗特性。

2026-03-10 06:00:00 1031

原创 沁恒CH32速通篇(一)·GPIO点灯实验

本文介绍了沁恒CH32系列MCU的GPIO配置与使用。首先概述了CH32系列产品线及其特点,包括不同内核架构、主频和应用场景。然后详细讲解了GPIO功能,包括引脚分类、寄存器配置、8种工作模式(输入/输出/复用)及相关库函数说明。最后通过LED点灯实验演示了GPIO初始化流程:配置引脚为推挽输出模式,在主循环中交替设置高低电平实现LED闪烁。实验包含GPIO初始化结构体配置、时钟使能、引脚模式设置等关键步骤,并提供了完整的工程源码下载链接。该案例为CH32开发提供了基础的GPIO操作参考。

2026-03-09 23:00:00 512

原创 STM32学习·HAL库速通篇(十二)·通用定时器(TIM2、TIM3、TIM4、TIM5)

本文详细介绍了STM32定时器(TIM)的功能特性与使用方法。主要内容包括:TIM的分类及特点,分为基本定时器(TIM6/7)、通用定时器(TIM2-5)和高级定时器(TIM1/8);定时器核心工作原理,重点解析预分频器、计数器和自动重装载寄存器的时序关系;工程配置步骤,包括时钟设置、中断配置等;4) 实际应用示例,通过HAL库函数实现按键控制LED闪烁频率变化功能。文章深入浅出地讲解了定时器从原理到实践的全过程,为STM32定时器开发提供了实用指导。

2026-03-09 06:00:00 457

原创 STM32学习·HAL库速通篇(十一)·ADC电压采集

本文介绍了STM32中ADC(模数转换器)的基本原理与配置方法。主要内容包括:1)ADC工作原理,重点讲解了逐次逼近型ADC0809的结构与STM32内部ADC框图;2)ADC基本结构配置,详细说明GPIO口设置、转换器配置、采样时钟选择(最大14MHz)、四种转换模式(单次/连续、扫描/非扫描)以及数据对齐方式;3)实际工程应用,通过STM32CubeMX配置PA6引脚为ADC输入通道,实现单次转换模式的电压采集,并配合串口打印ADC原始值(0-4095)和转换后的电压值(0-3.3V)。

2026-03-05 23:00:00 733

原创 STM32学习·HAL库速通篇(十)·串口(USART)通过DMA收发不定长数据

本文详细介绍了STM32中DMA(直接存储器访问)的基本原理与应用实现。首先阐述了DMA的概念、存储器映像和基本结构,包括触发源选择、数据宽度与对齐等关键技术点。接着讲解了在STM32CubeMX中的工程配置方法,重点说明DMA通道、传输方向、优先级等参数的设置。文章还分析了HAL库中关键的DMA函数,如HAL_UARTEx_ReceiveToIdle_DMA()等的工作原理。最后通过实例演示了如何使用DMA实现串口数据收发,包括printf重定向、缓冲区初始化及回调函数处理等完整实现过程。

2026-03-05 06:00:00 832

原创 STM32学习·HAL库速通篇(九)·串口(USART)接收数据运用

本文详细介绍了STM32串口通信的实现方法,包括物理层和协议层的概念解析。物理层区分了TTL和RS-232电平标准,协议层说明了数据包格式。文章重点讲解了三种接收方式:阻塞式接收定长数据,通过HAL_UART_Receive()实现;中断式接收定长数据,使用HAL_UART_Receive_IT()和回调函数处理;中断式接收不定长数据,利用HAL_UARTEx_ReceiveToIdle_IT()和空闲中断检测。每种方法都配有工程配置说明、代码示例和实际测试结果,完整工程资源可通过CSDN下载。

2026-03-04 23:00:00 817

原创 STM32学习·HAL库速通篇(八)·串口发送运用(USART)

本文介绍了STM32串口通信的基本原理与HAL库实现方法。主要内容包括:1)串口通信分层模型(物理层与协议层),物理层涉及TTL与RS-232电平标准转换;2)协议层数据包格式(起始位、数据位、校验位和停止位);3)通过STM32CubeMX配置USART1为异步模式,设置波特率115200;4)使用HAL_UART_Transmit()函数实现单字节和字符串发送;5)通过重写fputc()函数实现printf()重定向到串口输出。文章提供了完整的工程配置步骤和代码示例,适合STM32初学者快速掌握串口通信

2026-03-04 06:00:00 1138

原创 STM32学习·HAL库速通篇(七)·外部中断——EXTI

本文介绍了STM32的EXTI外部中断模块,详细讲解了其工作原理和配置方法。主要内容包括:1) EXTI支持的四种触发方式(上升沿、下降沿、双边沿和软件触发);2) EXTI的基本结构和工作流程,说明如何通过AFIO模块选择GPIO引脚;3) 中断优先级的设置规则;4) 通过STM32CubeMX进行工程配置的具体步骤;5) 关键代码实现,包括中断服务函数和回调函数的编写。最后提供了一个完整的工程实例,演示如何通过按键触发外部中断来控制LED灯状态。

2026-03-03 22:00:00 637

原创 STM32学习·HAL库速通篇(六)·系统定时器——SysTick

本文介绍了STM32中SysTick系统定时器的原理与应用。SysTick是CM3内核内置的24位递减计数器,通过系统时钟驱动实现精确计时,具有跨芯片型号的通用性。文章详细讲解了其工作原理:从重装载值开始递减,归零时触发中断并自动重载,形成周期性定时。通过HAL库配置SysTick为1ms时基源,并在中断服务函数中实现500msLED翻转功能。实验展示了如何利用SysTick中断构建系统时基,完成周期性任务调度。

2026-03-03 06:00:00 1104

原创 STM32学习·HAL库速通篇(五)·GPIO输入与按键控制LED灯开关

本文介绍了STM32中GPIO输入功能的应用,重点讲解按键检测的实现方法。首先概述了GPIO的基本功能,包括输入检测外部电平和输出控制设备状态。然后详细说明了按键消抖原理,并通过原理图展示了硬件连接方式。在工程创建部分,演示了如何配置GPIO引脚为输入模式并设置下拉电阻。文章重点讲解了HAL_GPIO_ReadPin函数的工作原理,该函数用于读取GPIO引脚状态。最后给出了完整的代码示例,实现通过两个按键分别控制三颗LED灯的亮灭功能。

2026-03-02 23:00:00 1744

原创 STM32学习·HAL库速通篇(四)·GPIO输出与点灯实验

本文介绍了基于STM32的GPIO输出功能实现LED流水灯实验。首先概述了GPIO的基本概念和输入输出功能,重点讲解了输出模式的控制原理。通过原理图分析LED连接方式,详细说明了在STM32CubeMX中配置GPIO引脚为输出模式的步骤。文章重点解析了两个关键函数:HAL_GPIO_WritePin()用于控制引脚电平,HAL_Delay()实现毫秒级延时。最后展示了主函数中实现三色LED交替点亮的代码逻辑,通过500ms延时实现流水灯效果。实验完整展示了GPIO输出功能的基本应用方法。

2026-03-02 06:00:00 1003

原创 【OTA】手把手写BootLoader程序·无OTA事件B区跳转到A区

系列文章,内含源码和跳转链接,可自行移植,本文主要介绍了STM32 OTA升级中内存分区的设计与实现。通过标志位判断实现无OTA事件时从B区跳转到A区;详细阐述了跳转过程的实现方法,包括栈指针切换、外设复位等关键步骤;使用DMA环形缓冲区优化串口通信。这种分区设计避免了OTA升级过程中设备变砖的风险,确保即使升级失败也能通过B区恢复。

2026-02-02 06:00:00 963

原创 【STM32】两万字详解SD卡移植最新版本FatFs文件系统(ff16)

本文介绍了在STM32平台上移植FatFs文件系统到SD卡的全过程。首先概述了SD卡的基本原理和FatFs文件系统的特性,然后详细讲解了移植步骤:包括修改ffconf.h配置文件、实现diskio.c底层驱动接口(初始化、读写扇区等),以及主函数中对文件系统的挂载、格式化、文件读写等操作。重点分析了SD卡读写对齐处理、扇区大小配置等关键技术点,并提供了完整的测试代码。最终实现了在SD卡上创建FAT32文件系统,完成文件读写功能。

2026-01-19 22:00:00 1868

原创 【STM32】吃透 SDIO 驱动,八万字详解 SD 卡底层原理与实战开发

本文阐述 STM32 通过 SDIO 接口读写 SD 卡的实现方案。首先介绍 SD 卡物理结构、工作原理及 SPI/SDIO 通信模式,说明卡识别(CMD0、CMD8 等命令初始化)与数据传输两阶段流程;随后描述 STM32 SDIO 外设功能及 DMA 传输支持。重点解析 SD_Init () 初始化、SD_ReadBlock ()/SD_WriteBlock () 读写、SD_Erase () 擦除等核心函数逻辑,介绍擦除测试、单块 / 多块读写测试等验证方法及辅助函数。

2026-01-19 06:00:00 1307

原创 【STM32】四万字详解最新版本(ff16)FatFs文件系统移植(库函数版本)

本文详细介绍了FatFs文件系统的移植与应用过程。首先阐述了文件系统的基本概念及其优势,包括数据定位、空间管理和格式解析等功能。随后重点讲解了FatFs文件系统的特点、配置方法和移植步骤,包括ffconf.h的参数配置和diskio.c的驱动实现。通过实际案例演示了在STM32平台上对W25Q64 Flash芯片的文件系统初始化、格式化、文件读写等操作。文章提供了完整的代码实现和详细的参数说明,特别强调了扇区大小设置、对齐方式等关键配置项。最后通过串口输出验证了文件系统的成功移植。

2025-12-29 22:00:00 2432 2

原创 【代码为墨,深耕不辍】我的2025嵌入式创作成长复盘

19年大学开始接触CSDN,从CSDN上找到了许多有用的资源,陪伴了我整个大学时光,而后大学毕业从事了相关工作,有自己的一些学习感悟,发布了一些文章进行分析分享讨论,期间也积累了一些粉丝与读者,在这里特别感谢每一位关注我的粉丝与读者,是你们的点赞、收藏与评论,让我的技术分享更有价值,也成为我持续输出的不竭动力。

2025-12-29 06:00:00 1073

原创 嵌入式面试八股文(十九)·裸机开发与RTOS开发的区别

本文从嵌入式开发角度分析了任务切换、优先级反转、STM32启动流程等核心概念。任务切换本质是CPU寄存器的保存与恢复过程,涉及栈指针切换和MMU上下文更新。优先级反转现象通过优先级继承机制解决,临时提升低优先级任务的优先级。STM32启动流程包括复位向量获取、栈初始化、C运行环境初始化等步骤。裸机开发直接面向硬件,而RTOS开发则基于操作系统内核,提供任务管理、同步机制等服务。文章还对比了裸机和RTOS在任务模型、时间管理、内存管理等方面的差异,并详细阐述了中断触发流程。

2025-12-14 08:00:00 984

原创 嵌入式面试八股文(十八)·初识STM32芯片

本文介绍了STM32微控制器的基础知识,包括芯片分类、命名规则和最小系统组成(复位电路、BOOT启动电路、晶振电路等)。详细讲解了STM32开发必备的C语言知识,如位操作、宏定义、条件编译、extern声明和const/volatile关键字。阐述了单片机程序在Flash和RAM中的存储分布,以及BIN与HEX文件的区别。内容涵盖硬件设计和软件开发两个维度,为STM32开发提供了系统性的基础知识框架。

2025-12-14 06:00:00 878

原创 【OTA】手把手写BootLoader程序·读写内部FLASH

本文详细介绍了STM32内部FLASH存储器的操作与应用。详细介绍了 FLASH存储器结构解析,包含程序存储器、系统存储器和选项字节的功能说明;FLASH写入操作流程,涵盖解锁、擦除(页擦除和整片擦除)及数据写入的具体步骤;工程空间分布查看方法,通过Utility软件和.map文件分析存储占用情况;代码实现部分,提供了从读取到编程的完整函数实现,包括32位字、16位半字和8位字节操作;掉电数据保存方案,通过标志位检测和SRAM数据同步实现数据持久化。最后通过主函数验证了FLA

2025-12-11 22:44:02 1163

原创 【OTA】手把手写BootLoader程序·硬件SPI读写Flash芯片(W25Q64)

本文详细介绍了SPI协议及其在STM32上的实现,重点讲解了W25Q64 Flash存储器的操作。主要内容包括:SPI协议基础:四线制通信、主从模式、四种工作模式(CPOL/CPHA组合), STM32 SPI外设配置:引脚定义、时钟控制、数据收发机制;W25Q64特性:8MB容量、页/扇区结构、指令集(擦除、读写等);关键代码实现:SPI初始化、页编程、扇区擦除、跨页写入等操作。通过实际示例演示了非对齐地址的数据读写,为嵌入式存储开发提供了完整解决方案。

2025-12-11 06:00:00 2218

原创 【OTA】手把手写BootLoader程序·软件IIC读写EEPROM(AT24C02)

本文详细介绍了STM32中I2C总线协议的原理与应用,展示了基于STM32的I2C编程实践,涵盖GPIO初始化、模式配置、单字节/多字节读写等核心功能的代码实现,概述了I2C的基本特性,包括其同步半双工通信方式、带应答机制和支持多设备挂载的特点。接着深入讲解了I2C的物理层设计要点,如开漏输出模式和上拉电阻的选择,最后以AT24C02 EEPROM为例,详细说明了设备地址设置、读写时序控制等具体应用技巧,并提供了完整的测试验证方案。

2025-12-10 22:00:00 1819

原创 【OTA】手把手写BootLoader程序·串口(USART)通过DMA环形缓冲区接收数据

本文介绍了STM32中DMA(直接存储器访问)的应用实现,重点阐述了USART1的DMA收发设计。文章首先概述DMA的基本原理和优势,然后详细讲解两种设计思路:无缓冲区直接处理和环形缓冲区异步处理。在代码实现部分,依次说明了GPIO引脚初始化、USART工作模式配置、DMA发送/接收设置、NVIC中断配置等关键步骤。特别对环形缓冲区管理进行了深入分析,包括缓冲区结构设计、空闲中断处理、数据拷贝机制和DMA重置流程。最后通过主函数示例展示了数据接收和回显功能,验证了缓冲区设计的有效性。

2025-12-10 06:00:00 955

原创 【STM32】一文详解硬件SPI读写Flash芯片W25Q64

本文详细介绍了SPI协议及其在STM32上的应用实现。主要内容包括:1. SPI协议层详解,包括四种工作模式、起始/终止条件和时序;2. STM32 SPI外设架构,涵盖引脚配置、时钟控制、数据收发流程;3. W25Q64 Flash存储器的特性、指令集和操作原理;4. 完整的代码实现方案,包括SPI初始化、数据读写、Flash设备ID读取、扇区擦除、页编程等核心功能。文章通过理论分析与代码示例相结合的方式,系统阐述了如何利用STM32的SPI接口驱动W25Q64 Flash存储器,为嵌入式存储应用开发提供

2025-12-09 21:30:00 1485 2

原创 嵌入式面试八股文(十七)·ADC采样、SPI运用、C语言基础知识运用

本文围绕单片机开发中的常见问题展开分析,主要包括以下内容:1. STM32 ADC采样点选择原理;2. SPI协议的工作模式与引脚功能解析;3. 中断嵌套对栈空间和程序效率的影响;4. 栈溢出问题的判断与解决方案;5. 确保中断服务程序原子性的方法;6. 位运算和宏定义的使用技巧;7. 指针与数组的地址运算差异;8. 结构体内存对齐规则及其影响因素。通过具体代码示例和理论分析,详细阐述了嵌入式开发中的关键知识点,并指出了实际应用中需要注意的技术细节和潜在问题。

2025-12-09 06:00:00 1609

原创 【STM32】SPI通讯协议入门解析

本文详细介绍了SPI(串行外设接口)协议及其在STM32中的应用。主要内容包括SPI协议层(四种工作模式、起始/终止条件)、STM32的SPI外设结构(通讯引脚、时钟/数据控制逻辑)以及相关库函数(初始化结构体、数据收发函数等)。SPI作为全双工同步总线,采用主从架构和片选信号机制,支持最高36Mbps通信速率。文章还阐述了STM32中SPI的配置方法,包括工作模式选择、时钟极性和相位设置等关键参数,为开发者提供了详细的SPI接口使用指南。

2025-11-15 22:15:31 1414 1

原创 非易失性存储器·W25Q64使用手册解读

本文介绍了W25Qxx系列NorFlash存储器的技术特性与应用方法。阐述了W25Q64控制逻辑中的状态寄存器机制和存储逻辑的分区管理(页/扇区/块);4. 核心指令:重点介绍了写使能(06h)、写禁止(04h)、读写状态寄存器(05h/01h)和读数据(03h)等关键指令的使用方法。

2025-11-15 22:14:52 1608

原创 【STM32】I2C协议使用浅析·硬件I2C代码编写

本文详细介绍了STM32的I2C总线接口,包括其物理层、协议层和硬件实现。主要内容涵盖I2C的基本特性(两根通信线SCL和SDA、同步半双工通信、支持多设备挂载)、物理层连接方式(开漏输出模式、上拉电阻的选取)、协议层组成(起始/终止信号、字节收发流程)、以及STM32的I2C硬件架构(时钟控制、数据收发逻辑等)。文章还详细解析了I2C的库函数配置方法,包括初始化结构体参数设置,并提供了完整的I2C引脚初始化和模式配置代码示例,最后给出了基于STM32的硬件I2C实现工程下载链接。

2025-11-12 05:00:00 1443 1

原创 【STM32】轻松搞懂推挽和开漏输出怎么用

本文详细解析了STM32 GPIO的推挽输出和开漏输出模式。通过分析MOS管开关状态,解释了推挽输出如何通过交替导通P-MOS和N-MOS实现电流"推挽",而开漏输出则保持P-MOS关闭。重点阐述了开漏输出的电平匹配特性,可通过外接电源实现不同电压芯片间的控制,并支持线与逻辑。最后对比了普通GPIO与复用功能模式的差异,指出复用模式下输出信号直接来自片上外设。

2025-11-10 23:00:00 2875

原创 【STM32】DMA超详细解析·入门级教程

本文介绍了STM32中DMA(直接存储器访问)的基本原理及其在USART数据传输中的应用,概述了DMA的功能特点,讲解了DMA的初始化流程,逐步讲解代码构成,内含源码可直接移植。

2025-11-10 06:00:00 4103 1

原创 STM32外设面试速通:UART、I2C、SPI、DMA、RAM/FLASH与ADC/DAC

文章系统性地梳理了嵌入式系统中最为关键的几种串行通信协议和核心外设/存储器(UART, I2C, SPI, DMA, ADC/DAC, RAM/FLASH),重点阐述了它们的工作原理、特性,尤其是它们之间的区别与联系。

2025-10-27 20:33:41 1380 4

原创 【Linux应用开发·入门指南】零基础学 Linux 进程控制·五万字入门指南

本文从程序与进程的概念、组成、状态讲起,逐步深入进程控制核心:用 system、fork/vfork、execve 实现进程启动,借 wait/waitpid 处理进程等待,再详解 UDS、管道、共享内存等进程通信方式,附 System V 与 POSIX 两种 IPC 实现及 perror、环境变量等拓展,帮你系统掌握进程控制全流程。

2025-10-27 06:00:00 3095 2

原创 Linux 进程面试考点:进程状态、通信方式、信号量等关键问题速记

聚焦 Linux 进程核心知识,从并发、同步、异步等基础概念,到父 / 子进程关系、孤儿 / 僵尸 / 守护进程定义,再到进程五状态转换、7 种通信方式及信号量原理,还拆解 PCB 包含的核心信息。内容覆盖进程管理全流程,帮你理清进程运行逻辑,不管是入门学习还是巩固基础,都能系统掌握 Linux 进程关键知识点。

2025-10-26 14:00:00 1067

原创 新手必看:C++10 组核心概念通俗解析(含指针、内存、绑定机制)

聚焦 C++10 组核心易混概念,从 new 与 malloc 的内存管理差异、野指针与悬挂指针的风险区别,到静态 / 动态绑定的实现逻辑、左值与右值的使用场景,再到 struct 与 class 的访问控制差异,搭配实例拆解原理。不管是理解指针类型、内存机制,还是掌握面向对象特性,都能帮你理清关键差异,夯实 C++ 基础。

2025-10-26 09:20:02 605

原创 搞定 C 语言核心概念:10 大高频对比

聚焦 C 语言 10 组核心易混概念,从全局 / 局部变量、#include<> 与 "" 的用法差异,到结构体 / 共用体、堆 / 栈的内存区别,再到 malloc/calloc、strcpy/memcpy 的实战运用,搭配代码示例拆解原理,帮你理清变量、指针、内存、数据结构等关键知识点,夯实 C 语言基础。

2025-10-25 17:30:12 981

原创 【Linux】一文掌握嵌入式 Linux 进程间通信(IPC):原理拆解 + 函数实战

本文系统介绍了Linux系统中常用的进程间通信(IPC)机制,包括Unix Domain Socket、管道(无名/有名)、共享内存、消息队列和信号量等。文章对比分析了各种IPC机制的特点、适用场景及性能差异,详细讲解了System V和POSIX两种标准下共享内存与消息队列的具体实现方法,并提供了相关API的使用示例和代码片段。此外,还介绍了信号处理的基本概念和实现方式,为开发者选择适合的进程间通信方案提供了全面参考。

2025-10-25 09:36:58 1663

原创 【Linux】小白也能懂的嵌入式 Linux 消息队列函数:基础概念与用法

消息队列是Linux系统中重要的进程间通信机制,克服了信号和管道的局限性。文章介绍了两种消息队列标准:SystemV和POSIX。SystemV消息队列通过msgget()创建/获取队列,msgsnd()发送消息,msgrcv()接收消息,msgctl()控制队列。POSIX消息队列则使用mq_open()、mq_timedsend()、mq_timedreceive()等函数。消息队列具有异步通信、消息边界、优先级、内核持久性等特点,适用于生产者-消费者模型。

2025-10-24 22:00:00 682 1

SD开移植FatFs文件系统·最新版本ff16

基于STM32移植最新版本FatFs文件(ff16)移植到SD卡上

2026-01-14

基于STM32使用SDIO读写SD卡数据.zip

基于STM32使用SDIO读写SD卡数据

2026-01-13

STM32官方SDIO固件整理

SDIO官方固件,用来进行对SD卡的编写,相关流程可以查看SD的文章: https://blog.csdn.net/manongdky/category_12517456.html?spm=1001.2014.3001.5482

2026-01-07

基于GD32实现USB虚拟串口通信实验

基于GD32实现USB虚拟串口通信实验,实验现象:用USB线接MINI USB口,再接电脑,打开电脑上串口调试器,115200波特率,发送HELLOWORLD,板子就会返回HELLOWORLD

2025-12-23

基于STM32移植FreeRTOS实现单通道ADC读取数据

基于STM32移植FreeRTOS实现单通道ADC读取数据,通过DMA转运数据 移植过程可以参考:https://blog.csdn.net/MANONGDKY/article/details/148102893 也可根据文章自行移植

2025-12-23

基于STM32移植FreeRTOS移植(任务的挂起和恢复)

基于STM32移植FreeRTOS移植,完成通过按键挂起和恢复任务,实现任务状态的转换。 移植过程可以参考:https://blog.csdn.net/MANONGDKY/article/details/147958312 可自行移植

2025-12-23

STM32移植FatFs文件系统(最新版本ff16)

基于STM32硬件SPI读写W25Q64,移植FatFs文件系统,版本为当前最新版本ff16版本,库函数实现对SPI Flash的文件系统移植,后续会将移植过程放到:https://blog.csdn.net/manongdky/category_12517456.html?spm=1001.2014.3001.5482 自行查阅移植过程。

2025-12-18

基于STM32硬件SPI读写W25Q64

STM32硬件SPI读写W25Q64,实现对Flash芯片W25Q64进行多页写入以及读取操作。 详细可以查看:https://blog.csdn.net/MANONGDKY/article/details/155744851?spm=1011.2415.3001.5331

2025-12-09

STM32软件IIC读写EEPROM(AT24C02)

基于STM32软件IIC读写EEPROM(AT24C02),代码编写可以参考:https://blog.csdn.net/MANONGDKY/article/details/154475520?spm=1011.2415.3001.5331

2025-12-08

基于STM32通过USART实现DMA环形缓冲区接收数据

基于STM32通过USART实现DMA环形缓冲区接收数据,接收的数据如果超出环形缓冲区的数量,后面的接收数据会回卷到前面的缓冲区,进行存储,实现过程可以查看:https://blog.csdn.net/MANONGDKY/article/details/155662492?spm=1011.2415.3001.5331

2025-12-08

基于STM32实现串口的DMA数据转运(增加超时检测功能)

基于STM32实现USART1的DMA数据发送,增加超时检测功能 该资源是在该文章的基础上进行的改进:https://blog.csdn.net/MANONGDKY/article/details/154383583?spm=1001.2014.3001.5501

2025-12-03

基于STM32实现RS485收发可变包长数据

基于STM32实现RS485收发可变包长数据,代码为了方便验证通过条件编译实现两种验证模式。 单板验证 0:自己通过串口调试助手发送数据看回传数据。 双板验证 1:表示接收显示的数据 2:表示发送数据 分别开启1和2下到两个板子上,进行验证,数据是正常的 对于可变包长数据的更改,找到Usart_RS485_CP.h当中的RS485_Data_MAX更改这个数据即可。 RS485_Data_MAX表示数据缓冲区最大值,也就是你这个可变包场最大接收到的值,例如RS485_Data_MAX为20,那么你可以接收1~20任意个数的数据,如果接收21个就会失败。

2025-11-23

STM32通过RS485接收可变包长数据

裸机代码,基于STM32实现通过USART2的引脚,RS485使能引脚为PA7,接收可变包长的数据,代码历程可变包长最大接收数据为此时为20,可根据自己需求更改,包头为57 58,包尾为 0D 0A,中间接收数据随机长度。 对于RS485不熟悉的可以参考:https://blog.csdn.net/MANONGDKY/article/details/149258356

2025-11-23

STM32硬件SPI读写W25Q64.zip

SPI 是一种高速、全双工的同步串行通信总线,而 W25Q64 则是基于 SPI 接口的大容量、高性能闪存芯片的典型代表。理解这两者是如何协同工作的,是进行固件开发、数据存储和 bootloader 设计等任务的基础。 资源通过硬件SPI实现W25Q64的读写。

2025-11-19

SPI+W25Q64协议整理文档

SPI 是一种高速、全双工的同步串行通信总线,而 W25Q64 则是基于 SPI 接口的大容量、高性能闪存芯片的典型代表。理解这两者是如何协同工作的,是进行固件开发、数据存储和 bootloader 设计等任务的基础。本文将首先概述 SPI 协议的核心机制,然后深入介绍 W25Q64 的主要特性、指令集和基本操作流程,为后续的驱动开发和调试工作奠定坚实的理论基础。

2025-11-15

STM32F103ZET6工程模版.zip

STM32嵌入式开发实战项,ZET6工程模版

2025-11-13

基于STM32移植FreeRTOS通过按键实现任务的挂起和恢复

本资源基于STM32微控制器,通过移植FreeRTOS实时操作系统,实现了通过外部按键对任务的动态挂起和恢复功能。 FreeRTOS移植:完整适配STM32硬件平台,支持任务管理、信号量、队列等核心功能 按键中断处理:通过外部中断检测按键事件,实现非阻塞式按键处理 任务动态管理:支持运行时挂起和恢复指定任务 状态反馈机制:通过LED指示或串口输出显示任务状态变化 多任务协调:确保任务挂起/恢复过程中的系统稳定性

2025-11-15

基于STM32移植FreeRTOS实现CAN总线通信

本资源基于STM32微控制器,通过移植FreeRTOS实时操作系统,实现了CAN总线的稳定通信。 FreeRTOS移植:完整适配STM32硬件平台,支持任务调度、队列、信号量等RTOS核心功能。 CAN通信:实现了CAN总线数据的收发功能,支持标准帧与扩展帧,具备硬件过滤和中断处理机制。 多任务管理:通过FreeRTOS任务分离CAN收发逻辑,提高系统响应效率与可维护性。 示例应用:提供发送/接收任务的代码示例,演示如何通过消息队列进行任务间通信。

2025-11-15

STM32软件IIC读写EEPROM.zip

软件I2C接线方式可根据需求自行修改,EEPROM的A0、A1、A2引脚接地,地址为0xA0,读写测试程序,可直接通过USART1打印数据进行查看,对于IIC不熟悉可以查看。 硬件I2C:https://blog.csdn.net/MANONGDKY/article/details/154696623?spm=1001.2014.3001.5501 软件I2C:https://blog.csdn.net/MANONGDKY/article/details/139142429

2025-11-13

基于STM32的硬件IIC读取EEPROM.zip

基于STM32的硬件IIC读取EEPROM

2025-11-12

USART通过DMA转运数据(HAL库版本)

主要就是通过串口实现DMA不定长数据的收发,具体实现逻辑可以参考文章: https://blog.csdn.net/MANONGDKY/article/details/158498592?spm=1001.2014.3001.5501 可以自行移植使用。

2026-03-14

【嵌入式八股文】C语言核心技术与嵌入式系统设计

内容概要:本文系统梳理了嵌入式开发中的核心知识点,涵盖C语言基础、数据结构、嵌入式系统原理及多任务操作系统相关内容。通过问答形式深入讲解了static、const、volatile等关键字的作用,指针、结构体、枚举、联合体的使用方法,以及数组、链表、栈、队列、二叉树等数据结构的实现与应用。进一步阐述了中断处理、RTOS、固件概念、PWM、SPI、I2C、UART、CAN等嵌入式核心技术的工作原理,并结合实际场景分析了进程与线程、死锁、互斥锁与信号量的区别及线程同步机制。全文注重理论与实践结合,突出嵌入式开发中资源受限、实时性要求高等特点。; 适合人群:具备一定C语言基础,从事或有意从事嵌入式开发的研发人员,尤其是工作1-3年、希望夯实基础并提升系统设计能力的工程师。; 使用场景及目标:① 掌握嵌入式开发中C语言高级特性的正确用法,避免常见编程陷阱(如野指针、内存泄漏、编译器优化问题);② 理解并实现常用数据结构,提升代码组织与内存管理能力;③ 深入理解中断、通信协议、RTOS等嵌入式核心技术,支撑实际项目开发;④ 掌握多任务环境下的同步与互斥机制,构建稳定可靠的嵌入式系统。; 阅读建议:建议结合具体嵌入式平台(如STM32)动手实践文中示例代码,重点关注volatile、中断处理、RTOS任务同步等易出错环节,通过调试加深理解,并在项目中逐步应用相关技术以巩固知识。

2026-03-12

【嵌入式八股文】常见问题解析与关键技术指南

内容概要:本文系统梳理了嵌入式系统领域的常见问题,涵盖基础概念、驱动与RTOS、通信协议以及系统设计与优化四大类别,详细解析了嵌入式系统的定义、特点及核心技术原理,包括MCU与MPU区别、ARM架构优势、GPIO/ADC/DAC工作原理、中断机制、SPI/I2C/CAN等通信协议对比,深入探讨了RTOS的任务调度、消息队列、信号量、互斥锁等机制,并涉及低功耗设计、可靠性保障、安全性策略、PCB布局布线、内存管理与性能优化等工程实践要点,全面呈现嵌入式开发中的关键技术挑战与解决方案。; 适合人群:具备一定电子工程或计算机背景,从事嵌入式软硬件研发1-3年的工程师或相关专业学生。; 使用场景及目标:①帮助开发者深入理解嵌入式系统核心机制,如中断处理、实时调度、电源管理等设计原理;②指导实际项目中通信协议选型、低功耗优化、可靠性与安全设计等关键决策;③辅助解决开发过程中常见的死锁、内存泄漏、EMI干扰等问题。;

2026-03-11

基于CH32实现一键开关机设计(定时器版本)

代码完成流程,可以在如下链接跳转到相关博客内容,找到一键开关机定时器版本文章,可以自行移植: https://blog.csdn.net/manongdky/category_12776439.html?spm=1001.2014.3001.5482 代码完成功能: 长按按键(≥1 秒):触发开机 短按按键(30ms):释放按键后切换 LED 工作模式,支持 3 种 LED 模式:全灯闪烁、流水灯、单灯循环闪 长按按键(≥3 秒):触发关机

2026-03-07

基于CH32实现定时器控制LED灯闪烁

通过通用定时器TIM2,实现LED灯每隔1s亮灭一次。 所有资源其对应的流程释意,都可以在如下链接找到对应博客,可自行了解移植: https://blog.csdn.net/manongdky/category_12776439.html?spm=1001.2014.3001.5482

2026-03-07

基于CH32实现非阻塞式一键开关机电路

代码完成流程,可以在如下链接跳转到相关博客内容,找到一键开关机相关文章,可以自行移植: https://blog.csdn.net/manongdky/category_12776439.html?spm=1001.2014.3001.5482 代码完成功能: 长按按键(≥1 秒):触发开机 短按按键(30ms):释放按键后切换 LED 工作模式,支持 3 种 LED 模式:全灯闪烁、流水灯、单灯循环闪 长按按键(≥3 秒):触发关机

2026-03-06

基于沁恒CH32实现GPIO点灯实验

所有资源其对应的流程释意,都可以在如下链接找到对应博客,可自行了解移植: https://blog.csdn.net/manongdky/category_12776439.html?spm=1001.2014.3001.5482

2026-03-04

基于STM32实现通用定时器TIM2控制LED闪烁实验(HAL库版本)

所有资源其对应的流程释意,都可以在如下链接找到对应博客,可自行了解移植: https://blog.csdn.net/manongdky/category_12888082.html?spm=1001.2014.3001.5482 TIM(Timer)定时器,可以对输入的时钟进行计数,并在计数值达到设定值时触发中断,而在STM32F1系列当中定时器用有16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时。同时STM32的定时器还支持级联的状态,也就是一个定时器的输出当做另一个定时器的输入,每次级联都相当于当前时间在乘以65536*65536,这个原因等下面代码的时候再细讲,先了解一下。 除此之外,TIM(Timer)定时器不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能。 根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型。三者之间属于包含关系,通用定时器包含基本定时器(拥有基本定时器的全部功能),同时高级定时器包含通用定时器。

2026-03-02

基于STM32实现ADC采集电压(HAL库版本)

所有资源其对应的流程释意,都可以在如下链接找到对应博客,可自行了解移植: https://blog.csdn.net/manongdky/category_12888082.html?spm=1001.2014.3001.5482 ADC全称是(Analog-to-Digital Converter)模拟-数字转换器,一般我们把模拟信号(Analog signal) 用A来进行简写,数字信号(digital signal) 用D来表示。主要用于将连续传输的模拟信号转换为数字信号,便于数字系统(如中央处理器CPU、微控制器MCU等)对传输信息进行快速处理和分析。

2026-03-02

基于STM32实现串口(USART)DMA收发数据(HAL库版本)

所有资源其对应的流程释意,都可以在如下链接找到对应博客,可自行了解移植: https://blog.csdn.net/manongdky/category_12888082.html?spm=1001.2014.3001.5482 串口通讯 (Serial Communication) 是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。 DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源。

2026-03-02

基于STM32实现串口(USART)中断接收不定长数据(HAL库版本)

所有资源其对应的流程释意,都可以在如下链接找到对应博客,可自行了解移植: https://blog.csdn.net/manongdky/category_12888082.html?spm=1001.2014.3001.5482 串口通讯 (Serial Communication) 是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。

2026-02-27

基于STM32实现串口(USART)中断接收数据(HAL库版本)

所有资源其对应的流程释意,都可以在如下链接找到对应博客,可自行了解移植: https://blog.csdn.net/manongdky/category_12888082.html?spm=1001.2014.3001.5482 串口通讯 (Serial Communication) 是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。

2026-02-27

基于STM32实现串口(USART)阻塞式接收数据(HAL库版本)

串口通讯 (Serial Communication) 是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。

2026-02-26

基于STM32实现串口(USART)发送数据(HAL库版本)

串口通讯 (Serial Communication) 是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。

2026-02-26

基于STM32实现按键通过外部中断(EXTI)实现LED灯的亮灭

EXTI(Extern Interrupt)外部中断 EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序。

2026-02-25

基于STM32实现系统定时器点灯实验(HAL版本)

SysTick— 系统定时器是属于 CM3 内核中的一个外设,内嵌在 NVIC 中。系统定时器从硬件特性来看: ·它是一个24 位向下递减计数器,最大计数值为 2²⁴‑1; ·计数时钟通常来源于系统时钟 SYSCLK,常见配置为 72MHz; ·每计数一次所消耗的时间为 1/SYSCLK,计时精度由系统主频决定。 由于属于内核级外设,只要是 CM3 内核的单片机,无论厂家、型号差异,其 SysTick 的寄存器定义、工作机制完全一致。

2026-02-25

基于STM32实现GPIO输入功能(HAL版本按键控制LED灯亮灭)

 GPIO(General Purpose Input Output)即通用输入输出端口,是 STM32 芯片可直接控制的引脚。通过将 GPIO 引脚与外部设备连接,可实现与外部设备的通讯、控制及数据采集等功能。所有 GPIO 引脚均具备基本的输入和输出能力。 除此之外,按键机械触点断开、闭合时,由于触点的弹性作用,按键开关不会马上稳定接通或一下子断开,使用按键时会产生图按键抖动说明图中的带波纹信号,需要用软件消抖处理滤波,不方便输入检测。可以利用电容充放电的延时,消除了波纹,从而简化软件的处理,软件只需要直接检测引脚的电平即可。

2026-02-25

基于STM32实现GPIO输出功能(HAL版本LED流水灯实验)

GPIO(General Purpose Input Output)即通用输入输出端口,是 STM32 芯片可直接控制的引脚。通过将 GPIO 引脚与外部设备连接,可实现与外部设备的通讯、控制及数据采集等功能。所有 GPIO 引脚均具备基本的输入和输出能力,本实验实现了LED流水灯功能。

2026-02-25

手把手写BootLoader程序·无OTA事件B区跳转到A区

主要完成B区向A区的跳转功能 相关文章可以查看相关章节:https://blog.csdn.net/manongdky/category_13089941.html?spm=1001.2014.3001.5482

2026-01-26

DMA数据转运+W25Q54+EEPROM+FLASH初始融合代码

改代码是OTA远程升级前四小节,编写BootLoader需要的几个功能的融合,在此工程上进行后续的操作。 完整的设计思路:https://blog.csdn.net/manongdky/category_13089941.html

2026-01-23

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

TA关注的人

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