打印
[STM32F1]

不直接使用首地址

[复制链接]
242|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huanghuac|  楼主 | 2022-3-4 23:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
定义IO口管脚内存地址常量时 ,为什么不直接使用其首地址呢?

使用特权

评论回复
沙发
zhenykun| | 2022-3-4 23:57 | 只看该作者
怎么写的

使用特权

评论回复
板凳
huanghuac|  楼主 | 2022-3-5 11:42 | 只看该作者

这样写,
#define PERIPH_BASE           ((uint32_t)0x40000000)
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
#define GPIOA_BASE            (APB2PERIPH_BASE + 0x0800)
#define GPIOA               ((GPIO_TypeDef *) GPIOB_BASE)
#define GPIOA_IDR_Addr    (GPIOA_BASE+8) //0x40010808

使用特权

评论回复
地板
llljh| | 2022-3-5 11:46 | 只看该作者

你觉得怎么写

使用特权

评论回复
5
huanghuac|  楼主 | 2022-3-5 11:48 | 只看该作者

下边这样写不好吗?
#define GPIOA               ((GPIO_TypeDef *) 0x40010800)
#define GPIOA_IDR_Addr         0x40010808

使用特权

评论回复
6
jlyuan| | 2022-3-5 11:49 | 只看该作者
这更能体现外设在地址空间的分布情况,一般同一个外设寄存器都放在一起

使用特权

评论回复
7
llljh| | 2022-3-5 11:51 | 只看该作者
一串数字豪无毫无意义,地址加偏移量方便块复制。

使用特权

评论回复
8
supernan| | 2022-3-5 11:53 | 只看该作者
比如再新增一组GPIO。

使用特权

评论回复
9
huangchui| | 2022-3-5 11:55 | 只看该作者

这样写的话自己一看就清楚什么规律。

使用特权

评论回复
10
jlyuan| | 2022-3-5 11:56 | 只看该作者

对编译器没什么影响,因为预处理器会先转换成数值结果。

使用特权

评论回复
11
huanghuac|  楼主 | 2022-3-5 11:58 | 只看该作者
多谢指点

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

772

主题

8473

帖子

6

粉丝