STM32F103RG RT-Thread 项目实战:4个LED流水灯 + 串口日志输出完整代码解析
STM32F103RG RT-Thread实战从零构建LED流水灯与串口日志系统1. 项目概述与环境搭建在嵌入式开发领域STM32系列MCU因其出色的性价比和丰富的生态资源而广受欢迎。RT-Thread作为一款国产实时操作系统为STM32开发者提供了完整的软件框架支持。本教程将基于STM32F103RG芯片通过RT-Thread Studio开发环境实现一个包含4个LED流水灯控制和串口日志输出的完整项目。硬件准备清单STM32F103RG开发板如创思通信开发板J-Link调试器V9及以上版本推荐USB-TTL转换模块CH340芯片4个LED灯及限流电阻软件环境配置安装RT-Thread Studio最新版本可从官网获取安装J-Link驱动软件准备串口调试工具如通信猫、Putty等提示确保开发板的供电稳定JTAG接口连接正确USB-TTL模块的TX/RX与开发板交叉连接TX接RXRX接TX。2. 工程创建与基础配置2.1 新建RT-Thread项目在RT-Thread Studio中按照以下步骤创建项目选择文件 → 新建 → RT-Thread项目项目类型选择基于芯片指定芯片型号为STM32F103RG调试器接口选择JTAG完成基础工程创建2.2 硬件抽象层配置修改board.h文件确认系统时钟配置#define BSP_CLOCK_SOURCE HSI #define BSP_CLOCK_FREQ 8U #define BSP_CLOCK_SYSTEM_FREQ 72U配置串口1UART1为日志输出端口#define BSP_USING_UART1 #define BSP_UART1_TX_PIN PA9 #define BSP_UART1_RX_PIN PA103. LED驱动实现3.1 引脚定义与初始化在main.c中添加LED引脚定义#define LED1_PIN 47 // PC15 #define LED2_PIN 45 // PC13 #define LED3_PIN 25 // PB9 #define LED4_PIN 4 // PA4 static void led_init(void) { rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT); rt_pin_mode(LED2_PIN, PIN_MODE_OUTPUT); rt_pin_mode(LED3_PIN, PIN_MODE_OUTPUT); rt_pin_mode(LED4_PIN, PIN_MODE_OUTPUT); // 初始状态全部熄灭根据电路设计可能为高或低电平熄灭 rt_pin_write(LED1_PIN, PIN_HIGH); rt_pin_write(LED2_PIN, PIN_HIGH); rt_pin_write(LED3_PIN, PIN_HIGH); rt_pin_write(LED4_PIN, PIN_HIGH); }3.2 LED控制逻辑实现创建LED流水灯线程static void led_thread_entry(void *parameter) { while (1) { rt_kprintf(LED sequence start\n); // LED1亮 → LED2亮 → LED3亮 → LED4亮 rt_pin_write(LED1_PIN, PIN_LOW); rt_thread_mdelay(100); rt_pin_write(LED2_PIN, PIN_LOW); rt_thread_mdelay(100); rt_pin_write(LED3_PIN, PIN_LOW); rt_thread_mdelay(100); rt_pin_write(LED4_PIN, PIN_LOW); rt_thread_mdelay(1000); rt_kprintf(All LEDs on\n); // 全部熄灭 rt_pin_write(LED1_PIN, PIN_HIGH); rt_thread_mdelay(100); rt_pin_write(LED2_PIN, PIN_HIGH); rt_thread_mdelay(100); rt_pin_write(LED3_PIN, PIN_HIGH); rt_thread_mdelay(100); rt_pin_write(LED4_PIN, PIN_HIGH); rt_thread_mdelay(2000); rt_kprintf(All LEDs off\n); } }4. 串口日志系统优化4.1 日志级别配置在main.c开头添加日志系统配置#define DBG_TAG MAIN #define DBG_LVL DBG_LOG #include rtdbg.hRT-Thread支持以下日志级别级别宏定义说明错误DBG_ERROR严重错误信息警告DBG_WARNING警告信息信息DBG_INFO普通运行信息调试DBG_LOG详细调试信息4.2 增强型日志输出改进日志输出格式增加时间戳void enhanced_log(const char *fmt, ...) { rt_uint32_t tick rt_tick_get(); rt_kprintf([%5d] , tick); va_list args; va_start(args, fmt); rt_vsnprintf(rt_log_buf, sizeof(rt_log_buf), fmt, args); va_end(args); rt_kprintf(%s\n, rt_log_buf); }5. 系统集成与调试5.1 主函数实现完整的main()函数实现int main(void) { // 硬件初始化 led_init(); // 创建LED控制线程 rt_thread_t tid rt_thread_create(led, led_thread_entry, RT_NULL, 512, 20, 10); if (tid ! RT_NULL) { rt_thread_startup(tid); } else { LOG_E(LED thread creation failed!); return -1; } // 打印系统信息 LOG_I(System initialization completed); LOG_I(RT-Thread version: %s, RT_VERSION); LOG_I(LED pins: PC15(47), PC13(45), PB9(25), PA4(4)); return 0; }5.2 常见问题解决J-Link连接问题排查检查设备管理器是否识别J-Link确认JTAG接口连接正确TCK、TMS、TDI、TDO、nTRST尝试降低JTAG时钟频率在RT-Thread Studio调试配置中设置串口无输出检查确认TX/RX线序正确检查波特率设置默认115200验证串口模块供电正常LED不亮排查# 在MSH控制台中手动测试LED引脚 msh / pin_write 47 0 # LED1亮 msh / pin_write 47 1 # LED1灭6. 进阶功能扩展6.1 添加Shell控制命令扩展LED控制功能支持命令行交互static void led_ctrl(int argc, char **argv) { if (argc ! 3) { rt_kprintf(Usage: led_ctrl led_num on/off\n); return; } int led_num atoi(argv[1]); int state (strcmp(argv[2], on) 0) ? 0 : 1; switch (led_num) { case 1: rt_pin_write(LED1_PIN, state); break; case 2: rt_pin_write(LED2_PIN, state); break; case 3: rt_pin_write(LED3_PIN, state); break; case 4: rt_pin_write(LED4_PIN, state); break; default: rt_kprintf(Invalid LED number (1-4)\n); } } MSH_CMD_EXPORT(led_ctrl, Control LEDs: led_ctrl 1-4 on/off);6.2 状态监测线程创建资源监控线程定期报告系统状态static void monitor_thread_entry(void *parameter) { while (1) { rt_uint32_t total rt_memory_get_total(); rt_uint32_t used rt_memory_get_used(); LOG_I(Memory usage: %d/%d KB (%.1f%%), used / 1024, total / 1024, (float)used / total * 100); rt_thread_mdelay(5000); } }7. 项目优化建议代码结构优化将LED驱动移至独立文件drv_led.c创建硬件抽象层头文件board_define.h实现配置文件app_config.h集中管理参数性能优化技巧使用RT-Thread的软件定时器替代rt_thread_mdelay启用编译器优化选项-O2关键代码段使用RT_ENTER_CRITICAL保护扩展功能思路添加PWM控制实现LED亮度调节通过串口接收命令动态改变流水灯模式集成传感器数据采集与显示

相关新闻

KimiK 2.6 API限流实战:429错误的原理、监控与配额调度

KimiK 2.6 API限流实战:429错误的原理、监控与配额调度

1. 这不是“能用就行”的问题:KimiK 2.6 实测中429错误的真实杀伤力“国内能用又怎样?”——标题里这句反问,不是情绪宣泄,而是我在连续三天、七轮压测后写下的第一行笔记。当KimiK 2.6的API响应时间稳定在800ms以内、代码生成准确…

2026/7/11 1:18:48阅读更多 →
OpenClaw本地智能体工作流:安装、模型切换与技能开发全指南

OpenClaw本地智能体工作流:安装、模型切换与技能开发全指南

1. OpenClaw不是“另一个CLI工具”,而是本地智能体工作流的启动器OpenClaw这个名字在最近三个月的开发者社区里出现频率陡增,但很多人第一次看到它时,下意识会把它当成又一个类似curl、jq或fzf的命令行小工具——敲几条命令、完成某个具体任务…

2026/7/11 1:18:48阅读更多 →
择因框架:多Agent动态协作与对抗性共识实战指南

择因框架:多Agent动态协作与对抗性共识实战指南

1. 项目概述:这不是一场技术发布会,而是一次对“智能体协作”本质的重新定义“对话 MiniMax 择因:Agent 终会超过人类,我们又将何去何从?”——这个标题里藏着三重真实张力。第一重是技术张力:“择因”不是…

2026/7/11 1:18:48阅读更多 →
应届生求职,证书到底能不能加分?

应届生求职,证书到底能不能加分?

“证书无用论”在应届生群体中流传已久。但2025年的就业数据给出了截然不同的答案——持有相关证书的求职者在面试成功率和薪资待遇方面显著优于没有证书的应聘者。智联招聘数据显示,超过65%的雇主在筛选简历时会优先考虑持有相关证书的候选人。拥有1-2个高含金量证…

2026/7/11 2:28:53阅读更多 →
Termux OpenSSH 配置:8022端口安全加固与密钥认证5步指南

Termux OpenSSH 配置:8022端口安全加固与密钥认证5步指南

Termux OpenSSH 安全加固实战:从基础配置到企业级防护在移动设备上搭建可远程访问的开发环境已成为现代工程师的刚需,而Termux作为Android平台最强大的终端模拟器,配合OpenSSH服务能够将手机变身为便携式Linux工作站。但默认配置下的SSH服务存…

2026/7/11 2:28:53阅读更多 →
服务器上Python编译安装的完整工程实践指南

服务器上Python编译安装的完整工程实践指南

1. 为什么服务器上“pip install python”根本不存在?——从一个被反复踩烂的思维陷阱说起 很多人第一次在服务器上需要特定版本的 Python 时,下意识打开终端就敲 pip install python ,回车后看到 ERROR: Could not find a version that s…

2026/7/11 2:28:53阅读更多 →
职场AI工具应用:年轻员工优势与企业团队能力建设

职场AI工具应用:年轻员工优势与企业团队能力建设

在数字化转型浪潮中,AI工具正迅速成为职场竞争力的关键要素。近期行业讨论显示,年轻一代员工在掌握和应用各类AI工具方面展现出明显优势,这一现象背后既有技术接受度的差异,也反映了企业人才培养策略的新挑战。本文将深入分析不同…

2026/7/11 2:28:53阅读更多 →
舵机 PID 控制 Arduino 实战:P=5, I=0, D=2 参数下实现 0.5° 精度定位

舵机 PID 控制 Arduino 实战:P=5, I=0, D=2 参数下实现 0.5° 精度定位

舵机 PID 控制 Arduino 实战:P5, I0, D2 参数下实现 0.5 精度定位在机器人控制领域,舵机作为执行机构的核心部件,其定位精度直接影响整个系统的性能。传统开环控制虽然简单易用,但难以应对负载变化和机械摩擦带来的干扰。本文将深…

2026/7/11 2:28:53阅读更多 →
成功尝试将DGM-H涌现出的技能为hermes服务

成功尝试将DGM-H涌现出的技能为hermes服务

我的DGM-H进过多天的进化,现在已经进化到了1688代,各项指标优异。进化核心指标(实时更新)指标数值评级总进化代数1,688 代🟢 优秀Archive 入选数1,022 个🟢 优秀HQ 数量594 个🟢 优秀入选率60.5…

2026/7/11 2:23:51阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/10 12:10:00阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/10 12:29:21阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/10 4:59:05阅读更多 →
Premiere Pro 2025安装失败原因与AGSIS验证绕过指南

Premiere Pro 2025安装失败原因与AGSIS验证绕过指南

1. 为什么2025版PR安装比以往更“磨人”?——从弹窗警告到路径陷阱的真实处境 Premiere Pro 2025版不是简单的一次版本迭代,它是一道分水岭。我从去年底开始帮影视工作室、高校剪辑实验室和自由职业者部署2025环境,累计处理了137台设备&#…

2026/7/11 0:03:43阅读更多 →
5款实用macOS系统优化工具:让你的Mac运行更流畅更高效

5款实用macOS系统优化工具:让你的Mac运行更流畅更高效

5款实用macOS系统优化工具:让你的Mac运行更流畅更高效 【免费下载链接】open-source-mac-os-apps 🚀 Awesome list of open source applications for macOS. https://t.me/s/opensourcemacosapps 项目地址: https://gitcode.com/gh_mirrors/op/open-so…

2026/7/11 0:03:43阅读更多 →
5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux 想要让AI图像生成真正听从你的指挥吗&…

2026/7/11 0:03:43阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/10 13:39:09阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/10 22:20:33阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/10 17:29:22阅读更多 →