STM32 寄存器配置点灯案例(带着手把手扒数据手册)

STM32通过寄存器点灯需要以下几个步骤

芯片为STM32F103ZE

keil安装可以看这篇

STM32开发环境搭建安装keil_5MDK(巨量图片手把手教学附带安装包及芯片支持包)-CSDN博客

物料清单:

  •  尚硅谷STM32开发板 (可根据自身情况选择)
  •  stlink 数据线

软件清单:

  • keil mdk
  • wps(可选)

1. 首先查看板子的原理图(这里我是用的是 尚硅谷STM32开发板)

 通过查看原理图发现led灯分别连接着 PA0,PA1 PA8 三个引脚

2. 正所谓,手册离了开发板,神仙来了也茫然  所以们要打开我们数据手册

我这里使用的是中文手册和英文手册对照进行查阅(如果需要的人多我就去买个服务器发给大家

2.1 点灯-配置寄存器
2.1.1首先我们先打开引脚的时钟

查看手册

发现时钟的地址为  0x4002 1000 

然后我们找到控制时钟的寄存器

由此可以看出  要打开GPIOA的时钟需要令这个值为1 即 令他等于4(二进制为:0100)

STM32的keil工程创建可以参考这篇文章 STM32开发环境搭建安装keil_5MDK(巨量图片手把手教学附带安装包及芯片支持包)-CSDN博客

所以我们得到以下代码   后面的0X18为上图偏移地址(可以理解为数组的下标偏移量)

#include <stdint.h>
int main(void){
	//1. 打开RCC中的GPIOA的时钟  让RCC_APB2ENR = 4
	*(uint32_t *)(0x40021000 + 0x18) = 4;
}
2.2点灯-配置输出模式

我们继续开扒数据手册 继续回到储存器映像那张图找到GPIO端口A

由此可已得到其实地址值为  0x4001 0800

接着我们找到端口配置低寄存器

 我们配置为浮空输出 并且开启位服用开漏输出

所以需要配置为 3 (二进制位 0111)

由此可得下一段代码为

#include <stdint.h>
int main(void){
	//1. 打开RCC中的GPIOA的时钟  让RCC_APB2ENR = 4
	*(uint32_t *)(0x40021000 + 0x18) = 4;
	
	
	//2. 配置为推挽输出
	*(uint32_t *)(0x40010800) = 3;
	
}
2.3 点灯-配置GPIOA具体的值

接着我们找到端口通用输出数据寄存器

 由于我们配置的是推挽输出 所以我们如果想要点亮就需要令A0置0 

所以需要配置为 十六进制 0xfffe  又因为偏移量为0x0c所以可得以下代码

#include <stdint.h>
int main(void){
	//1. 打开RCC中的GPIOA的时钟  让RCC_APB2ENR = 4
	*(uint32_t *)(0x40021000 + 0x18) = 4;
	
	
	//2. 配置为推挽输出
	*(uint32_t *)(0x40010800) = 3;
	
	
	//PA0置为0
	*(uint32_t *)(0x40010800+0x0c) = 0xfffe;
    //while的作用是保持这个状态
	while(1);

}

完成

接着我们开始烧录

 灯亮 任务完成!

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32 微控制器上,可以通过配置 GPIO 模式和使用寄存器来实现按键与点灯的交互。 首先,你需要确定要使用的 GPIO 引脚。然后,你可以按照以下步骤进行配置: 1. 启用相应的 GPIO 时钟:根据要使用的 GPIO 引脚,选择正确的 RCC_AHB1Periph_GPIOx 宏来启用相应的 GPIO 时钟。例如,如果要使用 GPIOA 引脚,可以使用 `RCC_AHB1Periph_GPIOA`。 2. 配置引脚为输入模式:使用 GPIOx_MODER 寄存器将引脚配置为输入模式。例如,如果要将 GPIOA 的引脚 0 配置为输入模式,可以将 `GPIOA->MODER |= (GPIO_Mode_IN << (0 * 2));`。 3. 配置引脚的上拉/下拉电阻:使用 GPIOx_PUPDR 寄存器配置引脚的上拉/下拉电阻。如果要使用上拉电阻,可以将 `GPIOA->PUPDR |= (GPIO_PuPd_UP << (0 * 2));`。 4. 配置 LED 引脚为输出模式:使用 GPIOx_MODER 寄存器将 LED 引脚配置为输出模式。例如,如果要将 GPIOB 的引脚 0 配置为输出模式,可以将 `GPIOB->MODER |= (GPIO_Mode_OUT << (0 * 2));`。 5. 读取按键状态并控制 LED :使用 GPIOx_IDR 寄存器读取按键状态。例如,如果要检测 GPIOA 的引脚 0 的状态,可以使用 `GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);`。然后,根据按键的状态,使用 GPIOx_BSRR 寄存器控制 LED 引脚的电平。例如,如果要点亮 GPIOB 的引脚 0,可以使用 `GPIOB->BSRR = GPIO_Pin_0;`。 请注意,以上步骤是基于寄存器级编程的方式。你还可以使用 STM32 提供的库函数进行配置和操作。 希望这能帮助到你!如有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值