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

STM32F103C8T6_Keil_寄存器流水灯实验

发布时间:2026/9/24 7:43:56 来源:云帆数科 栏目:资讯中心
STM32F103C8T6_Keil_寄存器流水灯实验
一、实验要求了解 STM32F103C8T6 最小系统核心板的基本引脚及 GPIO 资源。使用 GPIOA、GPIOB、GPIOC 三个端口分别控制 3 个 LEDLED 轮流闪烁每个状态保持约 1 秒。采用寄存器方式完成 GPIO 初始化和 LED 控制。使用 Keil 建立工程并完成编译、下载和板级验证。将开发板自带 PC13 LED 加入流水灯效果。二、硬件与引脚选择LEDMCU 引脚GPIO 配置点亮逻辑LED1PA0推挽输出高电平亮LED2PB0推挽输出高电平亮LED3PC13板载推挽输出低电平亮常见 STM32F103C8T6 Blue Pill 开发板的板载 LED 连接在 PC13并且通常采用低电平点亮。三、主要寄存器说明1. RCC_APB2ENR用于开启 GPIO 外设时钟。bit2IOPAENGPIOA 时钟使能bit3IOPBENGPIOB 时钟使能bit4IOPCENGPIOC 时钟使能RCC-APB2ENR|(1U2)|(1U3)|(1U4);2. GPIOA-CRLPA0 位于 GPIOA 低 8 位因此使用 CRL 配置。PA0 对应 bit0bit3。设置 MODE001、CNF000即 10 MHz 通用推挽输出。3. GPIOB-CRLPB0 同样使用 CRLGPIOB-CRL~(0xFU0);GPIOB-CRL|(0x1U0);4. GPIOC-CRHPC13 属于 GPIOC 高 8 位因此使用 CRH。PC13 对应 CRH 的 bit20bit23GPIOC-CRH~(0xFU20);GPIOC-CRH|(0x1U20);5. BSRR 和 BRRBSRR 用于将 GPIO 位置高BRR 用于将 GPIO 位置低。四、程序运行流程开始 ↓ 开启 GPIOA/B/C 时钟 ↓ 配置 PA0、PB0、PC13 为推挽输出 ↓ 初始化 SysTick产生 1 ms 节拍 ↓ PA0 LED 点亮 1 秒 ↓ PB0 LED 点亮 1 秒 ↓ PC13 LED 点亮 1 秒 ↓ 返回 PA0 ↓ 循环运行五、代码实现#includestm32f10x.h/* * STM32F103C8T6 寄存器方式三色流水灯 * * LED1 : PA0 - 外接LED高电平亮 * LED2 : PB0 - 外接LED高电平亮 * LED3 : PC13 - Blue Pill板载LED低电平亮 * * 流水顺序 * PA0亮1秒 - PB0亮1秒 - PC13亮1秒 - 循环 *//* LED引脚定义 */#defineLED1_PIN(1U0)/* PA0 */#defineLED2_PIN(1U0)/* PB0 */#defineLED3_PIN(1U13)/* PC13 *//* 毫秒计数 */volatileuint32_tg_ms0;/* SysTick中断 */voidSysTick_Handler(void){g_ms;}/* 毫秒延时 */voidDelay_ms(uint32_tms){uint32_tstartg_ms;while((g_ms-start)ms){/* 等待 */}}/* GPIO初始化 */voidGPIO_Init(void){/* * 开启GPIOA、GPIOB、GPIOC时钟 * * APB2ENR: * bit2 IOPAEN * bit3 IOPBEN * bit4 IOPCEN */RCC-APB2ENR|(1U2)|(1U3)|(1U4);/* * PA0配置 * * CRL bit0~3控制PA0 * * MODE0 01 * CNF0 00 * * 即 * 10MHz通用推挽输出 */GPIOA-CRL~(0xFU0);GPIOA-CRL|(0x1U0);/* * PB0配置 * * CRL bit0~3控制PB0 */GPIOB-CRL~(0xFU0);GPIOB-CRL|(0x1U0);/* * PC13配置 * * CRH bit20~23控制PC13 * * MODE13 01 * CNF13 00 * * 即 * 10MHz通用推挽输出 */GPIOC-CRH~(0xFU20);GPIOC-CRH|(0x1U20);/* * 上电后全部熄灭 *//* PA0输出高电平 */GPIOA-BSRRLED1_PIN;/* PB0输出高电平 */GPIOB-BSRRLED2_PIN;/* PC13输出高电平板载LED熄灭 */GPIOC-BSRRLED3_PIN;}/* 三个LED全部熄灭 */voidLED_All_Off(void){/* PA0高电平 */GPIOA-BSRRLED1_PIN;/* PB0高电平 */GPIOB-BSRRLED2_PIN;/* PC13高电平 */GPIOC-BSRRLED3_PIN;}/* LED1亮 */voidLED1_On(void){LED_All_Off();/* PA0低电平 */GPIOA-BRRLED1_PIN;}/* LED2亮 */voidLED2_On(void){LED_All_Off();/* PB0低电平 */GPIOB-BRRLED2_PIN;}/* LED3亮 */voidLED3_On(void){LED_All_Off();/* * PC13板载LED低电平点亮 */GPIOC-BRRLED3_PIN;}/* 主函数 */intmain(void){/* GPIO初始化 */GPIO_Init();/* * SysTick配置 * * 每1ms产生一次中断 */SysTick_Config(SystemCoreClock/1000U);while(1){/* PA0 LED亮1秒 */LED1_On();Delay_ms(1000);/* PB0 LED亮1秒 */LED2_On();Delay_ms(1000);/* PC13 LED亮1秒 */LED3_On();Delay_ms(1000);}}六、板级验证程序下载成功后PA0 对应 LED 点亮约 1 秒。PA0 熄灭PB0 LED 点亮约 1 秒。PB0 熄灭PC13 板载 LED 点亮约 1 秒。PC13 熄灭重新回到 PA0。程序持续循环。七、实验总结通过本实验熟悉了 STM32F103C8T6 GPIO 的寄存器操作流程。程序从 RCC 时钟开启、GPIO 模式配置到输出电平控制逐步完成 LED 控制没有依赖 HAL GPIO 接口。实验中比较重要的一点是不同 LED 的有效电平可能不同。普通外接 LED 根据实际接线确定亮灭逻辑而 Blue Pill 常见的 PC13 板载 LED 通常为低电平点亮因此程序需要单独处理 PC13。使用 SysTick 建立 1 ms 时间基准再通过毫秒计数实现 1 秒切换可以避免单纯使用空循环造成的延时不稳定也方便后续扩展不同流水速度和显示模式。

相关推荐

航空公司双中台落地指南:边界划分、数据治理与避坑实践
航空公司双中台落地指南:边界划分、数据治理与避坑实践

/* 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 7:43:49

从赛博武学到生命无感守护:具身智能之后的下一个密码
从赛博武学到生命无感守护:具身智能之后的下一个密码

/* 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 7:43:25

智能视觉如何落地渣土车治理:架构设计与调优实践
智能视觉如何落地渣土车治理:架构设计与调优实践

/* 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 7:43:19

马兰士MODEL 40n使用指南:接线、HEOS设置与避坑全攻略
马兰士MODEL 40n使用指南:接线、HEOS设置与避坑全攻略

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

m4a转mp3后音质变差怎么办?采样率、码率与ffmpeg参数的一次完整排查
m4a转mp3后音质变差怎么办?采样率、码率与ffmpeg参数的一次完整排查

阅读建议:本文不推荐任何商业软件,所有方案都基于开源工具 FFmpeg ffprobe 复现。 文中出现的命令在 Windows(PowerShell)、macOS、Linux 通用,仅在路径写法上有差异。 先看现象:三种典型的"音质变差… · 2026/9/24 9:09:11

AI数据分析Agent:让实证论文从原始数据到结果一步到位
AI数据分析Agent:让实证论文从原始数据到结果一步到位

/* 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:08:27

干货合集:盘点2026年实力封神的一键生成论文工具
干货合集:盘点2026年实力封神的一键生成论文工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年一键生成论文工具横空出世,实测提速效果炸裂,覆盖选题构思、文献综述、数据整理、格式排版等全流程场景,真正帮你高效搞定论文写作。 一、全流程王者:一站式搞定论文全链路&… · 2026/9/24 9:08:27

FlyMCU串口烧录STM32全攻略:从接线到量产一次讲透
FlyMCU串口烧录STM32全攻略:从接线到量产一次讲透

/* 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:08:27

12-90V宽输入降压恒流芯片H5528K车灯驱动方案设计与调试
12-90V宽输入降压恒流芯片H5528K车灯驱动方案设计与调试

/* 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:08:15

基于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

了解更多?预约专属演示

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

企业微信二维码