OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 17354|回复: 34

FSMC点亮LCD

[复制链接]

3

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2011-5-5
在线时间
4 小时
发表于 2011-5-14 22:25:56 | 显示全部楼层 |阅读模式



     对寄存器 FSMC_BCR1 ,直接赋值 怎么写啊?
     FSMC->BCR1 = 0x00001055; ??怎么不对啊。
     对于寄存器GPIOD_ODR,GPIOD->ODR|=0XF000;可以实现对其赋值,FSMC->BCR1 = 0x00001055;为啥不对啊。
     我在stm32f10x_map.h中 找到了GPIOD的定义,  #define GPIOD               ((GPIO_TypeDef *) GPIOD_BASE),FSMC为啥没有啊?

    谢谢原子老大啦!
向原子哥学习!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2011-5-5
在线时间
4 小时
 楼主| 发表于 2011-5-14 22:41:31 | 显示全部楼层
貌似 明白了点


#define GPIOD_BASE   (APB2PERIPH_BASE + 0x1400)

#define GPIOD       ((GPIO_TypeDef *) GPIOD_BASE)

typedef struct
{
  vu32 CRL;
  vu32 CRH;
  vu32 IDR;
  vu32 ODR;
  vu32 BSRR;
  vu32 BRR;
  vu32 LCKR;
} GPIO_TypeDef;
向原子哥学习!
回复 支持 反对

使用道具 举报

3

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2011-5-5
在线时间
4 小时
 楼主| 发表于 2011-5-14 22:54:47 | 显示全部楼层
但是 要对 对寄存器 FSMC_BCR1 直接赋值。要 怎么写呢?
向原子哥学习!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-5-14 23:08:13 | 显示全部楼层
回复【3楼】yiya1989:
-------------------------------
我在论坛上传了一个fsmc驱动液晶的例子,你可以找找.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2011-5-5
在线时间
4 小时
 楼主| 发表于 2011-5-14 23:35:22 | 显示全部楼层
回复【4楼】正点原子:
-------------------------------
恩 好的!谢啦
向原子哥学习!
回复 支持 反对

使用道具 举报

3

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2011-5-5
在线时间
4 小时
 楼主| 发表于 2011-5-15 00:37:00 | 显示全部楼层
回复【4楼】正点原子:
-------------------------------
额。。我说 stm32f10x_map.h 中怎么有
 typedef struct
{
  vu32 BTCR[8];   
} FSMC_Bank1_TypeDef; 

typedef struct
{
  vu32 BWTR[7];
} FSMC_Bank1E_TypeDef; 

却没有   BTR,BCR。原来给整在一起了://bank1有NE1~4,每一个有一个BCR+TCR,所以总共八个寄存器。

但是  vu32 BWTR[7]; 为什么 也是八个啊?


还有,老大 ,关于 FSMC 的这些 寄存器的 设置 以及之前 那些液晶显示器的初始化设这代码 您是从哪里 找的啊?
像这样的资料 我应该到哪里去找呢?、、
向原子哥学习!
回复 支持 反对

使用道具 举报

3

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2011-5-5
在线时间
4 小时
 楼主| 发表于 2011-5-15 09:51:48 | 显示全部楼层
 0x0C0007FE,怎么回事,这个是怎么算的啊,LCD_REG,LCD_RAM的地址是多少?他们怎么就成了操作寄存器和数据了?
////////////////////////////////////////////////////////////////////
    
//LCD地址结构体
typedef struct
{
u16 LCD_REG;
u16 LCD_RAM;
} LCD_TypeDef;
//使用NOR/SRAM的 BANK 4,地址位HADDR[27,26]=11 A10作为数据命令区分线 
//注意设置时STM32内部会右移一位对其! 111110=0X3E     
#define LCD_BASE        ((u32)(0x60000000 | 0x0C0007FE))
#define LCD             ((LCD_TypeDef *) LCD_BASE)
向原子哥学习!
回复 支持 反对

使用道具 举报

3

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2011-5-5
在线时间
4 小时
 楼主| 发表于 2011-5-15 10:15:53 | 显示全部楼层

红线处 怎么回事啊
向原子哥学习!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-5-15 11:22:27 | 显示全部楼层
回复【8楼】yiya1989:
-------------------------------
这些问题,我后面的豪华版资料会详细介绍。
现在简单说一下:
1,但是  vu32 BWTR[7]; 为什么 也是八个啊? 
这里是7个,不是8个。
为什么是7个,你得看参考手册了,提示:BWTR每个寄存器占8个字节的宽度,总共4个。
2,初始化代码,卖液晶的人提供的。
3,0x6C000000 是bank4的首地址。
而7FE,是A10的偏移。提示:A10用来控制RS脚,当RS为高时,写命令,当RS为低的时候写数据。
那么:
typedef struct 

u16 LCD_REG; 
u16 LCD_RAM; 
} LCD_TypeDef; 

这就好理解了,REG,代表写入命令(A10=1);RAM,代表写入数据(A10=0).
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

51

主题

214

帖子

0

精华

高级会员

Rank: 4

积分
561
金钱
561
注册时间
2011-4-11
在线时间
43 小时
发表于 2011-5-15 13:45:24 | 显示全部楼层
回复【9楼】正点原子:
-------------------------------
豪华版资料!!!支持,顶顶。
回复 支持 反对

使用道具 举报

3

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2011-5-5
在线时间
4 小时
 楼主| 发表于 2011-5-15 15:20:07 | 显示全部楼层
回复【9楼】正点原子:
-------------------------------
谢谢老大啦~原理基本都明白了。。。代码仍在调试中。。。
向原子哥学习!
回复 支持 反对

使用道具 举报

3

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2011-5-5
在线时间
4 小时
 楼主| 发表于 2011-5-15 16:13:43 | 显示全部楼层
现在有两块LCD显示屏,

第一块板子 CS WR RD信号分别接FSMC_NE4,FSMC_NWE,FSMC_NOE,这几个信号在使用FSMC读写时会自动配置。

第二个板子CS WR RD并没有连到响应的 FSMC_NE4,FSMC_NWE,FSMC_NOE。


这样的话,是不是第一块板子可以使用FSMC方式驱动lcd液晶屏,第二块板子就不能用FSMC方式驱动lcd了呢?





向原子哥学习!
回复 支持 反对

使用道具 举报

3

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2011-5-5
在线时间
4 小时
 楼主| 发表于 2011-5-15 22:13:23 | 显示全部楼层
老大,我这里还有问题呀!
向原子哥学习!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-5-16 01:04:44 | 显示全部楼层
回复【12楼】yiya1989:
-------------------------------
肯定要接到FSMC的相关脚才可以的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

98

主题

408

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2010-12-14
在线时间
0 小时
发表于 2011-5-16 01:53:08 | 显示全部楼层
楼主的头像很cool啊!
希望openedv能给大家提供一个友好的技术交流平台!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-5-16 08:45:01 | 显示全部楼层
 是不是老婆来的?还是本人啊?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2011-5-5
在线时间
4 小时
 楼主| 发表于 2011-5-16 09:02:46 | 显示全部楼层
回复【16楼】正点原子:
-------------------------------

谢谢老大啦
向原子哥学习!
回复 支持 反对

使用道具 举报

3

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2011-5-5
在线时间
4 小时
 楼主| 发表于 2011-5-16 19:44:58 | 显示全部楼层
老大啊,一般驱动程序的初始化代码不是大致相同吗,下面这段是我的FSMC例程里的初始化代码,怎么差别怎么大啊!!!!

这算哪门子的初始化代码啊,是FSMC的缘故,还是液晶控制器不同的缘故啊!

  LCD_FSMCConfig();
  Delay(50);
  ////////////////////////////////
  LCD_WriteReg(0x0042,0x0008);  //0x0008 
 //Gamma setting  
  LCD_WriteReg(0x0046,0x00B4); 
  LCD_WriteReg(0x0047,0x0043); 
  LCD_WriteReg(0x0048,0x0013);
  LCD_WriteReg(0x0049,0x0047); 
  LCD_WriteReg(0x004A,0x0014); 
  LCD_WriteReg(0x004B,0x0036); 
  LCD_WriteReg(0x004C,0x0003); 
  LCD_WriteReg(0x004D,0x0046); 
  LCD_WriteReg(0x004E,0x0005);  
  LCD_WriteReg(0x004F,0x0010);  
  LCD_WriteReg(0x0050,0x0008);  
  LCD_WriteReg(0x0051,0x000a);  
   
  //Window Setting 
  //0x0002至0x0009可用于写开窗口
  LCD_WriteReg(0x0002,0x0000); 
  LCD_WriteReg(0x0003,0x0000); 
  LCD_WriteReg(0x0004,0x0000); 
  LCD_WriteReg(0x0005,0x00EF); 
  LCD_WriteReg(0x0006,0x0000); 
  LCD_WriteReg(0x0007,0x0000); 
  LCD_WriteReg(0x0008,0x0000); 
  LCD_WriteReg(0x0009,0x013F); 
  Delay(10); 
  LCD_WriteReg(0x0001,0x0006); 
  LCD_WriteReg(0x0016,0x00C8);   
  LCD_WriteReg(0x0023,0x0095); 
  LCD_WriteReg(0x0024,0x0095); 
  LCD_WriteReg(0x0025,0x00FF); 
  LCD_WriteReg(0x0027,0x0002); 
  LCD_WriteReg(0x0028,0x0002); 
  LCD_WriteReg(0x0029,0x0002); 
  LCD_WriteReg(0x002A,0x0002); 
  LCD_WriteReg(0x002C,0x0002); 
  LCD_WriteReg(0x002D,0x0002); 

  LCD_WriteReg(0x003A,0x0001);  
  LCD_WriteReg(0x003B,0x0001);  
  LCD_WriteReg(0x003C,0x00F0);    
  LCD_WriteReg(0x003D,0x0000); 

  Delay(20); 

  LCD_WriteReg(0x0035,0x0038); //0038
  LCD_WriteReg(0x0036,0x0078); 
  LCD_WriteReg(0x003E,0x0038); 
  LCD_WriteReg(0x0040,0x000F); 
  LCD_WriteReg(0x0041,0x00F0);  

  LCD_WriteReg(0x0038,0x0000); 

 // Power Setting 

  LCD_WriteReg(0x0019,0x0049);  
  LCD_WriteReg(0x0093,0x000A); 

  Delay(10); 

  LCD_WriteReg(0x0020,0x0020);   
  LCD_WriteReg(0x001D,0x0003);   
  LCD_WriteReg(0x001E,0x0000);  
  LCD_WriteReg(0x001F,0x0009);   
  LCD_WriteReg(0x0044,0x0053);  
  LCD_WriteReg(0x0045,0x0010);   
  
  Delay(10);  

  LCD_WriteReg(0x001C,0x0004);  
  Delay(20); 
  LCD_WriteReg(0x0043,0x0080);    
  Delay(5); 
  LCD_WriteReg(0x001B,0x000a);    
  Delay(40);  
  LCD_WriteReg(0x001B,0x0012);    
  Delay(40);   
 //Display On Setting 

  LCD_WriteReg(0x0090,0x007F); 
  LCD_WriteReg(0x0026,0x0004); 
  
  Delay(40);  

  LCD_WriteReg(0x0026,0x0024); 
  LCD_WriteReg(0x0026,0x002C); 
  
  Delay(40);   
  LCD_WriteReg(0x0070,0x0008); 
  LCD_WriteReg(0x0026,0x003C);  
  LCD_WriteReg(0x0057,0x0002); 
  LCD_WriteReg(0x0055,0x0000); 
  LCD_WriteReg(0x0057,0x0000); 
//**************END***************//



其中,0x0002至0x0009可用于写开窗口,如下:
void Set_Wingdows (unsigned int startx,unsigned int starty,unsigned int endx,unsigned int endy) 

 LCD_WriteReg(0x0002,startx>>8); 
 LCD_WriteReg(0x0003,startx); 
 LCD_WriteReg(0x0004,endx>>8); 
 LCD_WriteReg(0x0005,endx); 
 LCD_WriteReg(0x0006,starty>>8); 
 LCD_WriteReg(0x0007,starty); 
 LCD_WriteReg(0x0008,endy>>8); 
 LCD_WriteReg(0x0009,endy); 
 LCD_WriteReg(0x0016,0x00C8); 
}

向原子哥学习!
回复 支持 反对

使用道具 举报

3

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2011-5-5
在线时间
4 小时
 楼主| 发表于 2011-5-16 19:46:16 | 显示全部楼层
别人的0x0002至0x0009都是显示配置,这个竟然是开窗口!
向原子哥学习!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-5-16 20:15:10 | 显示全部楼层
回复【18楼】yiya1989:
-------------------------------
很相似啊.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2011-5-5
在线时间
4 小时
 楼主| 发表于 2011-5-16 20:20:57 | 显示全部楼层

回复【20楼】正点原子:
-------------------------------
哪里相似了啊,9320那些寄存器说明,放在这个初始化代码上都不配套啊
向原子哥学习!
回复 支持 反对

使用道具 举报

3

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2011-5-5
在线时间
4 小时
 楼主| 发表于 2011-5-16 20:25:18 | 显示全部楼层
回复【20楼】正点原子:
-------------------------------
我找不到哪个代码是设置 刷屏 时 的 起始点 和 屏幕刷新 方向啊! 老大,那个地方是相应代码呢?

就是9320里的 LCD_WriteReg(0x0003,0x1030); 这个代码
向原子哥学习!
回复 支持 反对

使用道具 举报

3

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2011-5-5
在线时间
4 小时
 楼主| 发表于 2011-5-16 20:34:29 | 显示全部楼层
我挨个试的,相应代码是:  LCD_WriteReg(0x0070,0x0038);   


但是只能修改起始位置,改不了扫描方向啊。。。。。。。。。。。



向原子哥学习!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-5-17 08:49:06 | 显示全部楼层
回复【23楼】yiya1989:
-------------------------------
不同厂家的屏,可能有点点区别(伽马校正这些),但是扫描方向应该都是一样的,你看看数据手册怎么说的,如果和数据手册不同,那可能你的屏就不是9320的了。
其次我不建议用填充的方式来写字,推荐用画点的方式。 因为填充方式来做,不同屏区别会很大,而采用画点方式,则不同屏的区别就比较小了,可以一个程序通杀很多款屏,大大提高你产品的生命力,哈哈。
我们开发板就支持10种驱动器的屏(9320,9325,9328,9300,9331,5408,4531,1505,b505,1289),而且后续可以很方便的增加,而不需要对代码进行大刀阔斧的改动,很方便的说。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2011-5-5
在线时间
4 小时
 楼主| 发表于 2011-5-17 13:55:31 | 显示全部楼层
回复【24楼】正点原子:
-------------------------------
唔。。。

填充就是在写点的一开始设定一次光标,之后靠扫描方向自动上色。
打点就是在每写一个点的时候都先手动设置一下光标,然后再上色。

应该是这个区别吧?看您的例程,我一开始就是用的打点方式,知道昨天我才知道也可以填充写字。。。^_^
向原子哥学习!
回复 支持 反对

使用道具 举报

3

主题

12

帖子

1

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2011-5-17
在线时间
0 小时
发表于 2011-5-17 22:35:26 | 显示全部楼层
回复【楼主位】yiya1989:
-------------------------------
顶帖顶帖,人气很旺啊,哈哈,看来你也是才到坛子哦,比我早几天
回复 支持 反对

使用道具 举报

2

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2011-1-16
在线时间
4 小时
发表于 2011-5-26 09:02:16 | 显示全部楼层
楼上的头像亮了~

FSMC这个我也不太懂呢学习了
回复 支持 反对

使用道具 举报

6

主题

114

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2011-2-28
在线时间
8 小时
发表于 2011-11-16 14:22:58 | 显示全部楼层
我也在学习FSMC。
我会很乐意与你交流的。
回复 支持 反对

使用道具 举报

26

主题

279

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
409
金钱
409
注册时间
2010-12-15
在线时间
0 小时
发表于 2011-11-18 13:43:09 | 显示全部楼层
FSMC听说很占资源!STM32工作效率减半?是不是真的?
STM32芯片---上海银洋电子021-53086303
欢迎来电15900733302??采购找张经理
回复 支持 反对

使用道具 举报

20

主题

71

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2011-11-6
在线时间
0 小时
发表于 2012-4-16 17:20:43 | 显示全部楼层
回复【9楼】正点原子:

---------------------------------
‘0x6C000000 是bank4的首地址。 ’好像是BANK1中的NE4首地址吧,我也不懂....%>_<%
原子哥,求交往~(*^__^*) 
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-4-16 18:07:45 | 显示全部楼层
回复【29楼】yinyangdianzi:
---------------------------------
不是.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

11

主题

62

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2013-4-22
在线时间
0 小时
发表于 2013-8-2 12:21:36 | 显示全部楼层
回复【31楼】正点原子:
---------------------------------
地址Ax的偏移量是怎么算的啊?
山登绝顶我为峰!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-2 16:27:20 | 显示全部楼层
回复【32楼】田晓生:
---------------------------------
这个我在stm32开发指南就讲的很明白了啊!!!
我们例程用A10,你依葫芦画瓢也该知道怎么去算了,呵呵.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2014-7-31
在线时间
6 小时
发表于 2014-8-25 12:30:11 | 显示全部楼层
看大家都在用fsmc,如果用普通的IO口驱动tft的话跟fsmc不知道速度上能差多少呢,有没有哪位做过,相关的数据对比,
回复 支持 反对

使用道具 举报

27

主题

259

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
387
金钱
387
注册时间
2014-8-19
在线时间
0 小时
发表于 2014-10-14 22:16:26 | 显示全部楼层
回复【34楼】吻云浩:
---------------------------------
同求
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-30 11:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表