(3)SRAM/NOR 閃存寫時(shí)序寄存器: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時(shí)起作用)
00:訪問模式A
01:訪問模式B
10:訪問模式C
11:訪問模式D
Bit 27~Bit 24:數(shù)據(jù)保持時(shí)間
0000:第一個(gè)數(shù)據(jù)的保持時(shí)間為2個(gè)CLK時(shí)鐘周期
……
1111:第一個(gè)數(shù)據(jù)的保持時(shí)間為17個(gè)CLK時(shí)鐘周期(默認(rèn))
Bit 23~Bit 20:時(shí)鐘分頻比
0000:保留
0001:1個(gè)CLK周期=2個(gè)HCLK周期
0010:1個(gè)CLK周期=3個(gè)HCLK周期
……
1111:1個(gè)CLK周期=16個(gè)HCLK周期(默認(rèn))
Bit 19~Bit 16:總線恢復(fù)時(shí)間
0000:總線恢復(fù)時(shí)間=1個(gè)HCLK時(shí)鐘周期
……
1111:總線恢復(fù)時(shí)間=16個(gè)HCLK時(shí)鐘周期(默認(rèn))
Bit 15~Bit 8:數(shù)據(jù)保持時(shí)間
00000000:保留
00000001:DATAST保持時(shí)間=2個(gè)HCLK時(shí)鐘周期
00000010:DATAST保持時(shí)間=3個(gè)HCLK時(shí)鐘周期
……
11111111:DATAST保持時(shí)間=256個(gè)HCLK時(shí)鐘周期(默認(rèn))
Bit 7~Bit 4:地址保持時(shí)間
0000:ADDHLD保持時(shí)間=1個(gè)HCLK時(shí)鐘周期
……
1111:ADDHLD保持時(shí)間=16個(gè)HCLK時(shí)鐘周期(默認(rèn))
Bit 3~Bit 0:地址建立時(shí)間
0000:ADDSET建立時(shí)間=1個(gè)HCLK時(shí)鐘周期
……
1111:ADDSET建立時(shí)間=16個(gè)HCLK時(shí)鐘周期(默認(rèn))
10.4 實(shí)驗(yàn)例程
現(xiàn)有一塊驅(qū)動(dòng)芯片為5510的LCD驅(qū)動(dòng)芯片,廠家提供初始化例程,使用STM32的FSMC功能驅(qū)動(dòng)屏幕顯示字符串,連接關(guān)系如下表所示。
片選CS:FSMC_NE4
寫控制WR:FSMC_NWE
讀控制RD:FSMC_NOE
數(shù)據(jù)命令控制RS:FSMC_A6
背光:PB0
16位并行數(shù)據(jù):FSMC_D15~FSMC_D0
(1)創(chuàng)建lcd.h,并輸入以下代碼。
#ifndef _LCD_H_
#define _LCD_H_
#include "sys.h"
//LCD地址結(jié)構(gòu)體
typedef struct
{
vu16 LCD_REG ;
vu16 LCD_RAM ;
}LCD_TypeDef ;
#define LCD_BASE ( ( u32 )( 0x6C000000|0x000007FE ))
#define LCD ( ( LCD_TypeDef* ) LCD_BASE )
//LCD重要參數(shù)集
typedef struct
{
u16 width ; //LCD寬度
u16 height ; //LCD高度
u8 dir ; //橫屏豎屏控制
u16 wramcmd ; //開始寫gram指令
u16 setxcmd ; //設(shè)置x坐標(biāo)指令
u16 setycmd ; //設(shè)置y坐標(biāo)指令
}_lcd_dev ;
extern _lcd_dev lcddev ; //管理LCD重要參數(shù)
//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 ) ; //快速畫點(diǎn)
void LCD_ShowString( u16 x, u16 y, u8 *p ) ; //顯示一個(gè)字符串
#endif
注1 :關(guān)于LCD_BASE地址的定義部分,其中0x6C000000代表FSMC的SRAM塊4的開始地址,0x000007FE則代表A10的偏移地址,7FE H換算成2進(jìn)制就是01111111 1110,由于FSMC在16位數(shù)據(jù)總線狀態(tài)下,地址需要右移一個(gè)字節(jié),所以映射到A10A0上的地址數(shù)據(jù)就是011 1111 1111,A0恰好就是0,如果此時(shí)16位地址加1,對應(yīng)的8位地址就是加2,也就是7FE+2=800,映射到A10A0上的地址就是100 0000 0000,即A10變?yōu)榱?,這就實(shí)現(xiàn)了通過A10來控制RS的效果。我們定義的結(jié)構(gòu)體也可以發(fā)現(xiàn),LCD_REG對應(yīng)的就是0x6C000000+0x000007FE,而LCD_RAM對應(yīng)的就變成了0x6C000000+0x000007FE+0x00000002。
注2 :結(jié)構(gòu)體_lcd_dev則定義了一些LCD參數(shù),比如高度,寬度,設(shè)置命令,可以通過改變宏定義的方式來改變控制器的輸出。
注3 :顏色數(shù)據(jù)。
目前的顏色數(shù)據(jù)都有RGB888,RGB666和RGB565格式,代表了R,G和B的分辨率,其中RGB888代表紅,綠,藍(lán)都是8位,可以表示16777216種顏色,但是受制于TFTLCD的數(shù)據(jù)總線寬度只有16位,所以只能夠采用RGB565模式,這種模式代表紅色和藍(lán)色都是5位分辨率,綠色6位分辨率,這種模式中可以最多表示65536種顏色。文件中宏定義的顏色數(shù)據(jù)就是根據(jù)RGB888格式轉(zhuǎn)換而來,一般都是放棄低2位和低1位,例如RGB888模式中某種顏色為11011110 11011110 11011111,那么轉(zhuǎn)換為RGB565模式就變成了11011 110111 11011,換成16進(jìn)制就是1101 1110 1111 1011=DEFB H。
-
led
+關(guān)注
關(guān)注
240文章
22999瀏覽量
654776 -
單片機(jī)
+關(guān)注
關(guān)注
6026文章
44456瀏覽量
630988 -
數(shù)碼管
+關(guān)注
關(guān)注
32文章
1873瀏覽量
90732
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論