打印

STM32的FSMC地址为什么与预期的一不样

[复制链接]
3055|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tomhe666|  楼主 | 2011-5-14 09:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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))
沙发
tomhe666|  楼主 | 2011-5-15 12:17 | 只看该作者
没有答案??

使用特权

评论回复
板凳
winloop| | 2011-5-15 12:33 | 只看该作者
数据宽度设置成8位的就跟实际地址一样了

使用特权

评论回复
地板
tomhe666|  楼主 | 2011-5-15 15:22 | 只看该作者
有这个说法?? LCD是16位的,总不能改成8位吧

使用特权

评论回复
5
winloop| | 2011-5-15 15:53 | 只看该作者
那你只能用16位方式了,实际地址是要左移一位的,这块儿我也碰到不少问题,其实模拟16位总线操作LCD速度也非常快的

使用特权

评论回复
6
tomhe666|  楼主 | 2011-5-15 20:34 | 只看该作者
那你只能用16位方式了,实际地址是要左移一位的,这块儿我也碰到不少问题,其实模拟16位总线操作LCD速度也非常快的
winloop 发表于 2011-5-15 15:53



LCD我已经弄的能显示了,只是不明白为什么地址要左移一位??

使用特权

评论回复
7
IJK| | 2011-5-16 09:52 | 只看该作者
“地址要左移一位” 这是正常现象。reference manual有1张表谈到这个问题,16位方式时,内部的A0应该不输出,内部的A1应该输出到引脚的A0,以此类推。
16位方式时,如果内部的A0还输出到引脚的A0,那就不是16位方式了。

使用特权

评论回复
8
香水城| | 2011-5-16 10:00 | 只看该作者
16位模式下,内部的地址A0时钟为"0“,没有必要输出一个无用的信号,这样可以多出一个I/O口。

使用特权

评论回复
9
tomhe666|  楼主 | 2011-5-16 13:20 | 只看该作者
“地址要左移一位” 这是正常现象。reference manual有1张表谈到这个问题,16位方式时,内部的A0应该不输出,内部的A1应该输出到引脚的A0,以此类推。
16位方式时,如果内部的A0还输出到引脚的A0,那就不是16位方式 ...
IJK 发表于 2011-5-16 09:52


有点懂了,是不是这样, 16位模式下, 两个字节作为一组16bit的数据输出,所以最低位的A0总是不变的,所以A0引不引出来无所谓了.
但至于左移一位省不省IO却很难说了, 因为地址如果从A0排起, 也可以省下一根高位的地址线的吧

使用特权

评论回复
10
yinyangdianzi| | 2011-5-18 09:27 | 只看该作者
动态的
it's keeping moving

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

108

帖子

0

粉丝