FSMC控制LCD时,LCD_BASE地址的确定

//LCD地址结构体
typedef struct
{
        vu16 LCD_REG;
        vu16 LCD_RAM;
} LCD_TypeDef;
//注意设置时STM32内部会右移一位对齐! 			    
#define LCD_BASE        ((u32)(0x60000000 | 0x0001FFFE))
#define LCD             ((LCD_TypeDef *) LCD_BASE)

LCD_BASE,须根据外部电路的连接来确定,如Bank1.sector1就是从地址0X60000000开始,而0x0001FFFE,二进制为1 1111 1111 1111 1110,右移对齐一位后对应到地址引脚A16:A0=0 1111 1111 1111 1111。此时A16为0,但是如果16位地址再加1,那么此时A16为1,即实现了对RS的0和1的控制。

我们将这个地址强制转换为LCD_TypeDef结构体地址,那么可以得到LCD->LCD_REG的地址就是0X6001FFFE,对应A16的状态为0(即RS=0),而LCD->LCD_RAM的地址就是0X60020000(结构体地址自增),对应A16的状态为1(即RS=1),从而实现对RS的控制。

你可能感兴趣的:(FSMC控制LCD时,LCD_BASE地址的确定)