STM32之FSMC驱动LCD难点理解

STM32之FSMC驱动LCD难点理解

根据外设存储器的位宽分为8Bit和16Bit驱动
STM32内部存储单位为一个字节,也就是一个地址存储一个字节大小的数据,当外部存储器的位宽为8位时,写入一个数据需要一个字节即地址加1,当外部存储器的位宽为16位时,写入一个数据需要两个字节即地址加2,如下图所示:
外设存储器位宽8位:写入0x11 和 0x22

地址内存
0x6000 00000x11
0x6000 00010x22

外设存储器位宽16位:写入0x1122 和 0x3344

地址内存
0x6000 00000x11
0x6000 00010x22
0x6000 00020x33
0x6000 00030x44
写16位数据地址变化HADDR[25:0]
0x000000 0000
0x020000 0010
0x040000 0100
0x060000 0110

由于内存地址映射都是偶地址开始,当外设存储器的位宽为16位时,每次写数据时地址加2,相当于所有的地址为2的倍数,即写16位数据时地址位右移1位。FSMC将使用内部的HADDR[25:1]地址来作为对外部存储器的寻址地址FSMC_A[24:0]。
在这里插入图片描述
当FSMC模拟80并口时序驱动LCD外设时,以A6为例,作为LCD_RS信号控制线,A6输出0写命令,A6输出1写数据。当外设是8位位宽时,FSMC以HADDR[25:0] (映射FSMC_A[25:0])对外寻址,只要HADDR[25:0]的Bit6为0写命令,为1写数据。当外设是16位位宽时,FSMC以HADDR[25:1](映射FSMC_A[24:0])对外寻址,相当于整个地址右移一位,原来的Bit6输出实则是FSMC_A5输出,要让A6输出需要设置Bit7输出。如下所示:
外设为8位:Bit6->0100 0000->0x40
写命令->A6输出0 地址0x6000 0000用HADDR[25:0]表示,FSMC_A6为0
写数据->A6输出1 地址(0x6000 0000|0x40)用HADDR[25:0]表示,FSMC_A6为1
外设为16位:Bit6->0100 0000->0x40 Bit7->1000 0000->0x80
写命令->A6输出0 地址0x6000 0000用HADDR[25:1]表示即右移1位写入FSMC_A[24:0],FSMC_A6仍为0
写数据->A6输出1 地址(0x6000 0000|0x40)用HADDR[25:1]表示即右移1位写入FSMC_A[24:0],FSMC_A6变为0, FSMC_A5变为1,要使FSMC_A6输出1,地址需或上Bit7即地址(0x6000 0000|0x80)

LCD存储地址表示
LCD存储地址表示方式有两种,宏定义表示和结构体表示,结构体表示跟结构体成员所占空间大小有关。
FSMC_A6为LCD_RS信号控制线,控制命令和数据的读写,2^6=0x40,2^7=0x80,
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值