寄存器映射

文章目录

      • STM32芯片
        • 构成
        • 引脚方向
      • 芯片的寄存器映射
        • 寄存器映射
        • 寄存器封装
      • 芯片的存储器映射

STM32芯片

构成

stm32由内核,Flash,SRAM,外设构成

外设包含:GPIO,USART,SPI,I2C,ADC,DAC等等

引脚方向
  • 划黄线的丝印下面那个小圆圈对应的引脚就是1号引脚,逆时针依次递增
寄存器映射_第1张图片 寄存器映射_第2张图片
  • 如果没有小圆圈,那么丝印正对着自己,左上角第一个引脚就是1号引脚,逆时针依次递增

芯片的寄存器映射

寄存器映射
给有特定功能的内存单元取一个别名,这个别名就是我们经常说的寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射
/*寄存器映射:*/
/* 对芯片某一个内存单元取一个别名 */

//让FP口输出高电平//
#define GPIOF_ODR *(unsigned int *)0x4002 1414
GPIOF_ODR = 0xFFFF

在C语言中,unsigned 是一种数据类型修饰符,用于声明无符号整数。而 0xFF0xFFFF 是十六进制数,表示特定的数值。

  • 0xFF 表示十六进制数,它的二进制表示是 11111111,对应的十进制是 255。在C语言中,通常用来表示字节(8位)中的所有位都被置为1的情况。
  • 0xFFFF 也是十六进制数,它的二进制表示是 1111111111111111,对应的十进制是 65535。在C语言中,通常用来表示两个字节(16位)中的所有位都被置为1的情况。

其中,代码是寄存器对应地址+偏移地址(定义寄存器的状态)

寄存器映射_第3张图片 寄存器映射_第4张图片

寄存器映射表详见STM32F4xx中文参考手册

寄存器封装
/*寄存器封装*/
typedef unsigned int uint32;
typedef struct{
	uint32 MODER;    	//端口模式寄存器			偏移地址:0x00
	uint32 OTYPER;		//端口输出类型寄存器 		偏移地址:0x04
	uint32 OSPEEDR;		//输出速度寄存器 		偏移地址:0x08
	uint32 PUPDR;		//上拉/下拉寄存器		偏移地址:0x0C
	uint32 IDR;			//输入数据寄存器			偏移地址:0x10
	uint32 ODR;			//输出数据寄存器			偏移地址:0x14
	uint32 BSRR;		//置位/复位寄存器		偏移地址:0x18
	uint32 LCKR;		//配置锁定寄存器 		偏移地址:0x1C
    uint32 AFRH;		//复用功能低位寄存器		偏移地址:0x20
    uint32 AFRL;		//复用功能高位寄存器 		偏移地址:0x24
}GPIO_TYPE;

寄存器映射_第5张图片

#define GPIOA_BASE (0x40020000)
#define GPIOB_BASE (0x40020400)
#define GPIOC_BASE (0x40020800)
#define GPIOD_BASE (0x40020C00)

#define GPIOA   (GPIO_TYPE *)GPIOA_BASE;
#define GPIOB   (GPIO_TYPE *)GPIOB_BASE;
#define GPIOC   (GPIO_TYPE *)GPIOC_BASE;
#define GPIOD   (GPIO_TYPE *)GPIOD_BASE;
寄存器映射_第6张图片

可以完成问题:

	GPIOF->ODR = 0xFFFF;

芯片的存储器映射

给存储器分配地址的过程叫存储器映射,再分配一个地址叫重映射

你可能感兴趣的:(STM32:入门,单片机,嵌入式硬件)