[STM32F1] 关于红牛板FSMC驱动彩屏的疑问

[复制链接]
2035|10
 楼主| 15113484470 发表于 2014-11-13 11:10 | 显示全部楼层 |阅读模式
本帖最后由 15113484470 于 2014-11-13 11:18 编辑

  在某宝买了一块红牛板,以前没接触过FSMC,在学习彩屏时有一些疑问,希望高手指点,我看屏的RS是接在PF0,也就是FSMC的A0,CS是接在PG12,也就是FSMC的NE4,再看F1的参考手册FSMC部分  ,只有存储块1是挂SRAM的,到这里,就是说屏是挂载在FSMC_Bank1_NORSRAM4,我的疑问就是在这个地址计算上,再看手册,
QQ截图20141113101702.png
屏是挂载在FSMC_Bank1_NORSRAM4,对比手册,HADDR[27:26]位用于选择四个存储块之一,27:26选择为11,然后看他的例程有个这样的宏定义#define LCD_BASE        ((u32)(0x60000000 | 0x0C000000))    #define LCD             ((LCD_TypeDef *) LCD_BASE) ,

typedef struct
{
  vu16 LCD_REG;
  vu16 LCD_RAM;
} LCD_TypeDef;

void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue)
{
  /* Write 16-bit Index, then Write Reg */
  LCD->LCD_REG = LCD_Reg;
  /* Write 16-bit Reg */
  LCD->LCD_RAM = LCD_RegValue;
}
没明白LCD->LCD_REG = LCD_Reg;就是写寄存器?
  LCD->LCD_RAM = LCD_RegValue;就是写数据?RS脚为什么有高低的变化?这样就能对屏进行读写操作了,比我们把某些脚拉高拉低方便多了,只是不太理解他的操作过程,望大神不吝赐教,最后奉上显示图
QQ截图20141113111634.png



airwill 发表于 2014-11-13 11:16 | 显示全部楼层
RS是接在 FSMC 的A0.
typedef struct
{
  vu16 LCD_REG;
  vu16 LCD_RAM;
} LCD_TypeDef;

读写 LCD_REG 的地址0x6C000000, 地址线 A0 就是0; 那么 LCD_RAM 的地址0x6C000002,地址线 A0 就是1。
如果这个看不明白,那得回家啃啃计算机原理的教科书了。
mmuuss586 发表于 2014-11-13 12:22 | 显示全部楼层
这个板子手工焊的好像;
还有USB;
你买的二手的?
mmuuss586 发表于 2014-11-13 12:33 | 显示全部楼层
本帖最后由 mmuuss586 于 2014-11-13 12:37 编辑

实际上就和读写RAM一样的;
LCD->LCD_REG,LCD->LCD_RAM:怎么读写看不懂的话,也可以根据读书的时候,51的一些定义方法,自己宏定义;

RS脚为什么有高低的变化?这样就能对屏进行读写操作了
这个你要看屏的RS脚作用了,应该是低电平写寄存器,高电平写数据吧;
mmuuss586 发表于 2014-11-13 13:51 | 显示全部楼层
#define LCD_Command *(*(volatile u16) 0x6c00 0000)
#define LCD_Data          *(*(volatile u16) 0x6c00 0001)
你如果这样定义就比较好理解了;
结果是一样的,执行的效率也是一样的;

评分

参与人数 1威望 +1 收起 理由
15113484470 + 1 1

查看全部评分

 楼主| 15113484470 发表于 2014-11-13 14:27 | 显示全部楼层
mmuuss586 发表于 2014-11-13 12:22
这个板子手工焊的好像;
还有USB;
你买的二手的?

新的,被我折腾成这样了
mmuuss586 发表于 2014-11-13 18:19 | 显示全部楼层
15113484470 发表于 2014-11-13 14:27
新的,被我折腾成这样了

哦,你厉害
szopenmcu 发表于 2014-12-24 15:37 | 显示全部楼层
monkeypony 发表于 2014-12-30 21:44 | 显示全部楼层
我也来学习一下
 楼主| 15113484470 发表于 2016-1-8 14:55 | 显示全部楼层
mmuuss586 发表于 2014-11-13 13:51
#define LCD_Command *(*(volatile u16) 0x6c00 0000)
#define LCD_Data          *(*(volatile u16) 0x6c0 ...

应该是#define LCD_Data          *(*(volatile u16) 0x6c00 0002)
yiyigirl2014 发表于 2016-1-8 21:17 | 显示全部楼层
配置好厚,就可以直接通过那几个定义的寄存器进行LCD的操作了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

125

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部