自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ESP32之初见MQTT

不过真机调试会出现bug不能用,查了一下这个错误通常出现在 UniApp 开发微信小程序时,代码中使用了 Node.js 的文件系统(fs)模块,但微信小程序环境不支持 Node.js API。同时我们的单片机环境安装 PubSub client 库,并配置一些基本信息,由于我们选择免费版本,所以只能走TLS,走不了TCP。topic可以随便写,然后需要在客户端认证中添加一个单元,保证认证的和ESP32上的账号密码一致即可。的 SSL/TLS 库,ESP32 不用这个。4. 获取 SSL 错误的方式不同。

2026-05-07 23:03:30 229

原创 LVGL部件应用笔记(基于正点原子教程,持续更新)

本文是基于正点原子教程的LVGL部件使用笔记,原视频链接如下因为本文是针对部件层,想对于每个部件留下一点记录,不涉及具体芯片的移植,关于移植,其实很看具体情况,首先配置显示,触摸可选,然后提供时基。然后看项目是否要上RTOS,是否有外部RAM,是否有自研的管理算法…本文使用Windows模拟器开发,使用版本为LVGL8.3,具体模拟器配置可看这篇文章同时这里也可以使用Trae和Qcode,直接问AI,问题解决更快。

2026-04-17 17:31:35 710

原创 RP2040(移植FreeRTOS-SMP)

3.这里的port文件选择/portable/ThirdParty/GCC/RP2040路径下的,保留这个文件夹内容,其余第三方文件删除;这里的5和6通常在port文件已经移植完成,不用单独考虑,本次移植平台为vscode的pico插件。文件,选择树莓派官方给的示例文件,并改名为FreeRTOSConfig.h。文件夹并把github中的文件放入并删除不必要的部分;:根据目标芯片选择对应的 port 文件(如。:添加 heap_1~heap_5 中的一个。:配置 SysTick 定时器,在。

2026-04-12 21:02:51 439

原创 上手RP2040(基于C SDK)

写这篇博客的时候我试过几种开发方式,基于Keil,基于RTT的,PlatformIO和Arduino兴趣不大就没试,因为习惯了传统嵌入式的IDE开发方式,并没有首选官方的cmake方式,从邪修开始搞起。下一步我们来点亮WS2812的灯,这个彩灯的通信原理在这里不多叙述,只需要知道它需要的时序是几百ns级别的,在RP2040上最广泛使用的是通过PIO调用。下载程序的话是先按下BOOT,再按下RESET,再松RESET,再松BOOT,然后window显示磁盘,再在vscode上编译烧录;上传此固件后,每次按。

2026-04-12 16:19:11 580

原创 STM32 RS485读取SHT20

如果说RS485是路,Modbus就是路上车辆必须遵守的交通规则,确保所有设备都能“说同一种语言”。一条RS485总线可以连接多个设备(理论上最多32个标准负载,使用中继器可扩展至更多),形成总线型网络,大大简化了布线。在大多数应用中,RS485采用半双工模式,即数据在同一时间只能单向传输,要么发,要么收,这简化了总线结构并避免了冲突。②后续不可能都在节点1上,可以考虑自动CRC生成,但器件少的情况更建议手动配置数组。采用SHT20芯片RS485版本,V+接5V,V-接GND;USART1使能,配置默认;

2026-03-29 18:46:45 458

原创 Leetcode Hot 100 (C语言版) 22-43

给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。分析:一道二分法的题目,非递减顺序(Non-decreasing Order)是指数组中的元素从左到右不会变小严格递增元素互不相同,严格变大非递减允许重复元素,不下降即可同时,二分法具有盲目性,你不知道找到的是最左、最右、还是中间的,必须继续搜索左右边界。

2026-03-08 20:08:48 550

原创 Leetcode Hot 100 (C语言版) 1-21

博主搞嵌入式的,走底层纯C的,为了找实习/工作刷点题,平时AI coding习惯了,怕手撕代码写不出来,这里刷题顺便分享下思路,代码能跑就行,有什么问题欢迎指出,博主是新手入门;这里按照难度排序依次进行。在刷leetcode前建议可以先练一练牛客的算法入门,效果会更好。

2026-03-04 22:08:23 2085

原创 ESP32电子相册

之前有一段时间想搞一搞电子吧唧这东西,后来想来想去也就是个电子相册,这里拿杜邦线接一接,写一写程序,当个DEMO验证没有什么问题平台:ESP32S3R8N8 ST7789 PIO+Arduino。

2026-02-22 21:03:22 1029

原创 浅试zhRGB565图片编解码

总结QOI的编解码原理:一个64槽位的循环哈希表,记录最近看到的像素;由于ESP32的main函数是CPP格式,直接引用会出现报错,这里为了省事,直接改成CPP后缀,同时ESP32是XIP,删去了一些不必要的函数。需要注意的是,TFT_eSPI显示图片是大端侧,这里需要手动翻转一下,图片比较花里胡哨的情况下实测大概压缩率有60~70%在2026年看到一种新的解码方式,忍不住试一试,在说本次的主角之前,先提一提QOI。先转换成320*240的BMP图片,然后用zhRGB作者提供的工具进行转换。

2026-02-22 15:50:47 744

原创 (自用)嵌入式C语言持续整理

常见命令基础编译:gcc hello.c -o hello编译阶段:调试与优化:链接:常见命令经典流程:断点:程序:查看信息:内存:在这一阶段,预处理器会处理源代码中的预处理指令,例如宏定义和头文件包含。主要工作包括:①删除注释②宏替换( 定义的常量或表达式)预处理文件转换成汇编文件汇编文件转成机器码合并目标文件与库文件数据型修饰型存储型结构型控制型从函数返回,可携带返回值或无返回值( 函数)。用C语言实现面向对象编程(OOP)的核心思想,不仅能加深对C++底层实现的理解,也是许多底层系统(如Li

2026-02-21 21:50:35 491

原创 Arm2D使用教程(五):玩一玩JPEG解码器

在嵌入式GUI里,图片是资源大头,作者本人刚开始应用时觉得能跑就行,在后续的学习中逐渐对压缩开始重视,特别是在嵌入式领域存在很多对帧率几乎没有要求,但对存储器消耗却极其敏感的场景。Arm-2D 在 JPEG 解码方面经历了两个主要阶段:TJpgDec Loader(v1.2.2 引入)ZJpgD 解码器(v1.2.4 引入,v1.2.5 增强)本次采用TJPGD方案,测试平台 STM32F407VET6+ILI9341(RGB565)

2026-02-10 22:52:09 372

原创 ESP32(PIO+Arduino框架)联网OTA升级思路

作为个人开发者而言,感觉第一种方案属于最实用的,也翻了翻开源的LIB库,最后发现好像没那么麻烦,Arduino自带的库就可以满足需求;这里以一个模糊的物联网情景距离,出厂程序是LED慢闪,升级之后变成快闪,而在OTA的过程中需要保留之前用户保存的WIFI名称密码;最近研究了一下ESP32的OTA升级思路,主要是联网上传BIN文件,通过服务器匹配获取新文件,蓝牙上传更新;当然还有很多问题没有考虑到,比如说OTA一般突然断电,回滚机制等等,这里只是实现了最基本的OTA升级;点击串口里面提示的网页。

2026-02-10 19:25:52 156

原创 Arm2D使用教程(四):借助片外Flash放置图片资源

当我们想要制作GUI界面时,一定会遇到片内flash不够用的情况,特别是M0等小容量片内flash架构芯片,这时候,寻求便宜大碗的外部flash或者sd卡确实是一个不错的选择;借助ARM2D的文档,我们得知,为了解决这一问题,在基类的基础上派生出了一个新的类:虚拟资源(),——专门用于描述这类无法直接访问的图片资源。在工程管理器中展开,并找到通过打开图形配置界面,在下拉列表“Maximum number of Virtual Resources used per API。

2026-02-09 20:51:24 638

原创 基于ESP32(PIO+Arduino)简单上手LVGL9

测试环境:ESP32S3R8N8 ST7789。

2026-02-06 19:10:09 720

原创 嵌入式开源框架移植(一):MultiButton

首先使用CUBEMX配置一个5ms的定时器,开启中断,并随便选几个GPIO设置为INPUT,同时开启串口,进行printf串口重定向方便验证程序。在handler中,作者使用了SWITCH进行了状态的切换,每个状态处理特定输入,避免复杂嵌套if-else,通过。函数,对事件进行处理之前进行了软件消抖,默认是15ms(5ms一次的中断和3次计数,这些可以在H文件中进行修改)同时,作者利用链表将多个按键链接起来,新按键直接插入头部,无需额外内存分配,无需记录前驱节点,通过。在H文件中,枚举了按键事件。

2026-02-01 16:57:55 479

原创 关于使用STM32制作外部Flash FLM下载算法

⑤修改配置文件 FlashDev.c(这块是对flash基本信息做配置)

2026-01-30 20:25:06 1051

原创 STM32 使用SFUD库驱动Flash(Hal库)

由于现有市面的串行 Flash 种类居多,各个 Flash 的规格及命令存在差异, SFUD 就是为了解决这些 Flash 的差异现状而设计,让我们的产品能够支持不同品牌及规格的 Flash,提高了涉及到 Flash 功能的软件的可重用性及可扩展性,同时也可以规避 Flash 缺货或停产给产品所带来的风险。spi_write_read和sfud_spi_port_init,剩下默认就好。关于这点网上有不少的一键复制代码,有开启微库(microlib)的,有AC6的。QSPI 模式:打开/关闭。

2026-01-28 21:08:50 771

原创 Arm2D使用教程(三):贪吃蛇游戏。

Arm-2D不是一个完整的GUI框架,它明确表示缺乏关键组件包括"交互输入设备的支持"。库专注于"底层像素处理加速",不提供"创建GUI必需的数据结构或相关算法,例如元素树、GUI消息处理和树遍历算法"我们这里采用最简单的做法,四个按键分别对应上下左右,在__on_scene0_frame_start帧开始前读一遍按键的值,保存值,然后进行逻辑判断,由于目前刷新速度大概在34帧左右,完全可以实现相应功能。此处CUBEMX统一配置为INPUT MODE.

2026-01-22 22:37:23 1022

原创 Arm2D使用教程(二):绘制,图片!

测试版本:Arm2D 1.2.5正式版KEIL5屏幕选择:ILI9341 320*240。

2026-01-20 17:18:55 739

原创 Arm2D使用教程(一):你好,世界!

Arm-2D是一个面向Cortex-M处理器的2.5D图像处理开源项目。目标是 IoT终端设备、家电、手持设备和可穿戴设备,尤其是对资源受限和低功耗有要求的设备。其专注于底层并作为硬件抽象层用于2.5D图像处理Arm-2D不是GUI,没有内容创作、复杂图形绘制或可缩放矢量图形(SVG)支持它提供常用2.5D操作的默认实现,并使第三方能够加速应用程序特定的算法。

2026-01-19 19:31:38 937

原创 64帧!STM32F407VET6 FSMC刷新9341屏幕(Arm2D)

本文分享了使用STM32F407VET6驱动ILI9341液晶屏的FSMC接口优化方案。作者通过对比SPI接口的性能瓶颈,改用FSMC接口实现了更高的刷新率(64帧)。文章详细介绍了硬件连接(PE/PD引脚配置)、CubeMX图形化配置(FSMC模式、DMA参数)、LCD驱动代码移植(寄存器读写优化)以及三种性能优化方法:无DMA算法(45帧)、轮询DMA(53帧)和异步DMA(64帧)。重点解析了异步DMA实现中的中断处理、内存映射和ARM-2D框架适配,最终通过FSMC的并行传输优势显著提升了显示性能。

2025-09-23 19:40:33 1002

原创 STM32 CUBEMX SPI读写SD卡并挂载FATFS(从0开始)

本文介绍了在STM32F407VET6上通过SPI1接口操作SD卡并移植FATFS文件系统的过程。作者最初尝试在STM32端格式化SD卡为FAT32时遇到容量显示异常问题,后改为在电脑端预先格式化后直接挂载的方案。文章详细说明了CubeMX工程配置、SPI驱动实现、SD卡初始化流程、读写操作函数以及FatFs适配层的diskio.c文件实现。测试部分展示了完整的文件系统操作,包括目录创建、文件读写、磁盘信息查询等功能,并通过串口输出测试结果。最终实现了在SPI模式下稳定读写16GB SD卡的功能。

2025-09-22 11:03:15 783

原创 STM32 HELIX解码I2S播放MP3 HAL库(MAX98357)

本文介绍了在STM32F407VET6上使用I2S接口和MAX98357模块实现MP3音频播放的改进方案。相比上期基于DAC的方案,本次升级实现了44100Hz/16bit的CD级音质。文章详细讲解了I2S协议原理(时钟、声道、数据三线协同工作),以及从DAC到I2S的代码改造要点:包括缓冲区结构调整、16位有符号数据格式转换、DMA配置等。工程保留了Helix解码库,新增了音频信息显示和时长计算功能。虽然存在杜邦线引入的底噪问题,但音质已有明显提升,也为后续优化奠定了基础。

2025-09-17 21:44:01 2213

原创 STM32 HELIX解码DAC播放MP3 HAL库版本

基于STM32F407VET6的MP3播放项目,基于HELIX库软解码,DAC输出。

2025-09-15 21:13:05 1508 1

原创 STM32 HAL SD卡+DAC音乐播放WAV(有视频展示)

本文介绍了基于STM32的SD卡WAV音频播放实现方案。核心内容包括:1. WAV文件格式解析,通过RIFF结构定位音频数据块;2. 硬件配置,使用TIM6定时器触发DAC+DMA循环双缓冲输出;3. 关键代码实现,包括WAV头解析、PCM数据转换、双缓冲管理等。系统支持8/16位PCM、单声道/立体声,采样率可配置,通过双缓冲机制确保音频流畅播放。实测表明,相比之前的8bit/16kHz方案,12bit/44.1kHz显著提升了音质,但底噪问题仍需优化。该方案为嵌入式系统实现高质量音频播放提供了有效参考。

2025-09-07 23:21:47 2510

原创 STM32 HAL SD卡U盘

最近查了很多关于SDIO+USB MSG的文章。得到了比较浅显的配置手段,目前也是成功的单根USB线同时供电和传输数据。并简单进行了读写测试。USB加载需要大概10s,很慢,:容量范围为2GB到32GB。

2025-09-07 20:30:38 664

原创 STM32 DAC播放音乐(已测试成功)

先上演示效果STM32DACDAC(Digital-to-Analog Converter)是一种将数字信号转换为模拟信号的器件,能够根据数字量生成相应比例的电压值。STM32系列微控制器通常配备8位或12位DAC模块。还需要关注一下和采样率很好理解,把一秒分成很多帧,采样率越高声音越细致。位深度可以理解为声音的高低大小,深度越大,声音越精准。例如8bit对应256个层级。

2025-09-05 10:07:19 1014 1

原创 STM32 按键(单击长按)外部中断+定时器处理方式

每个按键对应一个KeyObj_t结构体,记录当前状态、按下时间、事件标志等。按键总数由KEY_COUNT宏定义(值为4),支持多键并发管理并采用状态机模式,通过stable_state记录按键的稳定状态。使用TIM7定时器开启中断进行长按检测,按键按下时定时器启动开始计时,按键释放时根据定时器记录的时间来判断单击还是长按。APB2 168MHZ)一句话概括就是,外部中断下降沿触发,引起中断开始定时器计时,松手上升沿再进入中断,根据定时器的计时来判断长按还是单击,整套流程最大的特点就是几乎不占用CPU。

2025-09-01 22:49:38 541

原创 2025电赛C题电流检测方案(INA219 K230 python程序)

该方案基于立创庐山派K230,由于当前文档关于IIC的部分很久没更新,于是查了各种关于K230的网站,得到了解决方案,其他设备基于python的也可以跑。

2025-08-29 18:46:10 467

原创 STM32 ILI9341屏幕(HAL库)Arm-2D框架

本文介绍了如何在STM32平台上使用Arm-2D图形加速库驱动ILI9341屏幕。

2025-08-29 14:36:55 2016 2

原创 STM32 ILI9341屏幕(HAL库)裸机开发

前置文章要想实现基本的UI开发,离不开函数和字库两部分。

2025-08-29 12:24:04 824

原创 STM32 硬件SPI驱动ILI9341屏幕(HAL库)

本项目基于STM32F407VET6驱动ILI9341 TFT液晶屏(320x240分辨率),通过硬件SPI接口实现42Mbps高速数据传输。系统采用6线制连接(CS、RS、RST、LED控制信号+SPI数据线),使用CubeMX配置168MHz主频、SPI主模式及GPIO控制。关键功能包括:LCD初始化、寄存器读写、全屏清屏、像素点绘制,支持横竖屏切换和多种颜色定义。通过优化SPI通信协议和专用驱动函数,实现了高效的屏幕刷新控制。开发过程涵盖硬件配置、驱动编写及功能测试,最终成功实现屏幕显示控制,为嵌入式

2025-08-29 10:16:25 2216

空空如也

空空如也

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

TA关注的人

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