【STM32入门】寄存器点亮LED

  最近在学习STM32,相比51单片机,STM32单片机的外设更加的复杂并且由于其寄存器是32位的,因此操作起来会比较麻烦,但是为了加深对STM32寄存器工作原理的理解,因此作为一个初学者,将使用GPIO外设点亮LED灯的过程进行记录

1.GPIO原理分析

  首先是GPIO原理的分析,GPIO(General-purpose input/output)通用输入输出端口,作为单片机上最常见的一种最常见的外设,其最基本的功能就是接收输入的数据及向外发送数据。通过配置相应的寄存器,可以点亮与相应引脚连接的LED灯。

2.寄存器映射

  与控制GPIO引脚输出高低电平的相关外设主要是GPIO与RCC,在这里以GPIOB中的PB0为例。GPIO在工作时相关的寄存器有GPIOB_CRL(端口控制寄存器)GPIOB_ODR(端口数据输出寄存器)在对这些寄存器进行配置之前需要使用宏来对寄存器的地址进行映射,相关的寄存器映射代码如下:

//相关的寄存器映射

/*外设的基地址*/
#define PERIPH_BASE 			((unsigned int)0x40000000)

/*总线基地址*/
#define APB1PERIPH_BASE    PERIPH_BASE              //APB1
#define APB2PERIPH_BASE   (PERIPH_BASE + 0x10000)   //APB2
#define AHBPERIPH_BASE    (PERIPH_BASE + 0x20000)   //AHB

/*GPIOB外设基地址*/
#define GPIOB_BASE                    (APB2PERIPH_BASE + 0x0C00)

///*GPIOB相关寄存器*/
#define GPIOB_CRL                     *((unsigned int *)(GPIOB_BASE + 0x00))
#define GPIOB_CRH                     *((unsigned int *)(GPIOB_BASE + 0x04))
#define GPIOB_IDR                     *((unsigned int *)(GPIOB_BASE + 0x08))
#define GPIOB_ODR                     *((unsigned int *)(GPIOB_BASE + 0x0C))
#define GPIOB_BSRR                    *((unsigned int *)(GPIOB_BASE + 0x10))
#define GPIOB_BRR                     *((unsigned int *)(GPIOB_BASE + 0x14))
#define GPIOB_LOCKR                   *((unsigned int *)(GPIOB_BASE + 0x18))

/*RCC外设基地址*/
#define RCC_BASE                      (AHBPERIPH_BASE + 0x1000)					

///*RCC相关寄存器,定义为指针*/
#define	RCC_CR                        *((unsigned int *)(RCC_BASE + 0x00))
#define	RCC_CFGR                      *((unsigned int *)(RCC_BASE + 0x04))
#define	RCC_CIR                       *((unsigned int *)(RCC_BASE + 0x08))
#define	RCC_APB2RSTR                  *((unsigned int *)(RCC_BASE + 0x0C))
#define	RCC_APB1RSTR                  *((unsigned int *)(RCC_BASE + 0x10))
#define	RCC_AHBENR                    *((unsigned int *)(RCC_BASE + 0x14))
#define	RCC_APB2ENR                   *((unsigned int *)(RCC_BASE + 0x18))
#define	RCC_APB1ENR                   *((unsigned int *)(RCC_BASE + 0x1C))
#define	RCC_BDCR                      *((unsigned int *)(RCC_BASE + 0x20))
#define	RCC_CSR                       *((unsigned int *)(RCC_BASE + 0x24))	

 

你可能感兴趣的:(【STM32入门】)