day2 开发环境平台搭建

Corter - M0存储器映射

 SOC中CPU访问各个外部部件是通过每个部件的编号(地址)访问的;

CPU给各个部件分配地址的过程称之为映射;

Corter - M0 为32位,所以其给部件分配的地址范围为0 - 4Gb(2^32);

4GB的空间会有相应分段,相应部件在对应分段内

 

STM32存储器映射

如何访问寄存器

以GPIOA寄存器组为例,如何读取ODR寄存器?

已知GPIOA的起始地址为0x48000000,个寄存器的偏移地址为:

寄存器                    地址偏移量

MODER;             /*Address offset: 0x00 */

OTYPER;           /*Address offset: 0x04 */

OSPEEDR;        /*Address offset: 0x08 */

PUPDR;            /*Address offset: 0x0C */

IDR;                  /*Address offset: 0x10 */

ODR;               /*Address offset: 0x14 */

BSRR;              /*Address offset: 0x18 */

LCKR;             /*Address offset: 0x1C *

寄存器访问方式1:

对地址进行宏定义;

#define GPIOA_BASE ((unsigned int) 0x48000000)
#define GPIOA_ODR (GPIOA_BASE + 0x14

//读操作
val = *(unsigend int*)GPIOA_ODR;

//写操作
*(unsigend int*)GPIOA_ODR = val;

/*改进**/
#define GPIOA_ODR (*(unsigned int *)(GPIOA_BASE + 0x14))

val = GPIOA_ODR;
GPIOS_ODR = VAL;

 访问寄存器方式2

用结构体封装寄存器;

typedef struct {
uint32_t		MODER;      /*Address offset: 0x00 */
uint32_t		OTYPER; 	/*Address offset: 0x04 */
uint32_t		OSPEEDR; 	/*Address offset: 0x08 */
uint32_t		PUPDR;	 	/*Address offset: 0x0C */
uint32_t		IDR; 		/*Address offset: 0x10 */
uint32_t		ODR; 		/*Address offset: 0x14 */
uint32_t		BSRR; 		/*Address offset: 0x18 */
uint32_t		LCKR; 		/*Address offset: 0x1C */
} GPIO_TypeDef;

#define GPIOA_BASE ( (unsigned int ) 0x48000000 )
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)

注:我们访问GPIOA的控制寄存器组时、直接使用宏定义好 GPIO_TypeDef 类型的指针,而且指针指向 GPIOA端口的首地址,这样我们直接用宏GPIOA访问改外设的任意一个寄存器

GPIOA->MODER     =  0x20 ; 

GPIOA->OSPEEDR  =  0x16 ;

STM32启动文件分析

 注:Cortex-M0 的程序映像通常是从地址 0x00000000 开始的、系统复位后,处理器首先读取向量表中的前两个字(8 个字节),第一个字存入 MSP,第二个字为复位向量,它表示程序执行的起始地址(复位处理)

 STM32F0启动模式

启动模式选择
BOOT1BOOT0启动模式说明
x0主闪存存储器主闪存存储器选为启动区域
11系统存储器

系统存储器选为启动区域

01内置SRAM内置SRAM选为启动区域

根据启动模式的不同,用户闪存、系统闪存和SRAM都可以映射到0x0的低端地址;
 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值