- 博客(81)
- 收藏
- 关注
原创 【2026电赛】全国大学生电子设计竞赛元器件清单发布!赛题方向深度分析
2026年全国大学生电子设计竞赛赛区赛暨模拟电子系统设计专题赛选拔赛的官方清单已发布,包含仪器设备(如直流稳压电源、示波器等14项)和主要元器件(运动控制、无线通信、模拟电源等类别)。重点提示:电源类(如开关电源设计)和运动控制类(如无人机、小车)题目概率较高,TI MSPM0系统板为特色器件。备赛建议优先准备电源拓扑、控制算法,并提前熟悉TI器件。清单中的水管、钢球等元件暗示可能涉及流体控制题目。官方原文详见指定链接。
2026-07-21 23:30:11
5375
原创 RK3588(OrangePi 5 Ultra)三路 USB UVC 相机稳定30FPS录制实践:从采集抖动到 RGA 硬件转换的完整排查过程
这篇文章分享了基于RK3588开发板(OrangePi 5 Ultra)实现多路USB摄像头30FPS稳定采集与录制的技术方案。作者通过系统排查,发现主要性能瓶颈在于软件色彩转换(NV16→NV12)导致CPU负载过高,最终采用RGA硬件加速方案解决问题。文章详细记录了从相机支持格式验证、底层采集测试到GStreamer管道优化的完整调试过程,并提供了关键测试命令。最终实现两路核心相机严格30FPS录制(1800帧/60秒),第三路辅助相机28.6FPS,满足项目需求。方案充分利用Rockchip MPP硬
2026-07-02 16:18:50
417
原创 嵌入式Linux应用开发系列⑨:综合项目——ARM智能家居网关(多线程+串口+网络+数据库)
本文介绍了一个嵌入式智能家居传感网关项目的实现,该项目整合了文件I/O、进程、多线程、网络通信和数据库等关键技术。系统通过串口读取温湿度传感器数据,使用环形缓冲区实现线程间通信,同时将数据存入SQLite数据库并通过TCP服务端推送实时数据。项目采用生产者-消费者模型进行多线程同步,包含串口读取、数据库写入、网络服务和用户交互四大模块,所有代码已在ARM开发板实测通过。文中提供了完整的C语言实现代码,支持真实串口和模拟文件两种模式,可直接作为工程原型使用。
2026-06-20 13:50:27
1006
原创 嵌入式Linux应用开发系列⑧:信号处理进阶——sigaction、signalfd与高精度定时器timerfd
本篇深入掌握了信号处理的高级方法,并将信号和定时器统一到epoll事件循环中,为你构建健壮的嵌入式应用打下坚实基础。核心要点用sigaction代替signal,设置SA_RESTART避免系统调用被中断阻塞信号 +sigwait实现同步处理,突破异步安全限制signalfd将信号转化为fd,完美融入epolltimerfd提供高精度、多实例的定时器,与epoll天然集成事件循环统一管理所有IO、信号、定时,是服务器框架的核心思考题如果不在使用signalfd前阻塞信号,会发生什么?
2026-06-20 13:37:15
416
原创 嵌入式Linux应用开发系列⑦:网络编程——Socket、select/poll/epoll与高并发服务器实战
本篇从最简TCP回声服务器开始,逐步引入多进程、select/poll/epoll,完整呈现了高并发服务器的演进路径。epoll版本的代码已经可以作为嵌入式网络服务的基础框架。核心要点Socket就是文件描述符,可用read/write操作网络编程务必处理字节序转换select有1024限制和O(n)效率问题,poll突破限制但效率仍为O(n)epoll采用回调机制,复杂度O(1),支持ET/LT两种模式ET模式下必须循环读写直到EAGAIN思考题。
2026-06-20 13:24:10
426
原创 嵌入式Linux应用开发系列⑥:多线程编程——pthread、互斥锁、条件变量与线程池实战
Linux多线程编程实战指南 摘要:本文介绍Linux多线程编程核心技术,重点讲解pthread库的使用方法。文章对比了多线程与多进程的优缺点,详细解析线程创建、互斥锁、条件变量等核心API,并提供了三个实战案例:线程创建与参数传递、互斥锁保护全局计数器、生产者-消费者模型。所有代码均通过ARM开发板交叉编译验证,帮助开发者掌握轻量级并发编程技巧,解决嵌入式设备中的并发任务处理问题。通过本文学会构建线程安全程序,避免竞争条件等问题。
2026-06-20 13:18:27
327
原创 嵌入式Linux应用开发系列⑤:进程间通信(IPC)全解——管道、共享内存、消息队列与信号实战
本文介绍了嵌入式开发中四种常用的进程间通信(IPC)机制:匿名管道、命名管道、System V共享内存和消息队列。匿名管道适用于父子进程间单向通信,命名管道(FIFO)允许无亲缘关系的进程通过文件系统路径通信。共享内存是最快的IPC方式,通过直接映射物理内存实现高效数据交换。每种机制都配有完整代码示例,可直接在ARM开发板上运行。这些IPC方法各具特点,适用于不同场景的数据传输和进程协作需求。
2026-06-18 15:00:35
352
原创 嵌入式Linux应用开发系列④:进程管理——fork/vfork/写时拷贝与文件共享深度实验
本文深入探讨Linux进程管理的核心机制,重点分析了fork、vfork等系统调用的底层原理与应用场景。通过可执行的代码实验,验证了fork的写时拷贝特性、父子进程内存独立但虚拟地址相同的现象,以及vfork共享地址空间的危险特性。文章对比了进程创建的三种方式,强调wait回收子进程的重要性,并警示vfork的正确用法。所有实验均在ARM开发板实测通过,为嵌入式开发提供了实用的进程管理参考。
2026-06-18 14:19:45
381
原创 嵌入式Linux应用开发系列③:标准I/O库与缓冲区机制深度揭秘
本文深入探讨了标准I/O库与系统调用的关系,重点分析了文件操作中的缓冲机制。通过实验验证了三种缓冲模式(全缓冲、行缓冲、无缓冲)的行为差异,揭示了数据丢失的根本原因在于用户态缓冲区的存在。文章指出fflush只能将数据从用户态推入内核,要确保数据落盘还需调用fsync。最后提供了不同场景下的API选择建议:普通文件读写推荐标准I/O以提高效率,关键数据操作建议直接使用系统调用确保可靠性,多线程场景则需要考虑原子性控制。这些结论对嵌入式开发中确保数据安全具有重要指导意义。
2026-06-18 14:01:42
346
原创 嵌入式Linux应用开发系列②:文件I/O系统调用深度剖析——open/read/write/lseek
本文介绍了Linux应用层编程中的文件I/O系统调用,包括文件描述符概念及open()、read()、write()、lseek()、close()等核心API。文件描述符是内核为进程维护的打开文件表索引,默认包含标准输入、输出和错误。文章详细讲解了各API的参数、返回值及健壮性封装,并强调必须显式关闭文件描述符以避免资源泄漏。文中提供的代码示例均通过ARM开发板交叉编译验证,为Linux底层文件操作提供了实用指南。
2026-06-17 18:54:45
347
原创 嵌入式Linux应用开发系列①:从零搭建交叉编译环境与通用Makefile模板
本文介绍了嵌入式Linux应用开发的交叉编译环境搭建与实践指南。主要内容包括: 交叉编译必要性:在x86主机编写代码,通过工具链生成ARM架构程序 工具链安装:提供APT安装和手动下载Linaro两种方法 Hello World实践:从编写、编译到部署开发板的完整流程,解决常见动态库问题 Makefile设计:从基础到进阶实现通用模板,支持自动文件查找、多目录和静态库 开发路线图:预告后续将涵盖文件IO、进程通信、网络编程等核心主题 关键提示:链接选项如-lpthread应放在LDFLAGS中,因其属于链接
2026-06-17 18:05:11
903
原创 【极致低延时】香橙派部署 MediaMTX 实现 WebRTC 推流,延时仅 500-800ms,比局域网 ffmpeg 拉流快近 10 倍!(附踩坑全记录)
摘要:本文介绍了如何在香橙派(Orange Pi 5 Ultra)上部署MediaMTX流媒体服务器,实现浏览器端超低延迟(500-800ms)视频监控,相比传统RTMP方案提升近10倍性能。主要内容包括:1) MediaMTX的极简安装方法;2) 关键配置文件优化(仅启用RTMP和WebRTC);3) 通过systemd设置开机自启服务;4) 解决"status=200/CHDIR"和服务端口不生效等典型问题;5) 实测对比WebRTC与ffmpeg方案的延迟差异。项目最终实现浏览器访问http://板子
2026-06-11 15:38:47
462
原创 FreeRTOS 综合实战:串口命令控制 LED 闪烁模式与系统监控
本文将介绍一个基于FreeRTOS的实战项目,通过串口命令控制LED闪烁模式与系统状态监控。项目使用STM32F103C8T6最小系统板,支持LED ON/OFF、FREQ调节闪烁频率、STATS查看系统状态等命令。系统架构整合了队列、软件定时器、信号量等FreeRTOS核心组件,实现了串口中断接收、命令解析、LED控制及系统监控功能。详细讲解了硬件连接、软件架构设计、驱动程序实现及中断处理,为学习FreeRTOS提供了完整的实践案例。
2026-06-05 11:17:55
544
原创 FreeRTOS 手动移植教程(九):调试与优化 —— 栈溢出检测、CPU 利用率与断言
本文是FreeRTOS系列教程的第九篇,重点介绍调试与性能优化的三项关键技术。主要内容包括: 栈溢出检测:FreeRTOS提供两种检测方式,通过魔数填充和栈指针检查,可有效发现任务栈溢出问题,并触发回调函数便于调试。 CPU利用率统计:通过配置硬件定时器和相关宏,可以获取每个任务占用CPU的时间和百分比,配合vTaskGetRunTimeStats()输出详细分析报告。 调试输出实现:详细展示了如何配置STM32的USART和TIM2定时器,建立调试信息输出通道,将系统运行时状态通过串口输出。 文章提供了完
2026-06-05 10:32:36
214
原创 FreeRTOS 手动移植教程(八):中断管理 —— 优先级、临界区与任务通知
本文系统梳理了FreeRTOS中断优先级管理规则与临界区使用方法,并介绍了轻量级的任务通知机制。主要内容包括: 中断优先级配置规则:通过FreeRTOSConfig.h关键宏定义,确保中断与内核API的安全调用边界; 临界区保护机制:使用taskENTER_CRITICAL/taskEXIT_CRITICAL保护共享资源,注意保持临界区短小精悍; 任务通知优势:相比传统信号量/队列,任务通知无需创建内核对象,内存占用更小、效率更高; 实验验证:在按键中断场景下,使用vTaskNotifyGiveFromIS
2026-06-04 23:29:28
260
原创 FreeRTOS 手动移植教程(七):软件定时器 —— 不占硬件 Timer 的定时回调
本文介绍了 FreeRTOS 软件定时器的使用,通过实验演示了单次定时器和周期定时器的创建与控制。软件定时器由内核守护任务实现,无需占用硬件资源,适用于毫秒级定时需求。关键点包括: 软件定时器与硬件定时器的区别:前者基于系统节拍,后者依赖MCU外设 核心API:创建(xTimerCreate)、启动/停止(xTimerStart/Stop)、修改周期(xTimerChangePeriod) 实验演示: 单次定时器(3秒后LED翻转) 周期定时器(500ms间隔LED闪烁) 动态控制(通过按键启停定时器) 使
2026-06-04 22:50:40
584
原创 FreeRTOS 手动移植教程(六):互斥量 —— 保护共享资源与优先级继承
本文介绍了FreeRTOS中互斥量(Mutex)的作用及其优先级继承机制。当多个任务需要修改共享变量时,使用二值信号量可能导致优先级反转问题。互斥量通过临时提升持有锁的低优先级任务的优先级,避免被中优先级任务抢占,从而确保高优先级任务能及时执行。实验对比了二值信号量和互斥量的行为差异,展示了互斥量如何有效解决优先级反转问题。关键区别在于:互斥量只能由获取它的任务释放,且不能在中断中使用。通过代码示例,验证了互斥量在保护共享资源时的可靠性。
2026-06-04 10:35:12
501
原创 FreeRTOS 手动移植教程(五):信号量 —— 任务同步与中断通知的优雅解决方案
摘要:本文介绍了FreeRTOS中信号量的使用,重点对比了信号量与队列的区别。信号量更轻量,仅维护计数值而不传递数据,分为二值信号量(0/1)和计数信号量(数值可变)。通过实验展示了二值信号量实现中断到任务的同步(按键触发LED翻转)和计数信号量管理资源(模拟3个缓冲区的申请与释放)。文章详细列出了信号量的关键API,并提供了完整的代码实现,包括中断服务函数和任务逻辑,演示了信号量在实际应用中的高效同步机制。(149字)
2026-06-03 23:09:29
372
原创 FreeRTOS 手动移植教程(四):队列 —— 任务间通信的最佳起点
队列的创建、发送、接收与阻塞等待;如何在标准库外部中断中使用安全地传递事件;队列天然解决了中断与任务间的同步问题,实现了硬件事件与业务逻辑的解耦。队列是 FreeRTOS 中使用最频繁的 IPC 工具,所有稍复杂的 RTOS 应用都会用到它。下一篇文章我们将学习二值信号量与计数信号量,解决任务同步、中断通知以及资源管理的常见场景。下一篇:FreeRTOS 信号量 —— 任务同步与中断通知的优雅解决方案。
2026-06-03 22:51:36
217
原创 FreeRTOS 手动移植教程(三):任务延时与时间管理——从裸机 delay 到 vTaskDelayUntil
本文深入解析FreeRTOS的时间管理机制,重点对比裸机延时与RTOS延时的本质区别。主要内容包括: 系统节拍原理:基于SysTick定时器生成固定时间基准(tick),并详细说明tick计数器和时间转换机制。 vTaskDelay的实现与特性: 任务进入阻塞态后主动让出CPU,实现多任务并发 分析边界情况(vTaskDelay(0)和vTaskDelay(1)的特殊行为) 通过实验展示与裸机延时的区别 vTaskDelayUntil的精确周期控制: 解决vTaskDelay的累积误差问题 基于绝对时间基准
2026-06-03 22:44:01
305
原创 FreeRTOS 手动移植教程(二):任务管理——多任务创建、优先级抢占与删除
本文基于上一篇文章的FreeRTOS工程,介绍了如何创建多个任务并演示优先级抢占和时间片轮转机制。主要内容包括: 硬件准备:连接三个LED灯(PA0、PA1、PC13)用于演示 扩展板级驱动:在bsp_led.c中增加多LED控制函数 创建多优先级任务: 三个任务分别控制不同LED以不同频率闪烁(200ms/500ms/1000ms) 高优先级任务可抢占低优先级任务执行 低优先级任务执行频率会因抢占而变慢 同优先级任务: 默认采用时间片轮转调度 每个任务轮流执行1ms(系统节拍) 任务管理: 任务可自我删除
2026-06-03 22:26:32
372
原创 FreeRTOS 手动移植教程(一):STM32F103 标准库工程搭建与第一个任务
本文介绍了如何从零开始手动移植FreeRTOS到STM32F103C8T6开发板的过程。主要内容包括:1)分析手动移植的必要性,强调理解内核配置细节的重要性;2)准备硬件(STM32最小系统板)和软件(Keil MDK、标准外设库、FreeRTOS源码);3)搭建工程目录结构,说明必需文件的选取与存放位置;4)详细讲解Keil工程的创建与配置,特别是头文件路径和编译选项设置;5)重点解析FreeRTOSConfig.h文件的编写要点,包括系统时钟、任务优先级、中断管理等关键配置;6)指出标准库与FreeRT
2026-06-03 22:13:53
552
原创 Linux字符设备驱动开发(十):综合实例——I2C传感器 + LED智能控制与进阶指南
本文介绍了基于Linux驱动的综合实践项目,通过I2C温度传感器LM75实时监测环境温度并控制LED状态。主要内容包括: 硬件平台搭建 - 使用i.MX6ULL主控板连接LM75传感器和LED,通过修改设备树定义硬件关联。 驱动功能设计 - 实现温度读取、阈值判断和LED控制(关闭/常亮/闪烁)功能,提供用户空间接口查询和配置参数。 关键技术点: I2C通信读取温度数据 内核定时器实现周期性采样 自旋锁保护共享数据 GPIO控制LED状态 字符设备驱动框架 代码实现 - 完整驱动代码包含LM75数据读取、L
2026-05-29 15:37:18
451
原创 Linux字符设备驱动开发(九):内核定时器——实现LED周期性闪烁与轮询驱动原理
是 Linux 内核提供的一种低精度定时器,基于jiffies(内核节拍数)工作,典型分辨率为 1~10 毫秒(取决于HZ配置)。它的回调函数在软中断上下文中执行,因此不能睡眠,也不能调用可能导致阻塞的函数。核心 API函数作用初始化定时器并绑定回调函数(新内核推荐)修改定时器的到期时间,并激活定时器。常用于实现周期触发向内核添加一个已经设置了expires的定时器删除定时器,若已失效则返回0,否则返回1等待定时器处理函数执行完毕后删除(用于卸载模块)旧版内核使用和,新内核已废弃,推荐使用。
2026-05-29 09:28:50
451
原创 Linux字符设备驱动开发(八):中断底半部——tasklet与工作队列实现按键消抖
本文介绍了Linux驱动中中断处理的优化方法,重点讲解了顶半部和底半部的分工原则。文章对比了tasklet、工作队列和软中断等底半部机制的特性及适用场景,并通过GPIO按键驱动实例详细展示了如何利用tasklet和工作队列实现底半部处理。特别针对机械按键抖动问题,阐述了软件消抖的实现原理:首次检测电平变化后延迟15ms二次确认,确保稳定后上报按键事件。代码示例包含tasklet版本(采用忙等待消抖)和工作队列版本(支持睡眠延迟),并提醒实际开发中应避免在tasklet中使用忙等待。该方案有效解决了中断处理耗
2026-05-28 19:02:26
524
原创 Linux字符设备驱动开发(七):输入子系统——驱动GPIO按键并上报事件
本文介绍了Linux输入子系统的开发流程,以GPIO按键为例详细讲解了输入设备驱动的实现方法。主要内容包括:输入子系统的架构与核心数据结构(如input_dev)、设备树配置、GPIO中断处理、按键事件上报(input_report_key和input_sync)以及用户空间验证方式(通过/dev/input/eventX节点)。通过该案例,开发者可以掌握从硬件配置到驱动实现的完整流程,为其他输入设备开发提供参考。
2026-05-28 09:48:58
602
原创 Linux字符设备驱动开发(六):I2C子系统——驱动AT24C02 EEPROM
本文介绍了基于Linux I2C子系统开发AT24C02 EEPROM字符设备驱动的完整流程。主要内容包括:I2C总线原理与Linux子系统架构、设备树配置方法、使用i2c_smbus接口实现通信、以及通过file_operations将EEPROM映射为文件设备。驱动实现了基本的读写功能,用户可通过/dev/at24c02像操作普通文件一样访问EEPROM存储空间。该方案适用于嵌入式系统中需要持久化存储小量数据的场景,具有代码简洁、使用方便的特点。
2026-05-28 09:47:23
374
原创 Linux字符设备驱动开发(五):PWM调光——实现LED亮度控制与呼吸灯效果
本文介绍了如何利用Linux PWM子系统实现LED亮度调节,通过编写字符设备驱动和应用层脚本实现呼吸灯效果。主要内容包括:PWM基本原理与Linux PWM子系统介绍,设备树中PWM节点的配置方法,新版pwm_apply_state等API的使用,驱动中动态调整占空比的实现,以及应用层通过Shell脚本控制LED亮度变化。文章以i.MX6ULL开发板为例,详细说明了从设备树修改到驱动实现的完整流程,帮助开发者掌握PWM在嵌入式Linux中的应用。
2026-05-27 17:43:49
678
原创 Linux字符设备驱动开发(四):进入硬件世界——GPIO子系统与LED设备驱动
本文介绍了如何在嵌入式Linux系统中通过GPIO子系统控制LED硬件设备。主要内容包括: GPIO子系统简介:Linux内核提供了标准化的GPIO操作接口,推荐使用新版gpiod API替代旧版整数接口。 硬件连接:LED通常通过限流电阻连接到GPIO引脚,电平极性需根据原理图确认。 设备树配置:在设备树中添加LED节点,指定GPIO引脚号和有效电平。 驱动实现: 使用platform_driver架构匹配设备树节点 在probe函数中获取GPIO描述符 通过write接口接收用户指令控制LED亮灭 生成
2026-05-27 15:19:32
396
原创 Linux字符设备驱动开发(三):引入并发控制——使用mutex保护共享数据
本文介绍了如何在Linux字符设备驱动中引入互斥锁(mutex)来解决多进程并发访问导致的竞态条件问题。文章首先通过实例分析了未加锁时多个进程同时读写内核缓冲区可能造成的数据错乱问题,解释了竞态条件的危害。然后详细讲解了Linux内核提供的mutex机制,包括初始化、加锁和解锁操作。最后给出了完整的驱动代码实现,通过在read和write操作中添加mutex保护临界区,确保了对共享资源的安全访问。该方案能有效防止多进程并发访问时出现的数据不一致问题,提高了驱动的稳定性和可靠性。
2026-05-27 14:51:54
387
原创 Linux字符设备驱动开发(二):实现数据交互——内核与用户空间的内存拷贝
本文介绍了一个可实现数据读写的内存字符设备驱动开发方法。通过在内核空间开辟缓冲区,利用copy_from_user和copy_to_user函数安全地在用户空间和内核空间之间传输数据。该驱动支持写入数据到内核缓冲区(最大1024字节),并允许读取后清空缓冲区(消费模式)。文章详细解析了关键API的使用方法,并提供了完整可编译的驱动代码,实现了类似文件操作的功能。需要注意的是,当前实现未加并发锁,仅适用于单线程测试环境。
2026-05-27 14:34:52
512
原创 Linux字符设备驱动开发(一):从零搭建一个可直接运行的驱动框架(附完整代码)
本文介绍了嵌入式Linux字符设备驱动开发的核心框架,基于韦东山课程思路整理出一个完整可运行的驱动模板。主要内容包括: 关键数据结构:设备号(dev_t)、cdev结构体和file_operations接口 驱动生命周期:模块加载时动态分配设备号、注册cdev、自动创建设备节点;用户访问时处理open/read/write等操作;模块卸载时的资源释放顺序 代码实现:详细解析了文件操作函数、file_operations绑定、模块初始化函数等核心代码,并提供了错误处理机制 该模板可直接复用,实现了动态设备号分
2026-05-27 14:11:30
1017
原创 STM32按键功能全面解析——单击、长按与中断检测(硬件总结五)
本文介绍了STM32按键检测的硬件电路设计、软件消抖方法及多种按键事件的识别实现。硬件上采用上拉型电路设计,软件上通过时间戳法实现非阻塞消抖。提供了轮询和状态机两种检测方案:轮询方式实现简单的单击检测;状态机方案可同时识别单击、双击和长按事件,通过定义不同状态和阈值实现复杂操作判断。所有代码基于STM32F103C8T6和标准库编写,包含完整的SysTick初始化、消抖函数和事件处理逻辑,可直接应用于实际项目。该方案兼顾实时性和低功耗需求,适合嵌入式系统的人机交互场景。
2026-05-21 09:41:03
501
原创 STM32矩阵按键详解——4×4行列扫描与非阻塞消抖(硬件总结六)
本文介绍了矩阵按键的硬件结构及STM32驱动实现。矩阵按键通过行列交叉设计(如4×4矩阵仅需8个GPIO驱动16个按键),显著提升引脚利用率。硬件方面,详细说明了行线(推挽输出)和列线(上拉输入)的连接方式,并强调安全注意事项,如避免多行同时拉低导致短路。软件实现采用行列扫描算法,配合10ms定时扫描和非阻塞消抖策略(20ms消抖周期),通过状态机检测按键稳定状态变化。提供完整的STM32标准库代码,包括GPIO初始化、SysTick时基、消抖处理和事件标记机制,可直接应用于工程。文中还提及幽灵键问题及解决
2026-05-21 09:39:53
460
原创 STM32低功耗休眠详解——睡眠、停止与待机模式实战,综合应用(三)
本文详细介绍了STM32F103的三种低功耗模式(睡眠、停止和待机),重点分析了停止模式的实现原理和应用场景。文章提供了完整的标准库实现代码,包括时钟配置、GPIO初始化、串口通信和RTC闹钟唤醒功能,并强调了硬件设计中的关键注意事项(如GPIO状态、调压器设置和外设时钟管理)。通过RTC周期性唤醒机制,实现了约20μA的超低功耗运行,适用于电池供电的物联网节点和传感器设备。所有代码均经过验证,可直接在工程中使用。
2026-05-21 09:39:42
576
原创 STM32有限状态机(FSM)详解,综合应用总结(二)
摘要(150字): 本文介绍基于有限状态机(FSM)的STM32按键事件识别方案,可精准检测短按、长按和双击操作。传统if-else嵌套方法在复杂逻辑中难以维护,而FSM通过拆分状态(空闲、消抖、按下、释放)和事件驱动转换,显著提升代码可读性与扩展性。硬件上采用PA0接按键,PB0/PB1/PB5接LED指示事件。软件实现包含消抖处理、状态迁移逻辑及时间阈值判断(短按<1秒、长按≥1秒、双击间隔<500ms),提供完整标准库代码,可直接应用于STM32F103C8T6等平台。
2026-05-21 09:39:30
507
原创 STM32裸机时间片轮转调度——用SysTick实现多任务与低功耗,综合应用总结(一)
裸机单片机时间片轮转调度器实现 本文介绍了一种在裸机单片机(STM32F103C8T6)上实现轻量级时间片轮转调度的方法。通过SysTick定时器将CPU时间划分为固定长度的时间片,采用协作式调度策略,使多个任务(如LED控制、按键扫描等)能够并发执行。文章详细阐述了调度器设计原理,包括任务控制块(TCB)结构、任务注册机制和调度算法实现。该方法无需RTOS支持,资源占用少,适合在资源受限的单片机项目中实现伪多任务处理。
2026-05-21 09:39:10
437
原创 STM32单片机引脚功能详解——从GPIO到AFIO的标准库配置指南(硬件总结四)
STM32F103C8T6引脚功能与GPIO配置详解 摘要:本文详细分析了STM32F103C8T6单片机的引脚功能与GPIO配置方法。该芯片采用LQFP48封装,48个引脚支持GPIO、ADC、USART等多种外设功能。文章首先介绍了引脚分类与核心功能引脚,包括电源、复位、晶振和调试接口的设计建议。重点解析了GPIO的8种工作模式(3种输入、2种输出、2种复用和1种模拟模式)及其适用场景,并提供了标准库配置流程与示例代码。通过理解引脚复用机制和正确配置工作模式,开发者可以充分发挥STM32的硬件潜力,实现
2026-05-20 09:31:53
1027
原创 STM32 PWM脉冲宽度调制详解——标准库函数实现,附呼吸灯与舵机驱动(硬件总结三)
本文介绍了STM32F103C8T6微控制器通过硬件定时器生成PWM信号的方法。PWM技术通过调节方波的占空比来等效模拟电压输出,广泛应用于LED调光、电机控制和舵机驱动等场景。文章详细讲解了PWM原理、定时器配置方法以及关键参数计算,并提供了基于标准库的代码实现,包括1kHz PWM初始化、占空比调节函数和呼吸灯示例。此外还给出了舵机控制(50Hz)的特殊参数配置。硬件接线方面列出了常用定时器通道对应的引脚,强调了大功率负载需隔离驱动。整个方案充分利用STM32硬件资源,无需CPU干预即可实现高精度PWM
2026-05-20 09:31:35
434
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅