STM32点亮LED灯(寄存器版)

前言

使用寄存器点亮LED,本文介绍如何查找寄存器的方法,参考手册,找到相应寄存器的地址,点亮LED。

查看原理图

在这里插入图片描述
点亮R(red)红色灯,将PB5引脚拉低即可。

初始化时钟

先要找到PB5挂在到哪个时钟下,STM32系统架构图:
在这里插入图片描述
PB5就是GPIOB5,从系统架构图中可以看到GPIOB挂在APB2总线上,所以先开APB2时钟。APB2地址是多少呢?

在这里插入图片描述在这里插入图片描述

可以看出,APB2寄存器的偏移地址为0x18,Bit3位设置的是PB,0是disable,1是enable; 那么寄存器的基地址是多少呢?
在这里插入图片描述
继续查找手册APB2属于RCC,所以需要查找到寄存器映射3.3章如下:
在这里插入图片描述
从寄存器表格中可以看到,寄存器RCC的基地址为0x4002 1000。
所以寄存器的APB2的地址为:0x40021000 + 0x18=0x40021018

GPIOx模式设置

在这里插入图片描述
GPIOB寄存器地址偏移地址为0x00,基地址从手册3.3章查找到
0x4001 0C00 - 0x4001 0FFF GPIO Port B
0x4001 0C00 + 0x00(偏移) = 0x4001 0C00
GPIOB_CRL寄存器地址为:0x4001 0C00

从表格中看到,GPIOx_CRL的寄存器(x=A…G),CNFy,MODEy (y=1…7) 每4个位控制一组GPIOy引脚。因为每组GPIOx有16个引脚。16*4=64,所以控制寄存器需要64位。但是一个寄存器是32位,所以需要两个寄存器。故分为CRL 控制1-7引脚,CRH控制8-16引脚。因为PB5是第5个所以选择CRL寄存器。

MODEy设置输入输出模式,GPIO速率
CNFy在输入模式下的配置和输出模式下的配置
在这里我们把 PB0 配置为通用推挽输出,输出的速度为 10M

GPIOx引脚电平控制

在这里插入图片描述
寄存器偏移地址 0x0C。,基地址从手册3.3章查找到
0x4001 0C00 - 0x4001 0FFF GPIO Port B
0x4001 0C00 + 0x0C(偏移) = 0x4001 0C0C
GPIOB_ODR寄存器地址为:0x4001 0C0C

低16位有效,将对应的引脚设置0(拉低),或者1(拉高)
PB5引脚需要将bit5设置成0,即可点亮LED

程序源码

#include "stm32f10x.h"
int main (void)
{
    
    
	// APB2时钟设置
	*( unsigned int * )0x40021018 |=  ( (1) << 3 );	
	//设置PB5输出模式,推挽输出
	*( unsigned int * )0x40010C00 |=  ( (1) << (4*5) );//blue
	// 控制引脚电平
	*( unsigned int * )0x40010C0C &= ~(1<<1);
}

注:地址不能直接赋值,需要转化为指针形式

猜你喜欢

转载自blog.csdn.net/WANGYONGZIXUE/article/details/115042428