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);

}

完成

接着我们开始烧录

 灯亮 任务完成!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值