- 博客(20)
- 收藏
- 关注
原创 RT-Thread 在SD卡实现ulog+时间戳保存不同日志方法
RT-Thread系统中的ulog日志模块设计与实现 摘要:本文介绍了RT-Thread系统中的ulog日志模块,解决了嵌入式开发中日志管理的痛点问题。通过分析ulog的两种后端实现方式(控制台输出和文件保存),详细阐述了日志系统的设计思路。重点说明了文件后端的实现方法,包括日志文件轮转机制、分类存储等功能,并提供了具体实现代码。该系统支持按模块分类存储日志,设置最大文件数量和大小限制,有效解决了产品运行日志记录和问题排查的难题,为嵌入式系统开发提供了实用的日志管理方案。
2025-11-04 21:56:21
716
原创 STM32H750 + RT-Thread studio实现SDMMC功能(二)功能配置——SDMMC功能实现
本文介绍了在RT-Thread系统下适配STM32H750 SDMMC功能的实现过程。由于H7系列的SDRAM特性与F1/F4系列不同,需要替换原有SDIO驱动层代码。作者提供了两种解决方案:直接替换为ART-PI开发板的drv_sdio驱动或自行编写SDIO块设备驱动。详细说明了使用CubeMX配置SDMMC为4总线模式、40MHz时钟频率,以及在RT-Thread Studio中的工程配置步骤,包括SDIO宏定义设置和驱动层代码移植。最终实现了SD卡功能在H750开发板上的正常运行,并指出环境配置是开发
2025-10-31 00:34:32
1182
原创 STM32H750 + RT-Thread studio实现SDMMC功能(一)环境配置——代码通过ST-Link烧录到片外flash
摘要:本文针对STM32H750XBH6开发中的代码体积超限问题,提出使用外部Flash(W25Q256)的解决方案。文章详细介绍了RT-Thread环境下的配置过程,包括修改ld链接文件调整内存分区、添加下载算法、重定向中断向量表等关键步骤。并分享了bootloader程序的烧写方法。
2025-10-30 15:35:45
940
原创 嵌入式内存学习二——通过官方文档讲解内存与代码之间的桥梁—ld链接脚本
本文详细讲解了MCU的链接脚本(.ld)配置方法。通过ld官方文档讲解ld各指令/语法内容,且讲完概念还有源码ld实战讲解。
2025-08-16 11:25:23
1053
原创 学习寄存器——GPIO(二)学习BSRR BRR ODR寄存器的原子性和在HAL库的应用
本文探讨了STM32 GPIO寄存器操作中的原子性问题。通过对比ODR、BSRR和BRR寄存器的特性,指出ODR寄存器在修改单个GPIO口时需保护其他位,而BSRR寄存器能实现原子操作,确保任务不被中断打断。分析表明,BSRR适合需要原子性的场景,ODR则更适合频繁翻转操作。文章还结合HAL库的实现,解释了不同寄存器在具体应用中的选择依据,强调应根据实际需求在安全性和性能之间做出权衡。
2025-07-20 13:05:33
1160
原创 根据ARM手册,分析ARM架构中,原子操作的软硬件实现的底层原理
RTOS中抢占式任务调度可能导致共享数据运算丢失,原子操作是解决方案。原子操作指不可中断的操作,通过硬件指令(如ARM的LDREX/STREX)或软件锁实现。硬件实现性能高但依赖硬件支持,软件实现通用性强但性能较低。随着项目复杂度提升,原子操作对保障数据完整性至关重要,了解其底层实现有助于开发高性能并发系统。
2025-07-19 19:55:47
1303
原创 函数指针的回调函数与函数跳转执行
本章主要讲解了函数指针,并讲解了函数指针的两个重要知识点的使用方法:回调函数使用与跳转执行,举例了这两个方法的使用场景。
2025-06-20 17:51:14
1070
原创 嵌入式内存学习一——根据Cortex-M3(包括STM32F1)权威指南讲解MCU内存架构与如何查看编译器生成的地址具体位置
本文详细介绍了Cortex-M3处理器的存储器映射结构,重点分析了RAM和FLASH的基本概念及作用。RAM用于存储运行时的数据和变量,包括堆栈和动态分配内存;FLASH则存储程序代码和常量数据。文章还解析了程序的典型内存分布,包括.text、.rodata、.data、.bss、堆和栈等区域,并通过示例说明了代码变量的存储方式。此外,介绍了如何通过.map文件查看各区域的地址位置,并强调了合理设置堆栈空间的重要性,以避免栈溢出导致程序崩溃。
2025-05-23 16:27:38
1652
原创 基于HAL库的us延时的多种方法实现
本章讲解了三种HAL库环境下us的实现原理和实现方法,第二种方法原理加入了数学的积分定义的思想作类比,帮助读者更好的理解本章的内容
2025-05-01 20:39:00
1786
原创 学习寄存器——时钟频率的配置
在上一节的GPIO端口设置的时候,我们直接在RCC打开了寄存器的时钟,然后直接配置GPIOC的功能。之所以能成功,是因为我们的时钟频率已经被标准库/HAL库初始化了,不需要我们配置,但有些外设的配置是需要定制时钟频率的——例如USART的波特率设置,因此学会时钟频率的配置对我们学习其他外设也有很大帮助。本章实现功能:选择外部时钟源获得72MHz时钟频率。
2025-04-27 19:09:16
1200
原创 学习寄存器——GPIO(一)(根据手册用结构体封装寄存器)
目的:学习底层,减少对ST官方HAL库/标准库的依赖与其他文章不同的是,本章与HAL库/标准库一样使用结构体进行封装寄存器,并讲解HAL库/标准库封装原理。
2025-03-31 19:56:47
1378
原创 基于官方文档实现STM32的USART不定长数据收发
目的:在USART多种功能和函数中,如何不需要背函数的前提,快速寻找我们所需功能的函数。本章节主要讲解如何查看官方文档进行USART串口配置,快速精确查找各种功能函数。
2025-03-13 19:46:23
1347
4
原创 对于各类显示屏的中文编码输出错误或不显示问题的4种解决办法(以微雪墨水屏的显示错误的解决办法为例)
在操作微雪墨水屏时新创建了一个文件输出中文的时候一直输出不出来,去查了问题原来是TXT文件的编码问题。文件的编码从创建文件的时候就定下来了,你输入到该文件的中文或者其他非英文字符都会变成该文件的编码。例如我创建一个.c文件,使用记事本的形式打开,就能看到你的文件在使用什么编码。你输入进去的文字和特殊符号都会变成该编码。运行的时候,如果你用取模软件取到了GB2312字符,那到时候在显示屏要不就显示不出来,要不显示的就是一个乱码。
2024-11-24 20:55:23
727
原创 基于RT-Thread的微雪墨水屏(2.9inch)SPI移植实现
本章节主要实现通过文档了解墨水屏的SPI通信方式,并通过硬件SPI和软件SPI方法配置SPI驱动微雪墨水屏。目前已在STM32F103ZET6和STM32H750XBH6中实验成功
2024-11-19 21:11:52
2824
原创 基于官方文档对微雪墨水屏(2.9inch)的示例代码(STM32)进行解析
本文章解析一下微雪官方的STM32代码示例工程,纯技术分享。有问题欢迎讨论,有错误欢迎指出。
2024-11-18 12:50:59
3599
1
原创 RTduino的工程创建——基于STM32F103C8t6最小系统板
我在RT-Thread studio中无意发现了可以与arduino工程联合使用,然后去查找了一下资料,发现RTT官方发布的版本已经是2022年的版本了,目前RTT官方也在不断升级,但文章还是原来的,我也找到最近有人发RTduino的工程创建,但那个是直接在GitHub直接拷贝工程的,那边的工程一般什么功能(PWM,I2C等)都开了,对于F103最小系统板这种小身板来说是遭不住的,而且我们一般也不用开那么多,这次我就来一步步教你们应该如何实现只开自己想要的功能的工程
2024-11-09 13:45:35
1114
原创 pinout-generator 的安装与使用
pinout-generator是RTT官方为了RTduino的Kconfig文件配置和生成对应的RTduino BSP文件而准备的,在没有这个软件之前我们的功能配置都是直接操作Kconfig文件和直接在Github下载芯片对应的文件,首先不说Github下载BSP慢的问题,操作Kconfig你可能会有失误,的时候在你编译的时候就会生成一堆报错,你得一个个排查,增加了开发的成本,因此RTT官方推出了pinout-generator。
2024-11-08 11:22:10
1050
原创 使用cubemx和rt-thread studio联合配置(以RTC时钟为例)
该文章讲解了在rt-thread studio中RTC硬件如何初始化,时钟树怎么配,应该如何查看官方文档,还有一些配置的常见问题。详细讲解了cube生成的代码时如何嵌入到rt-thread工程中的
2024-10-12 20:31:12
2560
9
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅