打印
[STM32F1]

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

[复制链接]
1751|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 15113484470 于 2014-11-13 11:18 编辑

  在某宝买了一块红牛板,以前没接触过FSMC,在学习彩屏时有一些疑问,希望高手指点,我看屏的RS是接在PF0,也就是FSMC的A0,CS是接在PG12,也就是FSMC的NE4,再看F1的参考手册FSMC部分  ,只有存储块1是挂SRAM的,到这里,就是说屏是挂载在FSMC_Bank1_NORSRAM4,我的疑问就是在这个地址计算上,再看手册,

屏是挂载在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脚为什么有高低的变化?这样就能对屏进行读写操作了,比我们把某些脚拉高拉低方便多了,只是不太理解他的操作过程,望大神不吝赐教,最后奉上显示图




沙发
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脚作用了,应该是低电平写寄存器,高电平写数据吧;

使用特权

评论回复
5
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
6
15113484470|  楼主 | 2014-11-13 14:27 | 只看该作者
mmuuss586 发表于 2014-11-13 12:22
这个板子手工焊的好像;
还有USB;
你买的二手的?

新的,被我折腾成这样了

使用特权

评论回复
7
mmuuss586| | 2014-11-13 18:19 | 只看该作者
15113484470 发表于 2014-11-13 14:27
新的,被我折腾成这样了

哦,你厉害

使用特权

评论回复
8
szopenmcu| | 2014-12-24 15:37 | 只看该作者
mark!

使用特权

评论回复
9
monkeypony| | 2014-12-30 21:44 | 只看该作者
我也来学习一下

使用特权

评论回复
10
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)

使用特权

评论回复
11
yiyigirl2014| | 2016-1-8 21:17 | 只看该作者
配置好厚,就可以直接通过那几个定义的寄存器进行LCD的操作了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

125

帖子

0

粉丝