STM32F103C8T6 寄存器方式流水灯实验报告

发布时间:2026/9/24 11:04:12
STM32F103C8T6 寄存器方式流水灯实验报告 STM32F103C8T6 寄存器方式流水灯实验报告一、实验目的熟悉STM32F103C8T6最小系统板Blue Pill硬件结构了解最小系统构成。理解STM32 GPIO寄存器原理掌握端口时钟、引脚模式、输出寄存器的配置。使用寄存器直接编程配置GPIOA、GPIOB、GPIOC引脚外接红、绿、蓝LED结合板载PC13 LED4个LED轮流点亮切换间隔1秒。掌握Keil工程编译、程序烧录流程学习Git基础命令将工程上传至Gitee代码仓库。二、实验器材STM32F103C8T6最小系统板 ×1面包板 ×1红色LED、绿色LED、蓝色LED 各1只220Ω限流电阻 ×3杜邦线若干、ST-Link下载器、USB数据线软件Keil MDK5、STM32CubeProgrammer、Git三、实验原理3.1 硬件电路原理LED采用共阴极接法GPIO引脚输出低电平LED点亮输出高电平LED熄灭。PA0外接红色LED 220Ω电阻 → GNDPB0外接绿色LED 220Ω电阻 → GNDPC0外接蓝色LED 220Ω电阻 → GNDPC13开发板自带板载LED3.2 相关寄存器说明寄存器名称寄存器地址功能说明RCC_APB2ENR0x40021018APB2外设时钟使能寄存器开启GPIOA/GPIOB/GPIOC时钟GPIOx_CRL0x40010800 0x00GPIO低8位配置寄存器配置PA0、PB0、PC0引脚模式GPIOx_CRH0x40010800 0x04GPIO高8位配置寄存器配置PC13引脚模式GPIOx_ODR0x40010800 0x0CGPIO输出数据寄存器控制引脚输出高低电平寄存器配置说明RCC_APB2ENRBit21开启GPIOABit31开启GPIOBBit41开启GPIOC。GPIOx_CRL/CRH配置位0011代表通用推挽输出最大速度2MHz。GPIOx_ODR对应bit置0引脚输出低电平LED点亮bit置1高电平LED熄灭。3.3 程序设计思路开启GPIOA、GPIOB、GPIOC的APB2外设时钟。配置PA0、PB0、PC0、PC13为推挽输出模式。主循环依次单独点亮1个LED其余全部熄灭延时1秒循环切换。点亮顺序PA0红灯 → PB0绿灯 → PC0蓝灯 → PC13板载LED循环往复。四、实验代码寄存器版本main.c#includestm32f10x.hvoidDelay_1s(void){uint32_ti,j;for(i0;i1000;i)for(j0;j7200;j);}intmain(void){RCC-APB2ENR|(12);//Bit2 IOPAEN1开启GPIOA时钟RCC-APB2ENR|(13);//Bit3 IOPBEN1开启GPIOB时钟RCC-APB2ENR|(14);//Bit4 IOPCEN1开启GPIOC时钟GPIOA-CRL~(0x0F0);//清空PA0的4位配置位GPIOA-CRL|(0x030);//0011通用推挽输出最大速度2MHzGPIOB-CRL~(0x0F0);GPIOB-CRL|(0x030);GPIOC-CRL~(0x0F0);GPIOC-CRL|(0x030);GPIOC-CRH~(0x0F20);GPIOC-CRH|(0x0320);while(1){GPIOA-ODR~(1U0);GPIOB-ODR|(1U0);GPIOC-ODR|(1U0);GPIOC-ODR|(1U13);Delay_1s();GPIOA-ODR|(1U0);GPIOB-ODR~(1U0);GPIOC-ODR|(1U0);GPIOC-ODR|(1U13);Delay_1s();GPIOA-ODR|(1U0);GPIOB-ODR|(1U0);GPIOC-ODR~(1U0);GPIOC-ODR|(1U13);Delay_1s();GPIOA-ODR|(1U0);GPIOB-ODR|(1U0);GPIOC-ODR|(1U0);GPIOC-ODR~(1U13);Delay_1s();}}cc五、实验现象程序烧录完成按下复位键后4 个 LED 按照顺序依次点亮PA0 红灯亮 1s→PB0 绿灯亮 1s→PC0 蓝灯亮 1s→PC13 板载 LED 亮 1s循环往复任意时刻只有一个 LED 点亮。流水灯六、实验总结本次实验直接操作 STM32 底层寄存器理解 GPIO 外设工作原理掌握寄存器配置步骤。学会 Keil 编译、程序烧录同时掌握 Git 版本控制将工程托管到 Gitee 仓库。熟悉 STM32 最小系统硬件掌握 GPIO 驱动 LED 的底层原理。