- 博客(22)
- 收藏
- 关注
原创 【Hi3861 物联网实战】MQTT 心跳保活详解:设备为什么连上几十秒就 “假死“,PINGREQ/PINGRESP、自动重连一次讲清
Hi3861智能家居项目中,设备连上MQTT后偶发“假死”——能收初始指令但后续无响应。根因是未实现心跳保活:MQTT Broker在90秒内未收报文即断连,而设备不知情。解决方案:每30秒发送PINGREQ并等待PINGRESP,成功则连接正常,失败则累计重连。关键点:心跳≠定时重连,需基于应答判断;主循环中以空转次数(≈15秒/次)计时,避免阻塞;重连仅关闭TCP、重建连接并重新订阅,不重复初始化WiFi。通过串口日志验证心跳、重连与长期稳定性,确保设备持续在线。
2026-09-20 20:10:20
288
原创 【Hi3861 物联网实战】MQTT 通信从入门到踩坑:连接、收发、心跳、重连、I2C 卡死全记录
本文基于 Hi3861(HarmonyOS LiteOS)智能家居项目实战,完整记录 MQTT 通信从 0 到稳定收发的踩坑全过程:Broker 选择与 MQTTX 配置、Topic 匹配、cJSON 指令解析、无心跳被踢下线、PINGREQ 保活、断线自动重连、AT+CIPSTART 超时、I2C 等不到 ACK 卡死等问题,每个坑都附真实串口日志、原因分析和可直接复用的代码。
2026-09-20 13:04:58
99
原创 基于STM32+OLED 手搓一个谷歌小恐龙跳跃游戏,含完整碰撞检测原理
这篇文章分享了基于STM32F103C8T6和0.96寸OLED实现的谷歌恐龙跳跃游戏开发经验。作者详细介绍了游戏的核心架构,包括:1)采用AABB矩形碰撞检测算法替代像素级检测;2)通过正弦函数模拟自然跳跃轨迹;3)分层滚动背景实现视觉纵深感(地面快、云朵慢);4)模块化设计思路(坐标结构体、画面绘制、游戏逻辑、碰撞检测)。文章重点解析了AABB碰撞原理(通过判断四个边界条件)和游戏循环范式(清屏→更新→绘制→检测),并总结了开发中遇到的典型问题(碰撞失灵、无限连跳等)及解决方案。该项目展示了如何用简单硬
2026-06-26 20:50:43
249
2
原创 动态表情包帧动画、谷歌小恐龙游戏的前提预告
摘要:本文介绍了在单片机上实现手表谷歌恐龙小游戏和动态表情动画的技术要点。通过OLED_Data.c/h准备字库,在main()函数中设置菜单选择逻辑,使用menu_flag_temp控制功能跳转。恐龙游戏通过game_flag管理子菜单(返回/开始游戏),动态表情则通过轮播眉毛和眼睛图像实现动画效果。关键点包括临时变量game_flag_temp的应用、界面反转显示技术以及延时控制动画帧率。文章为后续实现恐龙游戏逻辑做了铺垫。
2026-06-16 16:58:47
153
原创 C 语言 Unix 时间戳极简教程
本文介绍了Unix时间戳的相关知识和C语言中的常见操作。主要内容包括:1.时间戳的基本概念(整数秒数)和struct tm结构的两个注意点(月份0-11、年份需加减1900);2.常用代码示例:获取当前时间戳、时间戳与日期互转、格式化输出时间、计算时间差;3.避坑指南:建议使用线程安全的_r后缀函数、注意mktime()默认本地时间、变量名需明确时间单位。文中提供了完整的C语言代码示例,涵盖了时间处理的基本操作。
2026-06-02 21:42:57
243
原创 MPU6050 姿态检测详解|互补滤波原理、数据平滑优化、水平仪功能实现
本文介绍了STM32通过I2C通信驱动MPU6050六轴传感器的实现方法。主要内容包括:1) I2C通信模块的底层配置,使用PB10(SCL)和PB11(SDA)引脚实现起始/终止信号、数据收发等功能;2) MPU6050驱动开发,包含寄存器初始化、数据读取等操作,重点讲解了加速度计和陀螺仪数据的获取;3) 姿态解算算法实现,结合陀螺仪积分和加速度计反三角函数计算,采用互补滤波融合数据;4) 水平仪功能开发,通过实时解算的Roll/Pitch角度控制屏幕小球位置;5) 将MPU6050和水平仪功能集成到系统
2026-06-01 20:25:13
283
8
原创 【STM32 智能手表源码剖析 02】OLED 菜单系统 + 主页 UI + 时间设置|从 0 写通用菜单框架 + 定时器
本文详细解析了智能手表项目中菜单系统和通用定时器的实现方法。核心内容包括: 采用1ms定时器中断作为系统心跳,解决了纯轮询方式导致的按键延迟、秒表不准等问题,实现精确计时和流畅交互 构建了通用菜单框架: 使用结构体数组定义菜单项 实现左右滑动动画效果 通过标志位管理菜单状态 提供万能菜单模板 详细讲解了关键功能实现: 页面跳转流程 时间设置页面 按键消抖(20ms检测) 长按检测(1s阈值) 秒表计时(1ms精度) 采用前后台架构: 主循环处理界面逻辑 定时器中断处理实时任务 两者互不干扰保证系统稳定性
2026-06-01 19:20:48
205
原创 整体工程架构解析|文件分层、模块分工、整个程序的运行流程
摘要:本文详细解析了一个基于STM32的嵌入式系统项目架构,采用模块化分层设计,包含核心系统层、硬件驱动层、算法工具层、应用逻辑层和数据资源层。重点说明了main.c作为程序入口的简洁结构,强调了正确的硬件初始化顺序,并分析了模块间的调用关系和页面跳转逻辑。项目使用3个独立按键实现所有操作,具有模块化程度高、可扩展性强等优点,但也存在无低功耗处理、无任务调度等不足。文章还预告将深入讲解定时器调度系统等核心功能实现原理。(149字)
2026-05-31 20:49:07
350
原创 基于STM32实现火禾实验室智能手表【前提预告】
《STM32F103智能手表项目深度解析系列》摘要: 本系列针对STM32F103C8T6智能手表项目开发中的典型痛点,系统剖析了OLED菜单框架、双I2C总线冲突、MAX30102心率血氧检测等核心模块。作者结合踩坑经验,将逐行解析源码架构,提供传感器数据校准、动态滤波算法等实战解决方案,帮助开发者突破"只会接线"的初级阶段。系列包含工程架构设计、通信协议优化、算法实现等九大专题,旨在培养完整的嵌入式产品开发能力,打造可落地的简历项目。通过源码级教学,使读者掌握异常处理、功能扩展等进阶
2026-05-31 20:09:43
298
原创 基于 STM32 的 SSD1306 OLED 取模标准化教程
本文针对STM32开发中SSD1306驱动的0.96寸OLED屏幕取模问题,提供了一套标准化解决方案。通过分析90%的显示异常源于取模参数与驱动逻辑不匹配,推荐使用PCtoLCD2002这款工具,并详细说明其配置要点:阴码、列行式扫描、逆向(低位在前)、C51格式输出。文章结合江协科技例程与火禾实验室智能手表项目,给出汉字(16×16)、图标(32×32)及全屏图片的取模流程、代码调用示例及常见问题排查方法,强调参数一致性是避免乱码、倒置等问题的关键,为开发者提供高效可靠的取模实践指南
2026-05-30 19:40:42
354
原创 基于STM32的软件SPI读写W25Q64的文件架构
本文基于 STM32F103 单片机,采用软件 SPI方式实现 W25Q64 Flash 芯片完整读写驱动。全程采用四层分层架构设计,从硬件引脚层、SPI 协议层、W25Q64 设备层到应用层逐层拆解,代码解耦清晰、极易移植复用。
2026-05-27 20:15:52
299
原创 STM32 软件 SPI 驱动 W25Q64 全套精简注释代码
本文详细介绍了基于 STM32F103 单片机的软件 SPI 驱动 W25Q64 Flash 芯片的完整实现过程。采用分层解耦的设计思想,将驱动代码分为硬件引脚层、SPI 协议层、W25Q64 设备层和应用层,结构清晰,易于移植和维护。文中提供了全套可直接编译运行的工程代码,包括 MySPI 驱动、W25Q64 驱动、指令头文件和主函数,并对核心代码进行了逐行注释。重点讲解了 SPI 模式 0 的通信原理、W25Q64 的擦写特性和操作流程,同时总结了开发过程中最容易遇到的硬件接线错误和代码逻辑错误,给出了
2026-05-27 18:48:52
201
原创 STM32F103烧录失败?MicroLIB一招解决
摘要:本文分享了在STM32F103C8T6上开发智能手表版谷歌小恐龙游戏时遇到的烧录问题及解决方案。作者编译成功的游戏代码始终出现"FlashTimeout"错误,经排查硬件连接、下载配置等常规方法无效后,最终通过勾选Keil中的"Use MicroLIB"选项成功解决。文章深入分析了问题根源:标准C库初始化耗时过长导致烧录超时,而MicroLIB作为精简库能显著缩短初始化时间。同时提供了两种解决方案(使用MicroLIB或优化标准C库),并对比了它们的适用场景和注
2026-05-20 11:49:31
484
原创 STM32-USART(串口数据的收发)
本文详细介绍了STM32 USART串口通信的配置步骤:1) 开启USART1和GPIOA时钟;2) 配置PA9(复用推挽)和PA10(上拉输入);3) 初始化USART参数(9600波特率、无校验位、8位数据);4) 配置接收中断及NVIC优先级;5) 实现中断服务函数处理接收数据;6) 提供数据发送函数(单字节/数组/字符串/数字);7) 主函数实现数据接收回显。文章指出硬件连接可能导致回显异常,建议检查电平一致性。完整代码涵盖串口初始化、中断处理和数据收发功能。
2026-04-29 18:24:48
428
原创 STM32多通道ADC与DMA高效采集实战
本文介绍了STM32单片机ADC多通道采集与DMA传输的结合应用。主要内容包括:1. 基础概念:规则组与注入组的区别,扫描模式的作用,DMA在多通道ADC中的必要性;2. 单通道与多通道ADC的配置差异,重点说明多通道必须使用DMA避免数据覆盖;3. 详细的多通道ADC+DMA配置步骤,包括时钟初始化、GPIO设置、ADC参数配置、DMA参数设置等;4. 完整代码实现,展示如何通过DMA将4路ADC数据自动搬运到内存数组;5. 对ADC和DMA结构体各成员的配置意义进行详细解析。通过DMA实现ADC多通道数
2026-04-26 17:30:23
405
原创 STM32单通道ADC采集全攻略
本文介绍了STM32单通道ADC采集的基本配置流程:1. 开启ADC1和GPIOA时钟;2. 设置ADC时钟分频为12MHz;3. 配置PA0为模拟输入引脚;4. 绑定ADC1通道0并设置采样时间;5. 配置ADC为单次转换、右对齐、软件触发模式;6. 上电并进行校准;7. 编写读取函数启动转换并返回结果。整个流程采用最简单的单通道单次转换方式,通过软件触发实现模拟信号的采集。
2026-04-25 13:45:41
239
原创 STM32编码器测速实战指南
摘要:本文介绍了STM32编码器测速的实现方法,重点讲解了增量式编码器的工作原理和STM32定时器的编码器模式配置。主要内容包括:1) 编码器测速的M法和T法原理及适用场景;2) TIM3定时器的编码器模式配置步骤,包括时钟使能、GPIO配置、输入捕获初始化等;3) 通过TIM2定时中断实现固定时间采样;4) 常见问题排查及注意事项。文章提供了完整的代码实现,适合STM32初学者快速掌握编码器测速的基本方法。
2026-04-25 13:21:05
255
原创 STM32 入门 定时器 PWM 输出比较 与 输入捕获
本文详细讲解了STM32中PWM输出比较和输入捕获的实现方法。通过TIM2输出PWM波(PA0引脚)和TIM3输入捕获(PA6引脚)的配合使用,实现了PWM信号的生成与测量功能。文章提供了完整的初始化代码:PWM输出部分配置定时器参数和占空比设置,输入捕获部分采用PWMI模式自动测量周期和高电平时间。主函数演示了自测闭环流程,通过串口输出频率和占空比数据。特别强调了定时器通道与GPIO引脚的固定映射关系,并指出可以通过重映射改变引脚配置。最后给出了频率和占空比的计算公式,这套方案封装性好、逻辑清晰,可直接应
2026-04-22 19:48:05
428
原创 STM32常见外设模板(标准库)
本文总结了STM32标准库常见外设配置模板,包括GPIO、TIM定时器、NVIC中断控制器和EXTI外部中断。GPIO配置需设置引脚、模式(如推挽输出)和速度;TIM定时器需配置预分频、周期等参数并启动中断;NVIC负责设置中断优先级分组和通道;EXTI用于处理外部引脚触发的中断。文中详细说明了各外设的初始化步骤、关键参数含义及配置思路,并强调中断服务函数中必须清除中断标志。这些模板为STM32开发提供了基础参考框架,适用于常见嵌入式应用场景。
2026-04-20 11:32:07
377
原创 STM32F103C8T6 PWM引脚-定时器-通道对照表
【STM32 PWM配置速查指南】针对初学者整理了关键要点:1)定时器通道与引脚对应关系(如TIM1_CH2对应PA9);2)函数命名规律(通道号即函数编号,如CH2使用TIM_SetCompare2);3)高级定时器TIM1必须开启主输出;4)配置流程7步骤(时钟初始化→GPIO配置→时基设置→PWM参数→定时器使能);5)常见坑点(通道函数不匹配、ARR范围错误、极性接反)。特别强调TIM1与其他定时器的区别,并提供引脚-通道快速对照表,帮助开发者避免基础错误,快速实现PWM功能。
2026-04-18 12:14:11
337
原创 STM32驱动分层思想:用C语言结构体实现简易面向对象LED驱动
本文介绍了一种嵌入式开发中的代码优化方法,通过结构体嵌套实现面向对象编程思想来解决驱动代码冗余问题。作者以LED驱动为例,展示了如何将公共属性抽离为基类结构体(LedBase),并通过继承方式为GPIO、PWM等不同类型的LED创建专属结构体。该方法实现了驱动分层:先初始化公共属性,再处理特有参数。这种设计使通用功能可以共享(如获取LED名称),避免了代码重复,提高了可维护性。当项目包含大量模块时,该方案能显著减少修改工作量,保持代码结构清晰,便于后期扩展新设备类型。
2026-04-17 17:41:08
570
原创 八股文对于编程的影响
与此同时,也有支持“八股文”的声音:“熟练掌握“八股”,关键时刻出bug是真的能救命的。”关于“八股文”对实际工作是助力还是阻力还是无任何用处的空谈这一问题,你的观点是怎样的呢?提示:可以探讨“八股文”知识在筛选候选人时的作用,例如它如何帮助评估候选人的基础知识和技术理解。此外还可以从“八股文”在面试中的比重及其合理性、如何平衡“八股文”与实际编程能力之间的考察等方向展开讨论。提示:可以探讨在团队协作环境中,“八股文”知识如何帮助成员之间进行有效沟通,尤其是在解释复杂概念时的作用。
2024-07-30 09:12:05
311
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅