笔记:STM32中寄存器地址与指针的转换

本文详细介绍了STM32F429微控制器的存储器映射,包括片上外设基地址、AHB1总线基地址及GPIOB基地址的定义。同时,阐述了如何通过宏定义将寄存器地址转换为指针,实现对GPIOB寄存器的访问。此外,强调了在封装寄存器时使用volatile关键字的重要性,以确保数据访问的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.STM32中的存储器映射地址(查STM32F429数据手册)

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

 /*AHB1总线基地址*/
#define AHB1PERIPH_BASE         (PERIPH_BASE + 0x00020000)

 /*GPIOB基地址*/
#define GPIOB_BASE              (AHB1PERIPH_BASE + 0x0400)

2.将寄存器地址转换成指针

#define GPIOB_MODER            *(unsigned int*)(GPIOB_BASE+0x00)

#define GPIOB_OTYPER           *(unsigned int*)(GPIOB_BASE+0x04)
    (unsigned int*)(GPIOB_BASE+0x00)    把地址强制转换成指针类型
    *(unsigned int*)(GPIOB_BASE+0x00)   把地址强制转换成指针类型并指向该地址
    
     “*”作用是解引用,引用指针指向的变量值,引用其实就是引用该变量的地址。

3.封装寄存器时,需要用volatile修饰

 #define __IO    volatile

关键字“ volatile”在 C 语言中该关键字用于表示变量是易变的,要求编译器不要优化,每次使用这些变量的时候,都要求 CPU 去该变量的地址重新访问。若没有这个关键字修饰,在某些情况下,编译器认为没有代码修改该变量,就直接从CPU 的某个缓存获取该变量值,但该缓存中的是陈旧数据,导致数据访问有出入。

解引用:百度百科

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~狂想家~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值