8345|10

89

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

100PIN的FSMC接T6963液晶控制器 [复制链接]



STM32F103VET接5V 240*128液晶 T6963控制器,现在屏上有显示,但是乱码。FSMC配置为8位数据宽度SRAM模式,数据地址非复用。NE1为片选,FSMC的A16为命令(状态)数据选择口线。所以我对写命令(读状态)地址:*((__IO uint8_t *)((uint32_t)0x60020001)) // 命令 A16=1(C/D=1) 。读写数据地址:*((__IO uint8_t *)((uint32_t)0x60000001)) // 数据 A16=0(C/D=0)。

程序如下,请大家给指点一下。

// PD.4     →  NOE(RD)
// PD.5     →  NWE(WE)
// PD.7     →  NE1(CS)
// PD.11   →  A16(C/D)
// PD.14   →  D0
// PD.15   →  D1
// PD.0     →  D2
// PD.1     →  D3
// PE.7      → D4
// PE.8     →  D5
// PE.9     →  D6
// PE.10   →  D7

void SMC_LCD_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

FSMC_NORSRAMTimingInitTypeDef FSMC_NORSRAMTimingInitStructure;
FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG, ENABLE);

GPIO_InitStructure.GPIO_Speed   = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode    = GPIO_Mode_AF_OD; //设置为漏开
GPIO_InitStructure.GPIO_Pin     = GPIO_Pin_0            // PD.0     →  D2
                                  | GPIO_Pin_1            // PD.1     →  D3
                                  | GPIO_Pin_4            // PD.4     →  NOE(RD)
                                  | GPIO_Pin_5            // PD.5     →  NWE(WE)
                                  | GPIO_Pin_7           // PD.7     →  NE1(CS)
                                  | GPIO_Pin_11           // PD.11    →  A16(C/D)
                                  | GPIO_Pin_14           // PD.14    →  D0
                                  | GPIO_Pin_15;          // PD.15    →  D1
GPIO_Init(GPIOD, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin     = GPIO_Pin_1            // PE.1     → RST
                                  | GPIO_Pin_7            // PE.7     →  D4
                                  | GPIO_Pin_8            // PE.8     →  D5
                                  | GPIO_Pin_9            // PE.9     →  D6
                                  | GPIO_Pin_10;          // PE.10    →  D7
GPIO_Init(GPIOE, &GPIO_InitStructure);

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;//选择NE1
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; //地址数据非复用
FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;//SRAM
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;//数据宽度8位
FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
FSMC_NORSRAMTimingInitStructure.FSMC_AddressSetupTime       = 2;       // ADDSET
FSMC_NORSRAMTimingInitStructure.FSMC_AddressHoldTime        = 2;       // ADDHOLD
FSMC_NORSRAMTimingInitStructure.FSMC_DataSetupTime          = 7;      // DATAST
FSMC_NORSRAMTimingInitStructure.FSMC_BusTurnAroundDuration  = 1;      // BUSTURN
FSMC_NORSRAMTimingInitStructure.FSMC_CLKDivision            = 1;      // CLKDIV
FSMC_NORSRAMTimingInitStructure.FSMC_DataLatency            = 2;      // DATLAT
FSMC_NORSRAMTimingInitStructure.FSMC_AccessMode = FSMC_AccessMode_A;    // ACCMOD
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &FSMC_NORSRAMTimingInitStructure;
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &FSMC_NORSRAMTimingInitStructure;

FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
}

#define Lcd_Cmd_Reg *((__IO uint8_t *)((uint32_t)0x60020001)) // 命令 状态 C/D(A16)=1
#define Lcd_Data_Reg *((__IO uint8_t *)((uint32_t)0x60000001)) //数据 C/D(A16)=0

//写无参数指令代码
__inline void lcdwc(uint8_t cmdcode)
{
while((Lcd_Cmd_Reg&0x3)!=0x3);  //当Lcd_Cmd_Reg低两位不同时为1
Lcd_Cmd_Reg=cmdcode;//写命令字
}
//写双参数指令代码
__inline void lcdwc3(uint8_t cmdcode,uint8_t cmddata,uint8_t cmddata2)
{
while((Lcd_Cmd_Reg&0x3)!=0x3);
Lcd_Data_Reg=cmddata;
while((Lcd_Cmd_Reg&0x3)!=0x3);
Lcd_Data_Reg=cmddata2;
while((Lcd_Cmd_Reg&0x3)!=0x3);
Lcd_Cmd_Reg=cmdcode;
}
//写数据
__inline void lcdwd(uint8_t dispdata)
{
while((Lcd_Cmd_Reg&0x3)!=0x3);
Lcd_Data_Reg=dispdata;
while((Lcd_Cmd_Reg&0x3)!=0x3);
Lcd_Cmd_Reg = LC_UNCHANGED_WR;
}
//读数据
__inline uint8_t lcdrdata(void)
{
uint8_t tmp;
while((Lcd_Cmd_Reg&0x3)!=0x3);
Lcd_Cmd_Reg = LC_UNCHANGED_RD;
while((Lcd_Cmd_Reg&0x3)!=0x3);
tmp = Lcd_Data_Reg;
return tmp;
}
此帖出自stm32/stm8论坛

最新回复

                                 我是个新手,刚刚开始做fsmc驱动TFT。有一个问题希望请教您一下:为什么A16置1,是将第17位为1?这个问题可能比较初级,请别见笑!谢谢 1# lu_weixi 你的问题与这个帖子是相同的问题:https://bbs.eeworld.com.cn/viewthread.php?tid=160004  详情 回复 发表于 2010-3-26 16:06
点赞 关注
 

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 没人回答!!!自己顶一下!
此帖出自stm32/stm8论坛
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 看不出什么问题,一直希望贴出来的程序注释仔细点,这样大家也好看
此帖出自stm32/stm8论坛
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 顶楼上的,真的是看到好多程序都好乱,完全不想看下去
此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 mark
此帖出自stm32/stm8论坛
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 乱码,就是说通讯没成功,数据没写进去,你仿真看看,有没返回指令
此帖出自stm32/stm8论坛
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

7
 
                                 FSMC方式不行,用IO方式可以跑UC/GUI了!但刷屏比较慢。
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

8
 
                                 跑FSMC的时候要注意其他的中断或是周边没有使用FSMC或是中断FSMC过久 不然所有东西都会跑位或是乱码
此帖出自stm32/stm8论坛
 
 
 

回复

101

帖子

0

TA的资源

一粒金砂(中级)

9
 
                                 最好用个专门的驱动芯片
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(高级)

10
 
                                 我是个新手,刚刚开始做fsmc驱动TFT。有一个问题希望请教您一下:为什么A16置1,是将第17位为1?这个问题可能比较初级,请别见笑!谢谢
此帖出自stm32/stm8论坛
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

11
 
我是个新手,刚刚开始做fsmc驱动TFT。有一个问题希望请教您一下:为什么A16置1,是将第17位为1?这个问题可能比较初级,请别见笑!谢谢 1# lu_weixi
你的问题与这个帖子是相同的问题:https://bbs.eeworld.com.cn/viewthread.php?tid=160004
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表