本帖最后由 tomhe666 于 2011-5-14 11:52 编辑
我用FSMC驱动彩屏液晶, 用了STM32的FWLIB 3.5库, 连接LCD用了FSMC的D0-D15, A16,A17, WR,RD等信号, A16接LCD的CS信号, A17接LCD的CD(cmd/data, CMD=0,DATA=1)信号, FSMC选用SRAM_BANK1, 于是得到了LCD的命令地址为(SRAM3_BANK1_ADDR + 0x00000), 数据地址为(SRAM3_BANK1_ADDR + 0x20000),但按这个地址始终点不亮液晶. 于是单步时拿示波器看,CD的信号出现在CS引脚上, CD脚本身却一直是低的, 看来看去,像是地址错了一位,于是把数据地址改成(SRAM3_BANK1_ADDR + 0x40000)试了下, 屏竟然点亮了. 以为地址算错, 再仔细算算0x20000应该是对的啊, A16接的CS,不论何时都是低的,A1所以A16总是为零的, A17是第三个字节的bit1, 这个地址确切的应该是(SRAM3_BANK1_ADDR + 0x20000)才对,实在搞不表怎么回事.有明白的请指点下. LCD访问代码见下
#define SRAM_BASEADDR (UINT32)(0x68000000) //Bank1_NORSRAM3 = 0x68000000
#define LCD_CMD_ADDR ((SRAM_BASEADDR)+0x00000)
#define LCD_DATA_ADDR ((SRAM_BASEADDR)+0x40000) //地址左移了一位,原因不明
#define LCD_WRITE_CMD(CMD) (*((volatile UINT16*)LCD_CMD_ADDR))=CMD
#define LCD_WRITE_DATA(DATA) (*((volatile UINT16*)LCD_DATA_ADDR))=DATA
#define LCD_READ_DATA(ADDR) (*((volatile UINT16*)ADDR)) |