战舰版里的TFT使用FSMC来显示数据,使用FSMC_A10控制RS端,
//使用NOR/SRAM的 Bank1.sector4,地址位HADDR[27,26]=11 A1作为数据命令区分线
//注意设置时STM32内部会右移一位对其! 111110=0X3E
#define LCD_BASE ((u32)(0x6C000000 | 0x000007FE))
#define LCD ((LCD_TypeDef *) LCD_BASE)
这个使用A10的地址偏移是0x000007FE,这个是怎么算的?
加入我使用A0呢,偏移又是多少
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
能再解释下“当你把FSMC设置为16位数据宽度的话,那么FSMC就按照16位数据模式传送,也就是每个地址放2个字节数据,也就是u16”这句话吗?谢谢
---------------------------------
就是,你往物理地址1里面写数据,实际上是写了2字节的数据,如果你弄数组的话,那么相对于数组地址0,就是u16的0-7位,相对于数组地址1,就是u16的8-15位的数据,这个是相对的,如果你定义u32数据类型,往u16写,在程序上把u32用u16指针来弄的话,那么硬件上会自动发送两个时钟
---------------------------------
如果像您那样说,一个u16数据占两字节,相当于只占用了一个地址啊。是吗?
---------------------------------
是一个物理地址,如果你FSMC设置为16位的话,那么FSMC_A0至FSMC_A24都为0的时候,可以发送两个字节的数据,FSMC_A0为1的时候,就是另外两个字节的数据了,所以可以把LCD的RS连接在FSMC_A0上,如果你选择bank1的话,可以通过往地址0x68000000上写一个16位数据作为LCD的指令,往地址0x68000001上写一个16位数据为LCD的后续指令。
FSMC驱动I80协议的并口是很好用的,就是速度稍慢。
一周热门 更多>