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 完全不动作是最常见错误。
企业数字化 ERP 产品动态
相关推荐
RedwoodJS 官方教程开篇导读:从零构建一个数据库驱动的全栈博客应用 后端前端Web框架开发工具 【免费下载链接】redwood RedwoodGraphQL 项目地址: https://gitcode.com/gh_mirrors/re/redwood 点击查看 免费下载 这篇导读基于 Redwood 仓库中 version-4.x 的教程前言 展开。RedwoodJS 是一个"有主见"(opiniona… · 2026/9/24 9:19:35
高通9008救砖实操:QFIL从驱动安装到分区刷写全流程 /* 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:29
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:18:51
工业监控界面搭建实战:用2D组态平台快速搞定数据绑定与画面交付 接到一个空压站集中监控的项目时,甲方只丢过来一张工艺流程图和一份Excel点位表,交货周期压到一周。第一次接触智捷云2D组态工具,说实话我心里也没底,毕竟之前也经历过从零手写前端做工业监控界面的痛苦——项目拖了两个月&#x… · 2026/9/24 19:54:34
OpenCut开源剪辑工具实测:免费无水印+AI剪片,替代剪映? 视频剪辑这件事,过去几年一直被几款商业软件牢牢把持着。想剪个片子,要么忍受导出时硕大的水印,要么就得为几个基础功能掏订阅费。我身边不少做自媒体的朋友,每个月在剪辑工具上的开销加起来够吃好几顿火锅了。直到最近࿰… · 2026/9/24 19:54:34
Python实现MinHash海量文本去重:从原理到代码实战 做爬虫采集、新闻聚合或者语料库清洗的朋友,大概率都遇到过同一个问题:抓下来的文本重复率能到30%甚至更高。同一篇新闻被不同网站转载,改个标题、换一下首段、插入几条广告,内容主体几乎一模一样。这个时候拿MD5做精确去重根本没… · 2026/9/24 19:54:34
麒麟V10 ARM部署K8S 1.26.15:外部etcd与containerd实战 简介:这份资源面向需要在国产化信创环境中落地容器编排的运维与云原生工程师,聚焦Kylin V10操作系统搭配ARM架构服务器、采用外部etcd与containerd运行时部署Kubernetes 1.26.15一主多从集群的完整离线安装包。压缩包共41个文件,约645.74MB&a… · 2026/9/24 19:54:34
Claude Code深度解析:AI编程代理如何重塑终端工作流 1. 先聊清楚:Claude Code 到底是什么,以及它凭什么值得关注我第一次注意到Claude Code这个关键词,是在一个技术社群里。有人贴了一段终端截图,里面是一个交互式命令行界面,AI 在逐行分析和修改代码,评论区全… · 2026/9/24 19:54:34
数据库课程设计入门:从四张空表理解表结构与约束设计 刚接手数据库课程设计时,任务书写得很简短:SchoolDB数据库,设计四张表,无数据。说实话,第一次看到“无数据”三个字,很多人是愣住的——不让我填数据,那我交什么?后来我才明白&#… · 2026/9/24 19:54:26
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44