天天看點

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的控制。

繼續閱讀