STM32简单的寄存器点灯

通过原理图找到内置LED接线(stm32f103)

我用的是指南者的板子,自带一个RGB灯,里面由红蓝绿三个LED小灯构成,这里我选择点亮其中的绿灯。通过原理图可以找到绿灯对应的GPIO引脚是PB0
在这里插入图片描述

寄存器的相关配置

因为LED接的是PB0,所以选择GPIO端口B,查看中文手册获取GPIOB寄存器起始地址0x4001 0C00
在这里插入图片描述
把连接到 LED 灯的 GPIO 引脚 PB0 配置成输出模式,即配置 GPIO 的端口配置低寄存器 CRL。CRL 中包含 0-7 号引脚,每个引脚占用 4 个寄存器位。MODE 位用来配置输出的速度,CNF 位用来配置各种输入输出模式。在这里我们把 PB0 配置为通用推挽输出,输出的速度为 10M。
在这里插入图片描述
在输出模式时,这里通过控制 ODR 寄存器的输出来控制 GPIO的电平(虽然对端口位设置/清除寄存器 BSRR 寄存器和端口位清除寄存器 BRR 写入参数也能达到相同效果,即操作 BSRR 和 BRR 最终影响的都是 ODR 寄存器,但为了方便就直接选择控制ODR 寄存器)
在这里插入图片描述
STM32 的所有外设的时钟由一个专门的外设RCC来管理,所有的 GPIO 都挂载到 APB2 总线上,具体的时钟由 APB2 外设时钟使能寄存器(RCC_ APB2ENR)来控制。复位和时钟控制(RCC)的起始地址后面也会使用到。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过查找得知控制端口B的时钟位是3,要开启时钟就得使这个位为1
在这里插入图片描述

代码实现

#include "stm32f10x.h"
int main(void)
{
	//打开GPIOB端口的时钟
	*(unsigned int *)0x40021018 |=(1<<3);
	//设置GPIOB0的输出模式为推挽输出
	*(unsigned int *)0x40010C00 |=(1<<(4*0));
	//控制ODR寄存器,PB0输出低电平
	*(unsigned int *)0x40010C0C &=~(1<<0);
	
}

效果展示

在这里插入图片描述


版权声明:本文为MessiYouJung原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。