首页/新闻资讯/正文详情

STM32F103寄存器方式流水灯

发布时间:2026/9/24 10:05:24 来源:云帆数科 栏目:资讯中心
STM32F103寄存器方式流水灯
STM32F103寄存器方式流水灯实验报告实验名称STM32F103寄存器直接操作实现流水灯一、实验目的1.熟悉STM32F103C8T6最小系统板硬件了解GPIO端口功能。2.掌握寄存器直接操作方式理解外设时钟、GPIO配置寄存器作用。3.分别控制GPIOA‑PA0、GPIOB‑PB0、GPIOB‑PB1外接LED实现三个外接LED间隔1秒轮流点亮。4.调用板载PC13LED修改程序完成四路流水灯效果。5.熟练Keil‑MDK工程创建、代码编译、程序下载操作。6.学习Git工具将项目上传至Gitee仓库撰写实验博客。二、实验器材1.STM32F103C8T6最小系统板2.ST‑Link仿真下载器3.面包板红、黄、蓝3只LED220Ω限流电阻若干杜邦线4.笔记本电脑Keil uVision5开发软件三、实验原理STM32的GPIO外设工作前必须开启对应端口时钟由RCC_APB2ENR寄存器控制。本次实验外接三个LED分别接到PA0、PB0、PB1引脚板载LED为PC13。- GPIOx‑CRL控制引脚0‑7的工作模式PA0、PB0、PB1都由CRL寄存器配置设置为通用推挽输出。- GPIOx‑CRH控制引脚8‑15PC13属于CRH寄存器管理。- BSRR置位寄存器写1引脚输出高电平。- BRR复位寄存器写1引脚输出低电平。硬件电路PA0、PB0、PB1引脚串联220Ω限流电阻后接LED阳极LED阴极接GND。引脚输出高电平时外接LED点亮。板载PC13LED电路相反低电平点亮高电平熄灭编程的时候需要注意电平逻辑。延时采用软件空循环实现粗略达到1秒延时缺点延时精度不高。寄存器关键地址表格寄存器 基地址 偏移RCC 0x40021000 0x18(RCC_APB2ENR)GPIOA 0x40010800 0x00(CRL)GPIOB 0x40010C00 0x00(CRL)GPIOC 0x40011000 0x04(CRH)四、程序设计思路1.宏定义各个寄存器地址将地址强制转换为volatile无符号整数指针直接读写寄存器。2.初始化函数中打开GPIOA、GPIOB、GPIOC时钟。3.配置PA0、PB0、PB1推挽输出配置PC13推挽输出。4.初始化所有LED处于熄灭状态。5.编写软件延时函数双层循环空操作实现延时。6.main主循环依次点亮PA0→PB0→PB1→PC13每次延时1s然后熄灭切换下一盏灯无限循环。五、实验代码带注释引脚PA0 PB0 PB1#include stm32f10x.h// ????,??t1000 ????1?void Delay(uint32_t t){uint32_t i,j;for(i0;it;i)for(j0;j7200;j);}int main(void){// ??GPIOA?GPIOB??RCC-APB2ENR | (1U 2) | (1U 3);// PA0 ???? 50MHzGPIOA-CRL ~(0x0FU 0);GPIOA-CRL | (0x03U 0);// PB0 ???? 50MHzGPIOB-CRL ~(0x0FU 0);GPIOB-CRL | (0x03U 0);// PB1 ???? 50MHzGPIOB-CRL ~(0x0FU 4);GPIOB-CRL | (0x03U 4);// ??????GPIOA-ODR ~(1U 0);GPIOB-ODR ~((1U 0)|(1U 1));while(1){//PA0?GPIOA-ODR | (1U 0);GPIOB-ODR ~((1U 0)|(1U 1));Delay(1000); // ??1?//PB0?GPIOA-ODR ~(1U 0);GPIOB-ODR | (1U 0);GPIOB-ODR ~(1U 1);Delay(1000); // ??1?//PB1?GPIOA-ODR ~(1U 0);GPIOB-ODR ~(1U 0);GPIOB-ODR | (1U 1);Delay(1000); // ??1?}}六、实验步骤1.硬件接线PA0 →220Ω电阻→LED正极LED负极接GNDPB0 →220Ω电阻→LED正极LED负极接GNDPB1 →220Ω电阻→LED正极LED负极接GNDST‑Link连接开发板SWDIO、SWCLK、GND、3.3V。实物接线效果如图插入你三张实拍图片。2.打开Keil‑MDK新建工程选择STM32F103C8芯片。3.新建main.c文件粘贴上面寄存器代码。4.配置调试器为ST‑Link勾选下载后复位运行。5.编译工程无报错后下载程序到最小系统板。6.上电观察现象外接PA0、PB0、PB1三个LED和板子上面PC13自带LED按照顺序轮流点亮每一盏灯点亮大约保持1秒不断循环流水。7.记录现象截图Keil编译界面、硬件点灯实物图。七、实验现象程序下载完成之后外接在PA0、PB0、PB1的三个LED与板载PC13LED依次点亮流水顺序PA0 → PB0 → PB1 → PC13每个灯点亮约1秒循环往复。因为采用软件延时间隔时间不是特别精准。八、遇到的问题与解决学生真实感1.一开始代码编译报错 uint32_t 未定义。后面改用unsigned int宏定义寄存器解决报错。2.刚写完程序灯没有任何反应排查很久才想起来STM32GPIO使用前必须开启时钟补上时钟开启语句之后引脚才有输出。3.这次用到PB0与PB1两个引脚同在GPIOB端口CRL寄存器一开始移位位置写错PB1控制失效对照寄存器手册PB1对应第4‑7位修改移位数值后正常。4.板载PC13LED电平逻辑相反一开始直接套用外接LED高电平点亮的写法结果PC13状态反了修改BSRR、BRR控制语句之后正常。5.软件延时误差比较大实物上面1秒间隔看着有点快之后想要精准定时需要学习定时器。九、实验总结本次实验没有调用库函数直接操作寄存器地址控制GPIO。外接LED引脚选用PA0、PB0、PB1加上板载PC13实现四路流水灯。通过本次实验我弄明白了寄存器每一位配置的含义同一端口多个引脚配置时不能互相干扰修改CRL寄存器前先对应位清零再赋值。同时记住了PC13属于CRH寄存器不能操作CRL。软件延时只能粗略定时缺点很多。之后想要做好STM32开发还要深入学习定时器、中断。本次作业同时需要把工程上传Gitee练习Git基础命令发布实验博客完成全部提交任务。

相关推荐

9.23 封装函数 (思想,定义,调用),栈,堆区,递归
9.23 封装函数 (思想,定义,调用),栈,堆区,递归

函数难点: 思想自上而下 逐步拆解将大问题拆成小问题 小问题拆成更小问题 ---- 更小的问题 往往都对应一个简单独立的功能C语言提供了实现 功能的 语法:函数 ---function//一个函数就是来完成一个功能的 独立 单一//getchar/putchar//scanf/printf//rand()//strcpy//strcmp//s… · 2026/9/24 10:05:24

为什么 AI 写前端时,总是优先选择 React,而不是 Vue?
为什么 AI 写前端时,总是优先选择 React,而不是 Vue?

如果你在过去几个月里,高强度使用过 Codex、Cursor 或者是 Claude Code 等 AI 编程工具,你一定会察觉到一个让国内前端开发者极度不适的现象:当你扔给 AI 一张设计图,或者一段自然语言需求,让它帮你生成前端组件时&… · 2026/9/24 10:05:18

企业数字化转型AI大模型数字底座:从IT基础设施到ModelOps的全栈落地指南
企业数字化转型AI大模型数字底座:从IT基础设施到ModelOps的全栈落地指南

/* 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:45

EMC暗室维护实战:从辐射发射超标到本底噪声排查的完整指南
EMC暗室维护实战:从辐射发射超标到本底噪声排查的完整指南

/* 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 11:54:45

分布式事务全套原理:从本地事务底层推导出分布式事务、Spring传播、Seata四大模式、2PC脑裂、内外一致性完整闭环
分布式事务全套原理:从本地事务底层推导出分布式事务、Spring传播、Seata四大模式、2PC脑裂、内外一致性完整闭环

摘要 本文从本地事务的 Connection 边界出发,推导分布式事务的诞生逻辑;系统讲解 Seata AT/TCC/XA/Saga 四大模式的适用场景、底层原理与生产瓶颈;重点区分「对内可控」与「对外不可控」两套一致性体系,补齐 Spring 事务传播坑、2… · 2026/9/24 11:54:45

电源芯片实测选型指南:绕过参数陷阱的工程实践
电源芯片实测选型指南:绕过参数陷阱的工程实践

/* 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 11:54:45

微信表情能保存到相册吗?我拿 5 个表情实测了一遍
微信表情能保存到相册吗?我拿 5 个表情实测了一遍

「微信表情能保存到相册吗?」能。为了确认,我挑了 5 个不同类型的表情,逐个发给「表情保存助手」这个公众号:带字的静态图、小尺寸的、大尺寸的、会动的 GIF,还有别人刚发来的。结果都一样——每一类都能存进手机相册。… · 2026/9/24 11:54:45

AI生成图像鉴别与轻量化模型实战:从CLIP特征空间到50M参数约束
AI生成图像鉴别与轻量化模型实战:从CLIP特征空间到50M参数约束

/* 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 11:54:39

代理IP 接入决策树:按语言、并发、目标站三个条件选方案
代理IP 接入决策树:按语言、并发、目标站三个条件选方案

选代理IP这件事,说简单也简单——无非是发请求时多填一个地址。说复杂也复杂——选错了类型,代码怎么写都跑不通;选错了轮换策略,跑了一半才发现IP大面积失效。大多数团队在选型时习惯直接问“哪家IP池大、哪家便宜”,… · 2026/9/24 11:54:39

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

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

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码