了解STM32最小系统核心板
STM32F103C8T6 多端口流水灯实验报告STM32F103C8T6 多端口流水灯实验报告博客发布 / 学习通提交 Markdown可直接导出 PDF配套代码、git 操作说明完整满足作业要求芯片STM32F103C8T6Blue Pill 蓝板最小系统功能GPIOA/GPIOB/GPIOC 三个端口各 1 只 LED 板载 PC13 LED4 个 LED 轮流闪烁间隔 1s一、实验目的认识 STM32F103C8T6 最小系统Blue Pill硬件组成了解最小系统核心电路。掌握 STM32 GPIO 寄存器底层操作理解 GPIO 端口时钟、模式、输出寄存器配置。使用 GPIOA、GPIOB、GPIOC 三个不同端口引脚外接 LED实现轮流闪烁同时复用板载 PC13 LED 加入流水灯序列。学会 Keil 工程创建、代码编译、程序烧录掌握 Git 基础命令将工程上传至 Gitee/GitHub 代码仓库。二、实验器材STM32F103C8T6 最小系统板Blue Pill面包板、杜邦线LED 发光二极管 ×3红、绿、蓝220Ω 限流电阻 ×3ST-LINK 下载器Keil MDK5 开发环境Git 工具、Gitee/GitHub 账号三、硬件电路设计3.1 最小系统简介STM32F103C8T6 最小系统包含主芯片、8MHz 外部高速晶振 HSE、32.768K RTC 晶振、复位电路、BOOT 启动配置电路、电源稳压、下载接口。板载 LED 连接在PC13 引脚LED 是低电平点亮PC13 输出 0灯亮输出 1灯灭。3.2 外接 LED 硬件接线全部 LED 采用灌电流接法GPIO 引脚输出低电平点亮 LED串联 220Ω 限流电阻保护 LED。| LED 编号 | 端口引脚 | 颜色 | 接线说明 || ---- | ---- | ---- | ---- || LED1 | PA0GPIOA | 红 | PA0 → 220Ω 电阻 → LED 阳极LED 阴极 → GND || LED2 | PB0GPIOB | 绿 | PB0 → 220Ω 电阻 → LED 阳极LED 阴极 → GND || LED3 | PC1GPIOC | 蓝 | PC1 → 220Ω 电阻 → LED 阳极LED 阴极 → GND || LED4板载 | PC13GPIOC | 板载 | 板载自带无需外接元件低电平点亮 |原理引脚输出低电平 0V电流从 3.3V 经过 LED、电阻流入 GPIO 引脚LED 点亮引脚输出高电平 3.3V两端无压差LED 熄灭。3.3 电路原理图本实验电路原理图由STM32最小系统核心电路与多路LED流水灯驱动电路两部分组成整体采用3.3V直流供电所有LED均为灌电流驱动接法电路结构简洁、稳定性高适配本次多端口LED轮流点亮的实验需求。一、原理图整体架构供电电路由最小系统板5V/3.3V稳压电路输出稳定3.3V电压为芯片及所有LED外设提供工作电源杜绝电压波动导致的器件异常。主控电路以STM32F103C8T6主控芯片为核心搭载8MHz外部晶振电路提供系统时钟、复位电路实现系统重启、BOOT配置电路保障正常上电启动构成完整最小工作系统。外设驱动电路包含4路LED指示电路其中3路为外接独立LED电路1路为板载LED电路分别对应不同GPIO端口实现多端口独立控制。二、详细引脚电路连接原理图核心参数外接LED电路3路外设电路电路结构完全一致均采用“GPIO引脚220Ω限流电阻LED指示灯接地”的标准灌电流电路。PA0、PB0、PC1三个引脚分别串联1颗220Ω限流电阻限流电阻可限制回路最大电流避免过流烧毁LED灯珠及芯片GPIO引脚电阻另一端对应接入红、绿、蓝三色LED阳极所有LED阴极统一接入电路GND地端。板载LED电路板载LED固定连接主控芯片PC13引脚电路内置限流保护元件无需外接电阻电路结构精简默认低电平触发点亮、高电平熄灭。三、电路工作原理电路通电后STM32最小系统正常上电启动系统时钟初始化完成GPIO端口配置为通用推挽输出模式。当对应GPIO引脚输出低电平0V时3.3V电源、LED灯珠、限流电阻、GPIO引脚形成完整闭合回路产生工作电流LED点亮当引脚输出高电平3.3V时电路两端无电压压差回路无电流LED熄灭。通过程序循环控制PA0、PB0、PC1、PC13四个引脚的电平状态分时拉低不同端口电平、其余端口保持高电平即可实现四路LED依次轮流点亮、循环流水的实验效果。同时220Ω限流电阻起到核心保护作用将回路电流控制在LED额定工作范围内保障电路长期稳定运行。四、原理图设计要点所有LED采用共地设计电路布线规整有效避免多路灯光串扰问题严格匹配限流电阻阻值兼顾LED亮度与器件安全无过流、欠流问题多端口GPIO独立布线互不干扰可实现单路独立控制满足流水灯逻辑需求。四、程序设计思路 寄存器说明4.1 设计思路开启 GPIO 端口时钟RCC 寄存器GPIOA/GPIOB/GPIOC 挂载在 APB2 总线上打开对应端口时钟。配置 GPIO 模式寄存器 CRL/CRH将 PA0、PB0、PC1、PC13 设置为通用推挽输出模式最大速度 2MHz。输出控制使用 ODR 输出寄存器写 0 点亮 LED写 1 熄灭 LED。简单软件延时函数循环空操作实现约 1s 延时裸机无 SysTick简单软件延时适合本实验。流水逻辑依次点亮 1 个 LED其余全部熄灭延时 1s切换下一个循环PA0 → PB0 → PC1 → PC13循环往复。4.2 寄存器地址与详细参数重点答题部分STM32F103 内核Cortex-M3APB2 外设基地址 0x40010000RCC 时钟寄存器RCC_APB2ENR地址0x40021018位定义Bit2IOPAEN 1 → 开启 GPIOA 时钟Bit3IOPBEN 1 → 开启 GPIOB 时钟Bit4IOPCEN 1 → 开启 GPIOC 时钟GPIOA 寄存器组基地址0x40010800GPIOA_CRL端口配置低寄存器0x40010800控制 PA0~PA7PA0CNF00 (通用推挽输出)MODE01 (输出速度 2MHz)对应 bit0~bit3 0011GPIOA_ODR输出寄存器0x4001080Cbit0 控制 PA0 输出电平GPIOB 寄存器组基地址0x40010C00GPIOB_CRL0x40010C00PB0bit0~bit3 0011推挽输出 2MHzGPIOB_ODR0x40010C0Cbit0 控制 PB0GPIOC 寄存器组基地址0x40011000GPIOC_CRL0x40011000PC1 在 CRLbit4~bit70011GPIOC_CRH0x40011004PC13 在 CRHbit20~bit230011GPIOC_ODR0x4001100Cbit1、bit13 分别控制 PC1、PC13CNF [1:0]00 推挽输出MODE [1:0]01 → 2MHz 输出速度。五、C 语言 寄存器版完整代码带详细注释新建 main.c直接复制纯寄存器操作不调用标准库函数//STM32F103C8T6 寄存器版本流水灯//PA0、PB0、PC1外接LEDPC13板载LED轮流闪烁间隔1s#include “stm32f10x.h”//寄存器宏定义直接映射地址#define RCC_APB2ENR (*(volatile unsigned int *)0x40021018)//GPIOA 寄存器#define GPIOA_CRL (*(volatile unsigned int)0x40010800)#define GPIOA_ODR ((volatile unsigned int *)0x4001080C)//GPIOB 寄存器#define GPIOB_CRL (*(volatile unsigned int)0x40010C00)#define GPIOB_ODR ((volatile unsigned int *)0x40010C0C)//GPIOC 寄存器#define GPIOC_CRL (*(volatile unsigned int)0x40011000)#define GPIOC_CRH ((volatile unsigned int)0x40011004)#define GPIOC_ODR ((volatile unsigned int *)0x4001100C)/**brief 软件延时函数简单空循环大约延时1s72MHz系统时钟*/void Delay1s(void){unsigned int i,j;for(i0;i1000;i)for(j0;j7200;j);}/**brief GPIO初始化PA0 PB0 PC1 PC13 推挽输出*/void LED_GPIO_Init(void){//1. 开启APB2端口时钟Bit2 IOPA、Bit3 IOPB、Bit4 IOPC置1RCC_APB2ENR | (12) | (13) | (14);// GPIOA PA0配置推挽输出2MHzGPIOA_CRL ~(0x0F 0); //清空PA0对应的4位GPIOA_CRL | (0x03 0); //MODE01,CNF00 →00110x03GPIOA_ODR | (10); //PA0初始高电平LED熄灭// GPIOB PB0配置推挽输出2MHzGPIOB_CRL ~(0x0F 0);GPIOB_CRL | (0x03 0);GPIOB_ODR | (10); //PB0初始高电平LED熄灭// GPIOC PC1配置推挽输出2MHzGPIOC_CRL ~(0x0F 4); //PC1对应bit4~bit7GPIOC_CRL | (0x03 4);GPIOC_ODR | (11); //PC1初始高电平LED熄灭// GPIOC PC13配置推挽输出2MHzPC13在CRH寄存器每组4bit13号引脚对应第5组(bit20~23)GPIOC_CRH ~(0x0F 20);GPIOC_CRH | (0x03 20);GPIOC_ODR | (113); //PC13初始高电平板载LED熄灭}int main(void){LED_GPIO_Init(); //初始化GPIOwhile(1) { //第1步点亮PA0其余全部熄灭 GPIOA_ODR ~(10); //PA0输出低亮 GPIOB_ODR | (10); GPIOC_ODR | (11) | (113); Delay1s(); //第2步点亮PB0其余熄灭 GPIOA_ODR | (10); GPIOB_ODR ~(10); GPIOC_ODR | (11) | (113); Delay1s(); //第3步点亮PC1其余熄灭 GPIOA_ODR | (10); GPIOB_ODR | (10); GPIOC_ODR ~(11); GPIOC_ODR | (113); Delay1s(); //第4步点亮PC13板载LED其余熄灭 GPIOA_ODR | (10); GPIOB_ODR | (10); GPIOC_ODR | (11); GPIOC_ODR ~(113); Delay1s(); }}六、实验步骤硬件搭建面包板接入 3 只 LED220Ω 电阻分别连接 PA0、PB0、PC1 到 LED 阳极LED 阴极接 GND。Keil MDK 新建 STM32F103C8 工程添加 main.c选择芯片 STM32F103C8T6配置 ST-LINK 下载。编译工程检查无报错将程序烧录进最小系统板。上电测试4 个 LED 按照 PA0→PB0→PC1→PC13 顺序轮流点亮间隔 1 秒循环。现象观察每时刻只有 1 个灯亮其余熄灭循环流水。七、实验现象与结果烧录程序上电后八、实验分析与问题总结PC13 板载 LED 特性Blue Pill 板上 PC13LED 是低电平点亮很多新手容易写反电平出现常亮 / 不亮。软件延时本实验是简单循环延时精度不高适合演示高精度延时需要使用 SysTick 定时器。寄存器配置注意CRL 控制引脚 0\7CRH 控制引脚 8\15PC13 属于 CRH不能写到 CRL。必须开启端口时钟不开启 RCC 时钟GPIO 寄存器无法读写LED 完全不动作是最常见错误。

相关新闻

RV1106嵌入式AI开发:从环境搭建到NPU部署全链路实践

RV1106嵌入式AI开发:从环境搭建到NPU部署全链路实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 9:19:32 阅读更多 →
AI辅助技术设计:信任分级与判断锚点实战

AI辅助技术设计:信任分级与判断锚点实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 9:19:32 阅读更多 →
12路锁控板RS485通讯协议详解:帧结构、指令集与调试实战

12路锁控板RS485通讯协议详解:帧结构、指令集与调试实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 9:19:32 阅读更多 →

最新新闻

FreeMaster Recorder嵌入式运行时数据采集原理与实战

FreeMaster Recorder嵌入式运行时数据采集原理与实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 10:04:04 阅读更多 →
2026 企业 AI 办公工具选型指南:从场景匹配到权限评估

2026 企业 AI 办公工具选型指南:从场景匹配到权限评估

企业调研AI办公工具的过程中,很容易陷入几个典型的认知误区:不少团队一开始直接拉一张公开的功能清单挨个打勾,以功能点的数量多少作为核心判断标准,也有不少采购方只盯着预算阈值选报价最低的产品,还有部分决策者直接…

2026/9/24 10:04:04 阅读更多 →
AI 搜索获客与传统 SEO 获客 ROI 对比|B 端中小企业 GEO 落地实战分析

AI 搜索获客与传统 SEO 获客 ROI 对比|B 端中小企业 GEO 落地实战分析

随着生成式大模型普及,豆包、DeepSeek、Kimi 等 AI 工具成为 B 端采购调研供应商的重要入口。传统 SEO 以网页排名为核心,而 GEO(生成式引擎优化)以 AI 模型引用、品牌推荐为目标。本文对比两套获客模式的 ROI 差异,结…

2026/9/24 10:04:04 阅读更多 →
氨水净化除铁装置设计全解析:工艺选型与运行避坑指南

氨水净化除铁装置设计全解析:工艺选型与运行避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 10:04:04 阅读更多 →
FX5U与汇川伺服Modbus-RTU实战接线调试指南

FX5U与汇川伺服Modbus-RTU实战接线调试指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 10:04:04 阅读更多 →
Robot Framework 4.1 版本特性详解:continue-on-failure 标签控制与参数转换增强

Robot Framework 4.1 版本特性详解:continue-on-failure 标签控制与参数转换增强

测试RPA接口测试 【免费下载链接】robotframework Generic automation framework for acceptance testing and RPA 项目地址: https://gitcode.com/gh_mirrors/ro/robotframework 点击查看 免费下载 导读 Robot Framework 4.1 是继 4.0 之后的一个特性版本&#x…

2026/9/24 10:03:04 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →