[应用相关] 大家好,请教一个stm32的FSMC中的指针问题

[复制链接]
512|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】取决于外部存储器的数据宽度。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1650

主题

5706

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部