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里面了吗? 恳请求教,十分感谢!
|