利用STM32的FSMC控制2.8寸TFTLCD问题。

一、LCD地址结构体

typedef struct
{
u16 LCD_REG;
u16 LCD_RAM;
} LCD_TypeDef;

//使用NOR/SRAM的 Bank1.sector4,地址位HADDR[27,26]=11 A6作为数据命令区分线 
//注意设置时STM32内部会右移一位对其! 111 1110=0X7E
    
#define LCD_BASE        ((u32)(0x6C000000 | 0x0000007E))   
#define LCD             ((LCD_TypeDef *) LCD_BASE)

1、LCD为指针强制类型转换,指向NE4(Bank1第四区)A6。

2、为什么会右移一位?

 因为Bank1 接的是16 位宽度存储器的时候:HADDR[25:1]-->FSMC[24:0]
       
Bank1 接的是 8位宽度存储器的时候: HADDR[25:0]-->FSMC[25:0]

 不论外部接8 /16位宽设备, FSMC_A[0]永远接在外部设备地址A[0]这里, TFTLCD使用的是16 位数据宽度,所以HADDR[0]并没有用到,只有HADDR[25:1]是有效的,对应关系变为:HADDR[25:1]--> FSMC[24:0],相当于右移了一位。另外,HADDR[27:26]的设置,是不需要我们干预的,初始化的时候可以选择区。

3、为什么是7E?
 7E转换成二进制就是: 1111110,而16 位数据时,地址右移一位对齐,那么实际对应到地址引脚的时候,就是:A6:A0=0111111,此时A6 0,但是如16 位地址再加1(注意:对应到 8位地址是加 2,即7E+0X02),那么: A6:A0=1000000,此时 A6 就是 1了,即实现了对 RS 0 1 的控制。 还有一个简单的方法就是,当选A6时将第七位和最后一位置0,为01111110=0X7E 位地址是加 2为1000000,就可以实现A6对RS的控制了,例如我操作NE1、A10那么地址就为(u32)(0x60000000 | 0x000007FE),其中7FE=011111111110。

注:1、HADDR是需要转换到外部存储器的内部AHB地址线。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值