战舰版里的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呢,偏移又是多少
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
你好,我现在想用A16,偏移地址该如何设置?
---------------------------------
很简单,就是A0就是0,你得把0这个数左移一位当作FSMC地址,所以也就0了,A1是1,左移一位就是2,减去1作为地址,二进制是1,也就是0x00000001.
A10二进制是10000000000,也就是0x400,减去1,也就是01111111111,也就是0x3FF,然后STM32是右移一位操作的,所以写程序的时候,你得把地址预先左移一位,0x3FF左移以为也就是二进制011111111110,也就是0x7FE,同理A16就是1FFFE了
谢谢,我也是这么想的。还有个问题想问你。例程中LCD屏的的CS接FSMC_NE4,RS接FSMC_A10,对应开发板上也就是PG12,和PG0。现在我想把程序改为CS接FSMC_NE1,RS接FSMC_A16,对应开发板上PD7,和PD11。程序部分我把
lcd.h中的#define LCD_BASE ((u32)(0x6C000000 | 0x000007FE))改为:
#define LCD_BASE ((u32)(0x60000000 | 0x0001FFFE))
把lcd.c中的FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;// 这里我们使用NE4 ,也就对应BTCR[6],[7]
改为:FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
把 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE); // 使能BANK1
改为 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE); // 使能BANK1
我想问一下,这样改有错吗?但为啥屏幕只是白屏,什么都不显示,还是还有其他地方需要改动?
---------------------------------
谢谢原子,还有个问题想问你。例程中LCD屏的的CS接FSMC_NE4,RS接FSMC_A10,对应开发板上也就是PG12,和PG0。现在我想把程序改为CS接FSMC_NE1,RS接FSMC_A16,对应开发板上PD7,和PD11。程序部分我把
lcd.h中的#define LCD_BASE ((u32)(0x6C000000 | 0x000007FE))改为:
#define LCD_BASE ((u32)(0x60000000 | 0x0001FFFE))
把lcd.c中的FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;// 这里我们使用NE4 ,也就对应BTCR[6],[7]
改为:FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
把 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE); // 使能BANK1
改为 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE); // 使能BANK1
我想问一下,这样改有错吗?但为啥屏幕只是白屏,什么都不显示,还是还有其他地方需要改动?很着急
---------------------------------
地址没错,后续的库函数就不知道了,我用寄存器的.
一周热门 更多>