自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(82)
  • 资源 (4)
  • 收藏
  • 关注

原创 GCC __attribute__ 常用属性速查与实战

在嵌入式开发中,标准 C 语言往往难以满足对硬件底层的精确控制需求。GCC 的 __attribute__ 机制是链接软件与硬件的桥梁,也是进阶开发的必备技能。本文系统整理了嵌入式工程中最常用的 8 个属性(包括 packed、aligned、section、weak、naked 等),从内存对齐与布局、链接器行为控制、底层指令生成三个维度进行深度解析。结合通信协议解析、DMA 缓冲区管理、RTOS 上下文切换等真实硬件场景,提供了详实的代码示例与避坑指南,助你彻底掌握编译器行为,编写出高效、健壮的底层代码

2026-01-09 11:18:33 818

原创 【避坑指南】结构体取值不一致:#pragma pack 导致的 ABI 灾难

摘要: 本文揭露嵌入式开发中因#pragma pack误用导致的结构体数据错乱问题。当不同源文件对同一结构体的对齐方式理解不一致时(如main.c使用默认对齐,driver.c强制1字节对齐),会出现指针地址相同但数据读取错位的"ABI不匹配"现象。建议使用__attribute__((packed))替代全局#pragma pack,并添加静态断言_Static_assert验证结构体大小,避免这种隐蔽的运行时错误。该问题源于链接器不检查类型一致性,只有精准控制对齐方式才能确保二进制接

2026-01-09 10:18:38 713

原创 STM32 手册寄存器属性

本文解析了STM32数据手册中常见的寄存器属性缩写,通过实例代码说明理解寄存器属性对编程的重要性。详细列出了12种寄存器访问类型,包括读写(rw)、只读(r)、写0/1清除(rc_w0/rc_w1)、读清除(rc_r)等,并给出每种属性的英文全称、中文含义及操作规则说明。特别解释了rc_w1类型寄存器需要"先读后写"的操作原理,为开发者正确理解和使用STM32寄存器提供了实用参考。

2025-12-25 11:13:02 527

原创 STM32 RTC时钟不准的问题

摘要: 针对STM32 RTC时钟误差问题,提出两种优化方案:1)使用外部32.768K晶振(LSE),通过STM32CubeMX配置LSE选项以提高精度;2)若仍存在误差,可增强LSE驱动能力,选择"High Drive Capability"模式,对应代码为__HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_HIGH)。两种方法有效将日误差控制在1秒内。配图展示了CubeMX中的关键配置界面。(98字)

2025-12-25 11:09:23 406

原创 使用STM32对SD卡进行性能测试

针对高速SD卡存储需求,测试了STM32F407和H750开发板的SDIO性能。标准时钟下,H750写速19.28MB/s,F407为7.87MB/s;超频至80/42MHz后分别提升至23.91MB/s和12.69MB/s。使用exFat文件系统时,H750写速18.65MB/s。测试发现单次写入32KB时速率最佳(H750达29.41MB/s),满足5-40Mbps需求。结果表明H750超频后性能显著优于F407,适合高速日志存储场景。

2025-12-22 15:01:50 621

原创 移植FatFs(基于STM32-SD卡)

本文STM32F4和STM32H7通用并经过验证。

2025-12-22 14:58:11 1472

原创 移植littlefs

本文介绍了基于SFUD接口移植LittleFS文件系统到SPI Flash的方法。移植过程主要涉及配置lfs_config结构体,实现底层读写擦除接口,并通过SFUD库统一管理Flash设备。文章提供了完整的移植代码示例,包括初始化、挂载、格式化以及文件读写操作。测试结果显示成功实现了在SPI Flash上创建、写入和读取文件的功能,验证了移植的正确性。该方案不依赖具体MCU型号,具有较好的通用性。

2025-12-10 13:42:42 660

原创 STM32F4操作内部FLASH简洁版

本文介绍了STM32 Flash操作的基本方法。主要包括:1)擦除操作使用HAL_FLASHEx_Erase函数,以扇区为单位进行擦除;2)写入操作使用HAL_FLASH_Program函数,支持字节、半字、字和双字写入;3)读取操作可直接访问Flash地址获取数据。文中提供了完整的代码示例,包括擦除、写入和读取的实现方法,并展示了测试结果。所有Flash操作都需要先解锁,完成后重新上锁。测试结果表明这些方法能有效完成Flash的擦除、写入和读取操作。

2025-07-01 14:51:20 1000

原创 STM32 真随机数RNG使用

本文介绍了如何在STM32中使用硬件随机数生成器(RNG)。首先通过STM32CubeMX启用RNG功能,自动生成初始化代码。然后演示了两种获取随机数的方式:轮询模式和中断模式。轮询方式需要检查返回值,中断方式则通过回调函数获取数据。注意两个随机数之间需要间隔40个PLL48CLK时钟周期。最后展示了实际运行时的随机数输出结果,验证了每次复位都能生成不同的随机数。代码示例清晰展示了RNG的配置和使用方法。

2025-07-01 14:31:38 707

原创 RT-Thread源码阅读(4)——定时器管理

RT-Thread定时器分为硬件定时器和软件定时器两种类型: 硬件定时器在systick中断服务函数中处理超时 软件定时器通过高优先级线程处理超时 通过宏RT_USING_TIMER_SOFT控制是否启用软件定时器 定时器使用: 通过rt_timer_create创建定时器 参数包括名称、回调函数、周期等 通过rt_timer_start启动定时器 定时器管理机制: 使用跳表算法管理定时器链表 定时器按超时时间有序排列 软件定时器会唤醒定时器线程处理超时 定时器启动流程: 设置超时时间 将定时器插入到有序链

2025-05-26 13:52:02 542

原创 RT-Thread源码阅读(3)——内核对象管理

RT-Thread内核对象管理机制解析 RT-Thread通过_object_container数组实现内核对象分类管理,该数组按对象类型(线程、信号量等)组织,每个元素包含类型标识、对象链表和对象大小。关键特性包括: 使用链表结构(rt_list_t)管理同类对象,通过rt_object_allocate动态创建对象并插入链表 对象基础结构rt_object包含名称、类型标志和链表节点,所有内核对象均继承该结构 提供遍历接口如list_find_init,支持通过链表查询对象状态(如list_thread

2025-05-26 13:49:45 694

原创 RT-Thread源码阅读(2)——任务启动与调度

因此针对满堆栈,写入数据的流程为先移动SP指针再填写有效数据;观察后续代码可知,R4-R11在地址小的空间,也会被先出栈,此时返回的栈指针stk指向的就是R4,返回给。是对应着当前栈顶,例如栈空间buff[100],不减的话栈指向buff[100],访问就会溢出。,可以知道怎么调度,至于为什么调度,什么时候调度,请后续了解。当SP指针指向的地址空间没有存放有效数据,则称之为空堆栈。当SP指针指向的地址空间存放有有效数据,则称之为满堆栈。第一眼看这个代码,可能会有一个疑问,调用。线程初始化,相关解释见注释。

2025-05-22 16:30:56 669

原创 RT-Thread源码阅读(1)——基本框架

本文基于RT-Thread V4.1.1和STM32F103(Cortex-M3)平台,使用STM32CubeIDE(GCC)编译环境,旨在解析RT-Thread的基本设计逻辑。文章首先介绍了双向链表的核心操作,包括插入、初始化和判断链表是否为空等。接着,通过链表元素反推内核对象地址的方法,展示了如何从链表节点获取线程对象的结构体首地址。随后,文章详细描述了RT-Thread的启动流程,包括板级初始化、调度器初始化、线程创建和调度器启动等步骤。最后,文章深入探讨了调度器的初始化过程,特别是优先级相关的变量和

2025-05-22 16:28:29 1329

原创 STM32实现SPI转USB虚拟串口输出(实测40M时钟不丢包)

MCU端SPI时钟40M,满速发送,实测PC端串口接收长时间不丢包

2025-04-28 10:02:39 915

原创 lwip学习——PBUF结构(3)

PBUF是lwip中重要的结构

2025-04-28 09:39:39 475

原创 lwip学习——内存池(2)

lwip学习——内存池

2025-03-18 14:10:52 1231

原创 lwip学习——内存堆(1)

lwip学习——内存堆

2025-03-18 14:07:51 443

原创 VSCode C语言环境(多文件一键运行)

VSCode C语言环境 支持多文件一键运行

2025-03-12 15:49:40 631

原创 STM32F4使用高速USB虚拟串口 (CherryUSB)

STM32使用高速USB

2025-03-12 15:46:23 3318 4

原创 Python中的字节操作

用Python制作协议类的工具,经常会用到字节操作

2025-03-05 11:12:42 333

原创 Python丢包测试脚本(以串口为例)

通过python脚本测试串口的丢包率

2025-03-05 11:11:08 531

原创 Python正则表达式学习

非贪婪,遇到开始和结束就进行截取,因此截取多次符合的结果,中间没有字符也会被截取。用于在给定的字符串开头进行模式匹配,即可以通过此方法来判断目标的格式是否符合要求。用于在给定的字符串中查找所有匹配的模式,并以列表的形式返回匹配结果。一个"."就是匹配除 \n (换行符)以外的任意一个字符。这里必须使用非贪婪,不然所有返回都是0x0000b30a。以匹配成功的正则表达式进行分割字符串,返回字符串列表。与match不同的是search在整个字符串中匹配。贪婪,匹配从.*前面为开始到后面为结束的所有内容。

2025-01-09 14:09:45 461

原创 STM32中的MCO

在嵌入式系统中,时钟是一个至关重要的部分。STM32微控制器系列提供了一个名为MCO(Microcontroller Clock Output)的功能,它允许用户将微控制器内部的时钟信号输出到外部设备。这对于调试、测试或者与其他设备同步时钟非常有用。在这篇博客中,我们将深入了解STM32中的MCO功能,介绍如何配置MCO以及它的常见应用。

2025-01-09 14:07:52 2706

原创 I.MX6ULL裸机开发之串口篇

配置I.MX6ULL串口

2024-08-01 09:30:20 582

原创 I.MX6ULL裸机开发之时钟篇

在嵌入式开发中,时钟配置是至关重要的一部分。它影响整个系统的运行速度、定时和能耗等多个方面。作为一位合格的嵌入式开发工程师,总不能连内核、外设、总线各自的频率都不清晰吧?

2024-08-01 09:29:01 1073

原创 解决elf转bin文件超大

解决elf转bin文件超大

2024-07-17 11:13:31 1166

原创 哈希表简介

哈希表(Hash Table)是一种非常高效的数据结构,广泛应用于需要快速插入、删除和查找操作的场景中。哈希表是一种将键(Key)映射到值(Value)的数据结构。其核心思想是通过一个哈希函数将键转化为哈希值,然后将该哈希值映射到表中的索引位置。

2024-07-17 11:11:30 564

原创 内联汇编简介

在C语言中嵌入汇编(Assembly)代码,可以使用内联汇编(Inline Assembly),这在一些需要精确控制硬件或者优化性能的场合非常有用以下是关于ASM语法的介绍,主要基于GCC(GNU Compiler Collection)提供的内联汇编特性。

2024-06-03 10:30:12 283

原创 Makefile教程(附通用模板)

Makefile教程(附通用模板)

2024-06-03 10:28:17 1495

原创 MAC开发I.MX6ULL环境搭建

基于MacOS开发I.MX6ULL

2024-03-27 09:19:28 845

原创 MAC使用Clion开发STM32

基于MacOS下的CLion开发 STM32

2024-03-27 09:16:30 1961

原创 Makefile+OpenOCD开发STM32

下可找到,第一个是调试器的配置文件,第二个是芯片的配置文件,可以合二为一。平台:Windows11(Linux,MAC同理)下载对应平台工具链并添加到环境变量,使用。打印空间信息即编译成功,否则日志中会报错。第三个是上一节编译出的hex文件。是执行完成后退出OpenOCD。是下载成功后复位芯片。

2024-03-15 09:45:16 1493

原创 STM32移植SFUD

SFUD是一款开源的串行 SPI Flash 通用驱动库。由于现有市面的串行 Flash 种类居多,各个 Flash 的规格及命令存在差异, SFUD 就是为了解决这些 Flash 的差异现状而设计,让我们的产品能够支持不同品牌及规格的 Flash,提高了涉及到 Flash 功能的软件的可重用性及可扩展性,同时也可以规避 Flash 缺货或停产给产品所带来的风险。

2024-03-15 09:44:20 1784 1

原创 RT-Thread源码阅读笔记

本文旨在理解RT-Thread设计的基本逻辑

2024-01-12 18:31:11 2165 1

原创 IIC学习之SHT30温湿度传感器(基于STM32)

介绍IIC和SHT30温湿度传感器的使用

2024-01-12 10:50:34 3644 1

原创 GCC中常用的内建函数

GCC(GNU Compiler Collection)是一个包含多个编程语言的编译器集合,而内建函数通常是为了提高代码性能或者实现一些特定功能而在编译器层面提供的函数。

2024-01-08 16:15:19 1350

原创 SM4加密算法例程(新增CTR模式)

SM4加密算法例程

2024-01-08 16:06:16 4622 1

原创 MobaXterm自定义关键字高亮(解决绿色不亮问题)

终端中的一些关键字高亮可以提高我们的效率,本文是解决在部分关键字没有高亮的情况下,添加自定义关键字使其高亮

2023-12-28 16:38:30 7383 2

原创 Cortex-M与RISC-V区别

Cortex-M以STM32H750为代表,RISC-V以芯来N305为代表RTOS版本为RT-Thread 4.1.1

2023-11-24 16:34:18 2907 2

原创 STM32驱动QSPI Flash

W25Q64存储容量共64M-bit/ 8M-byte,32768页(pages)、每页256-bytes,最大一次可编程256-bytes一次擦除大小可以为16页(4KB)、128页(32KB)、256页(64KB)或者全擦除W25Q64JV有2048个可擦除扇区(sectors),或者可以说有128个可擦除块(blocks关系 1 Block = 16 sectors;1 sector = 4KB,所以算起来能达到8M-byte编程即写数据,由于Flash的特性,只能从1编程0。

2023-11-24 16:22:25 3053 1

STM32+FreeRTOS 使用SystemView监控系统配套源码

STM32+FreeRTOS 使用SystemView监控系统配套源码

2024-12-26

IIC学习之SHT30温湿度传感器(基于STM32)配套资料

https://blog.csdn.net/qq_36973838/article/details/135546011

2024-01-12

STM32驱动QSPI Flash

STM32驱动QSPI Flash

2023-11-24

STM32+FreeRTOS 使用SystemView监控系统

STM32+FreeRTOS 使用SystemView监控系统 STM32+FreeRTOS 使用SystemView监控系统 STM32+FreeRTOS 使用SystemView监控系统 STM32+FreeRTOS 使用SystemView监控系统 STM32+FreeRTOS 使用SystemView监控系统 STM32+FreeRTOS 使用SystemView监控系统 STM32+FreeRTOS 使用SystemView监控系统 STM32+FreeRTOS 使用SystemView监控系统 STM32+FreeRTOS 使用SystemView监控系统 STM32+FreeRTOS 使用SystemView监控系统 STM32+FreeRTOS 使用SystemView监控系统 STM32+FreeRTOS 使用SystemView监控系统 STM32+FreeRTOS 使用SystemView监控系统 STM32+FreeRTOS 使用SystemView监控系统

2023-07-11

STM32F103-FreeRTOS基础工程,0错误0警告 FreeRTOS V9.0源码

STM32F103-FreeRTOS基础工程,0错误0警告。 FreeRTOS V9.0源码 STM32F103-FreeRTOS基础工程,0错误0警告。 FreeRTOS V9.0源码 STM32F103-FreeRTOS基础工程,0错误0警告。 FreeRTOS V9.0源码 STM32F103-FreeRTOS基础工程,0错误0警告。 FreeRTOS V9.0源码 STM32F103-FreeRTOS基础工程,0错误0警告。 FreeRTOS V9.0源码 STM32F103-FreeRTOS基础工程,0错误0警告。 FreeRTOS V9.0源码 STM32F103-FreeRTOS基础工程,0错误0警告。 FreeRTOS V9.0源码 STM32F103-FreeRTOS基础工程,0错误0警告。 FreeRTOS V9.0源码 STM32F103-FreeRTOS基础工程,0错误0警告。 FreeRTOS V9.0源码 STM32F103-FreeRTOS基础工程,0错误0警告。 FreeRTOS V9.0源码

2023-07-11

J-Link驱动V7.60 64位版本

J-Link驱动V7.60 64位版本 J-Link驱动V7.60 64位版本 J-Link驱动V7.60 64位版本 J-Link驱动V7.60 64位版本 J-Link驱动V7.60 64位版本 J-Link驱动V7.60 64位版本 J-Link驱动V7.60 64位版本 J-Link驱动V7.60 64位版本 J-Link驱动V7.60 64位版本 J-Link驱动V7.60 64位版本 J-Link驱动V7.60 64位版本 J-Link驱动V7.60 64位版本 J-Link驱动V7.60 64位版本 J-Link驱动V7.60 64位版本 J-Link驱动V7.60 64位版本 J-Link驱动V7.60 64位版本

2023-07-04

STM32F103 RT-Thread 工程

STM32F103 + RT-Thread V4.1.1 0错误 0警告

2023-06-28

Kingst VIS v3.6.0

Kingst VIS v3.6.0

2023-02-17

iperf-1.7.0

iperf 1.7.0——测试网络吞吐量

2022-08-23

STM32F103-FreeRTOS基础工程.rar

STM32F103-FreeRTOS基础工程,0错误0警告。

2021-12-06

nRF5_SDK17.0.2_offline_doc.rar

Nordic系列芯片SDK说明文档离线版,不用担心访问网站速度慢了。

2021-05-13

mqttfx-1.7.1-windows-x64.rar

MQTT调试工具、支持MQTT协议的全部功能,简单易用,是一个调试利器,并且支持SSL。我们在编写MQTT应用的前期,可以通过MQTT.fx验证想法。

2020-07-05

SHT20源代码及中英文手册.rar

关于SHT20温湿度传感器的文档和源代码,具体包含中文手册、英文手册、C语言代码,配合我的博客对此传感器进行仔细讲解。

2020-03-29

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

TA关注的人

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