摘要
本实验旨在使用STM32F103微控制器来实现一个简单的流水灯效果。通过配置GPIO引脚并编写C代码,我们成功地点亮了一系列LED,以创建流水灯效果。实验过程中,我们学习了如何使用STM32CubeMX和HAL库进行GPIO配置和控制。
引言
STM32F103是一款基于ARM Cortex-M3内核的微控制器,具有丰富的外设和强大的性能。在本实验中,我们将利用STM32F103的GPIO引脚来控制LED,从而实现一个简单的流水灯效果。这个实验旨在帮助我们熟悉STM32F103的开发环境和GPIO控制。
准备工作
使用STM32CubeMX创建一个新的工程,选择适当的目标板型号和设置。
在STM32CubeMX中配置GPIO引脚,将它们设置为输出模式,并分配给LED。
程序设计思路
时钟配置:首先,需要配置系统时钟以及GPIOx的时钟。这通常涉及设置RCC(Reset and Clock Control)寄存器。
GPIO配置:配置GPIOA、GPIOB、GPIOC的相应端口为输出模式,以控制LED。每个GPIO端口的配置都涉及CRH(High Control Register)和CRL(Low Control Register)寄存器的设置。
LED控制循环:在一个无限循环中,点亮一个LED并熄灭其他LED。为了轮流控制LED,可以使用一个变量来跟踪当前点亮的LED。
延时:使用延时函数等待一段时间,通常是1秒。
更新LED:更新LED的控制变量,以便下一轮轮流闪烁。
寄存器地址和详细参数
RCC(Reset and Clock Control)寄存器:配置系统时钟。
RCC_APB2ENR:启用GPIOA、GPIOB和GPIOC的时钟。
GPIOA、GPIOB和GPIOC寄存器:配置端口为输出模式,以控制LED。
GPIOx_CRL和GPIOx_CRH:控制端口模式和速度。
CNFy[1:0]:00代表推挽输出。
MODEy[1:0]:01代表输出最大速度2 MHz。
GPIOx_BSRR:设置或清除引脚状态。
BSy:1代表设置引脚,0代表清除引脚。
BRy:1代表清除引脚,0代表设置引脚。
对于每个GPIO端口,我们将配置CRH和CRL寄存器以设置相应引脚的模式和速度,BSRR寄存器以设置引脚状态(高电平点亮,低电平熄灭)。
在STM32CubeMX中生成初始化代码,包括HAL库的配置。
打开生成的工程,在main.c文件中编写C代码来实现流水灯效果。
#define GPIOB_BASE 0x40010C00
#define GPIOC_BASE 0x40011000
#define GPIOA_BASE 0x40010800
#define RCC_APB2ENR (*(unsigned int *)0x40021018)
#define GPIOB_CRL (*(unsigned int *)0x40010C00