打印
[应用相关]

大家好,请教一个stm32的FSMC中的指针问题

[复制链接]
357|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jcky001|  楼主 | 2022-9-2 16:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.
本人在正在学习野火stm32教程,学到了FSMC驱动LCD屏幕这一章,大致就是通过FSMC的地址映射,采用指针来访问stm32内部SRAM的方式来访问液晶驱动芯片ILI9341的FLASH内的16位数据,问题代码在于这里:
#define ILI9341_CMD_ADDR (__IO uint16_t*)(0x60000000)
#define ILI9341_DATA_ADDR (__IO uint16_t*)(0x60020000)
我们将stm32内部SRAM的地址强制类型转换成指针,再用指针来访问后面的地址,我想请问一下大家:stm32的地址总线是32位的,这里将一个32位的地址转换成了16位的指针,为什么是这样的,难道不应该是
#define ILI9341_DATA_ADDR (__IO uint32_t*)(0x60020000)
这样子转换吗?
2
之前学习FMSC访问SRAM时同样出现类似疑问,外部SRAM支持8位,16位的访问,于是就有了类似以下的代码
#define DATA_ADDR (__IO uint8_t*)(0x60000000)
#define DATA_ADDR (__IO uint16_t*)(0x60000000)
将内部地址强制转换成了8位和16位的指针,这又是为什么?这个指针指向的不是内部SRAM的地址吗?如果是,这样子转换不会导致数据丢失吗,如果不是,这个指针又是指向哪里?难道是直接映射到外部SRAM里面了吗?
恳请求教,十分感谢!

使用特权

评论回复
沙发
koala889| | 2022-9-2 20:27 | 只看该作者
指针就是不容易理解,要慢慢看

使用特权

评论回复
板凳
香水城| | 2022-9-4 09:01 | 只看该作者
这里的指向的地址是外部存储器的地址,所指地址存放的数据宽度【8/16/32】取决于外部存储器的数据宽度。

使用特权

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

本版积分规则

1501

主题

4494

帖子

6

粉丝