目录
一、寄存器方式点亮LED流水灯
STM32点亮LED的操作过程是:CPU给指令->GPIO收到指令->配置内部寄存器->配置IO口模式->控制LED亮灭
STM32开发板中包含较多寄存器,实现流水灯操作需要对相应的引脚进行如下操作:
- 时钟配置
- 输入输出模式设置
- 最大速率设置
- 编写程序
- 烧录运行
在STM32F103C8T6上通过初始化GPIO点亮LED,通过将其初始化控制片外引脚即I/O口拉高降低输出高低电平,以控制LED灯的亮灭即可。
1.时钟配置
查阅手册:
- 时钟使能寄存器映射基地址:

- 端口偏移地址以及对应端口所在位置

可以看到外设时钟使能寄存器偏移量为0x18,起始地址为0x4002 1000,因此该寄存器的地址为0x4002 1018
//APB2时钟使能寄存器
#define RCC_APB2ENR *((unsigned volatile int*)0x40021018);
手册中提到,RCC_APB2ENR(APB2外设时钟使能寄存器)的位3是IOPBEN,即IO端口B时钟使能,将该端口置1就是开启GPIO时钟.
RCC->APB2ENR|=1<<2; //APB2-GPIOA外设时钟使能
RCC->APB2ENR|=1<<3; //APB2-GPIOB外设时钟使能
RCC->APB2ENR|=1<<4; //APB2-GPIOC外设时钟使能
2.输入输出模式设置、最大速率设置
本次实验采用通用推挽输出模式,最高输出时钟频率2Mhz。分别用到GPIOA-5、GPIOB-9、GPIOC-14 三个引脚。其中A4属于端口配置低寄存器偏移地址为0x00,B9、C14属于端口配置高寄存器偏移地址为0x04。


- GPIO端口基地址

- 配置对应引脚寄存器,寄存器地址=基地址+偏移量
//GPIOA配置寄存器
#define GPIOA_CRL *((unsigned volatile int*)0x40010800)
//GPIOB配置寄存器
#define GPIOB_CRH *((unsigned volatile int*)0x40010C04)
//GPIOC配置寄存器
#define GPIOC_CRH *((unsigned volatile int*)0x40011004)
- 设置推挽模式输出,输出速度位2MHz
-
将GPIOA-5配置成推挽模式输出,且最大速度为2MHz,根据数据手册可以知道它属于端口配置低寄存器模块,CNF5和MODE5位为0,其余位为F,即GPIOB_CRH&=0xFF0FFFfF;又因为其为推挽模式输出,其最大速度为2MHz,所以4位寄存器的配置就是CNF5【00】MODE5【10】,【0010】换算为十进制为【2】,因此GPIOB_CRH|=0x00200000。
-
将GPIOB-9配置成推挽模式输出,且最大速度为2MHz,根据数据手册可以知道它属于端口配置高寄存器模块,CNF9和MODE9位为0,其余位为F,即GPIOB_CRH&=0xFFFFFF0F;又因为其为推挽模式输出,其最大速度为2MHz,所以4位寄存器的配置就是CNF9【00】MODE9【10】,【0010

本文详细描述了如何在STM32开发板上通过寄存器方式和标准外设库控制GPIO实现LED流水灯的点亮,包括时钟配置、输入输出模式设置、编程烧录及遇到的问题解决。
最低0.47元/天 解锁文章
8191

被折叠的 条评论
为什么被折叠?



