对于FSMC的理解,基于32单片机TFTLCD实验

  • 正点原子32单片机上的TFTLCD实验是基于FSMC来控制的,对于之前从未接触过FSMC的我来说,感觉理解起来有点吃力,通过查找资料,也有了自己的理解,如有不对,还请斧正。
  • 对于LCD和FSMC的控制线连接有以下关系
    FSMC_NOE —> LCD_RD
    FSMC_A10 —> LCD_RS
    FSMC_NE4 —> LCD_CS
    FSMC->NWE —> LCD_WR
    FSMC_RESET —> LCD_RST

在这里插入图片描述
LCD写操作
对照一下这两张时序图可以清楚的发现通过改变时间可以达到用FSMC控制LCD的时序,唯一不同的是FSMC没有RS,也就是读写命令,还是读写数据,而这个我们可以
通过FSMC的地址线也就是A[0:25]进行控制

在32单片机实验例程中有如下定义:
	#define LCD_BASE        ((u32)(0x6C000000 | 0x000007FE))
	#define LCD             ((LCD_TypeDef *) LCD_BASE)
	typedef struct
	{
		vu16 LCD_REG;
		vu16 LCD_RAM;
	} LCD_TypeDef; 

通过C语言的学习可以知道,两个define将地址6c0007FE作为该结构体的地址,而 0x7FE,其实就是二进制码 111 11111110,通过手册可知,单片机是以字节进行对齐操作的,而一字节是8位,现在要以字(16位)进行操作,要将地址右移一位,也就是011 1111 1111,也就对应rs=0,而LCD_RAM也就是0x7FE+0x2,对应一下,也就是111 1111 1110 -->1111 1111 1111 -->1位 111 1111 1111,rs=1从而达到了控制FMSC——A[10]高低的效果,(右移一位?因为单片机是8位对齐,外部16位对齐,其实就是单片机进行+1操作对应了外部地址进行+2操作,如何让外部地址加1呢,那就是将地址右移1位,+2 >> 1 == +1)。

不知道大家有没有对地址线不清楚的,例程实验给出的地址线是A[10],其实也可以是其他的,实验中进行的操作就是向该地址中写数据,剩下的就让FSMC自动按时序进行D[0:15]的数据传输,TFTLCD实验对地址基本没有要求。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值