(3)SRAM/NOR 閃存寫時序寄存器:FSMC_BWTRx(x=1~4)
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
- | ACCMOD | DATLAT | CLKDIV | BUSTURN | |||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
DATAST | ADDHLD | ADDSET |
Bit 29~Bit 28:訪問模式(這2位只在FSMC_BCRx寄存器的EXTMOD位為1時起作用)
00:訪問模式A
01:訪問模式B
10:訪問模式C
11:訪問模式D
Bit 27~Bit 24:數據保持時間
0000:第一個數據的保持時間為2個CLK時鐘周期
……
1111:第一個數據的保持時間為17個CLK時鐘周期(默認)
Bit 23~Bit 20:時鐘分頻比
0000:保留
0001:1個CLK周期=2個HCLK周期
0010:1個CLK周期=3個HCLK周期
……
1111:1個CLK周期=16個HCLK周期(默認)
Bit 19~Bit 16:總線恢復時間
0000:總線恢復時間=1個HCLK時鐘周期
……
1111:總線恢復時間=16個HCLK時鐘周期(默認)
Bit 15~Bit 8:數據保持時間
00000000:保留
00000001:DATAST保持時間=2個HCLK時鐘周期
00000010:DATAST保持時間=3個HCLK時鐘周期
……
11111111:DATAST保持時間=256個HCLK時鐘周期(默認)
Bit 7~Bit 4:地址保持時間
0000:ADDHLD保持時間=1個HCLK時鐘周期
……
1111:ADDHLD保持時間=16個HCLK時鐘周期(默認)
Bit 3~Bit 0:地址建立時間
0000:ADDSET建立時間=1個HCLK時鐘周期
……
1111:ADDSET建立時間=16個HCLK時鐘周期(默認)
10.4 實驗例程
現有一塊驅動芯片為5510的LCD驅動芯片,廠家提供初始化例程,使用STM32的FSMC功能驅動屏幕顯示字符串,連接關系如下表所示。
片選CS:FSMC_NE4
寫控制WR:FSMC_NWE
讀控制RD:FSMC_NOE
數據命令控制RS:FSMC_A6
背光:PB0
16位并行數據:FSMC_D15~FSMC_D0
(1)創建lcd.h,并輸入以下代碼。
#ifndef _LCD_H_
#define _LCD_H_
#include "sys.h"
//LCD地址結構體
typedef struct
{
vu16 LCD_REG ;
vu16 LCD_RAM ;
}LCD_TypeDef ;
#define LCD_BASE ( ( u32 )( 0x6C000000|0x000007FE ))
#define LCD ( ( LCD_TypeDef* ) LCD_BASE )
//LCD重要參數集
typedef struct
{
u16 width ; //LCD寬度
u16 height ; //LCD高度
u8 dir ; //橫屏豎屏控制
u16 wramcmd ; //開始寫gram指令
u16 setxcmd ; //設置x坐標指令
u16 setycmd ; //設置y坐標指令
}_lcd_dev ;
extern _lcd_dev lcddev ; //管理LCD重要參數
//LCD的畫筆顏色和背景色
extern u16 POINT_COLOR ; //畫筆顏色
extern u16 BACK_COLOR ; //背景顏色
#define LCD_LED PBout(0) //LCD背光
//畫筆顏色
#define WHITE 0xFFFF
#define BLACK 0x0000
#define BLUE 0x001F
#define BRED 0XF81F
#define GRED 0XFFE0
#define GBLUE 0X07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define GREEN 0x07E0
#define CYAN 0x7FFF
#define YELLOW 0xFFE0
#define BROWN 0XBC40 //棕色
#define BRRED 0XFC07 //棕紅色
#define GRAY 0X8430 //灰色
void LCD_Init( void ) ; //初始化
void LCD_Clear( u16 Color ) ; //清屏
void LCD_Fast_DrawPoint( u16 x, u16 y, u16 color ) ; //快速畫點
void LCD_ShowString( u16 x, u16 y, u8 *p ) ; //顯示一個字符串
#endif
注1 :關于LCD_BASE地址的定義部分,其中0x6C000000代表FSMC的SRAM塊4的開始地址,0x000007FE則代表A10的偏移地址,7FE H換算成2進制就是01111111 1110,由于FSMC在16位數據總線狀態下,地址需要右移一個字節,所以映射到A10A0上的地址數據就是011 1111 1111,A0恰好就是0,如果此時16位地址加1,對應的8位地址就是加2,也就是7FE+2=800,映射到A10A0上的地址就是100 0000 0000,即A10變為了1,這就實現了通過A10來控制RS的效果。我們定義的結構體也可以發現,LCD_REG對應的就是0x6C000000+0x000007FE,而LCD_RAM對應的就變成了0x6C000000+0x000007FE+0x00000002。
注2 :結構體_lcd_dev則定義了一些LCD參數,比如高度,寬度,設置命令,可以通過改變宏定義的方式來改變控制器的輸出。
注3 :顏色數據。
目前的顏色數據都有RGB888,RGB666和RGB565格式,代表了R,G和B的分辨率,其中RGB888代表紅,綠,藍都是8位,可以表示16777216種顏色,但是受制于TFTLCD的數據總線寬度只有16位,所以只能夠采用RGB565模式,這種模式代表紅色和藍色都是5位分辨率,綠色6位分辨率,這種模式中可以最多表示65536種顏色。文件中宏定義的顏色數據就是根據RGB888格式轉換而來,一般都是放棄低2位和低1位,例如RGB888模式中某種顏色為11011110 11011110 11011111,那么轉換為RGB565模式就變成了11011 110111 11011,換成16進制就是1101 1110 1111 1011=DEFB H。
-
led
+關注
關注
242文章
23652瀏覽量
670035 -
單片機
+關注
關注
6061文章
44854瀏覽量
645807 -
數碼管
+關注
關注
32文章
1889瀏覽量
92149
發布評論請先 登錄
如何使用STM32F1的FSMC接口控制TFTLCD顯示
利用STM32連接ALIENTEK TFTLCD模塊實現TFTLCD模塊的顯示
ALIENTEK_MINISTM32_實驗10_TFT_LCD顯示
STM32各模塊學習筆記
STM32學習——TFTLCD原理

STM32入門學習筆記之TFTLCD顯示實驗1

評論