stm32f103系列是没有内置lcd控制器接口的,如果要驱动lcd,需要一颗lcd图形驱动ic。stm32和lcd驱动ic的接口在stm32端是fsmc,fsmc接口提供各种存储器驱动信号也提供了驱动lcd驱动ic的各种信号。
一、fsmc简介
fsmc概览
如下图可以看到fsmc支持的存储器类型及提供的各种读写控制信号。
图1
2.fsmc 框图
图2
3.fsmc 内存地址空间分配
图3
二、lcd 接口
1.8080和6800接口
这两种接口类型是典型的lcd并行接口。接口信号分为:数据信号和控制信号。
数据信号支持8,9,16,18,24位等。
控制信号用来区分读、写及区分是向lcd寻址命令寄存器还是写lcd ram数据。
控制信号定义如下:
图4
8080接口:
6800接口:
2.fsmc的lcd接口信号
图5
通过图5,可以看到fsmc提供了lcd驱动所需的全部信号。
片选有专门的硬件信号,也可以使用地址信号ax,即空闲的地址信号任选一根使用。而lcd的rs信号也可以连接到一根地址线。
3.fsmc 和lcd 连接框图
8080类型接口
6800类型接口
4.驱动程序
以stm32f103vct6为例,关于103vct6的信息如下:
只能使用bank1且ax推荐使用16-23,stm32原理图接口连线如下:
如上图,rs接a16,cs接a17。
如图3,bank1的基地址是0x60000000,
关于lcd驱动ic的访问模式有4种:
所有对lcd图形界面的操作都是基于这四个函数,所以实现4个函数很重要。
#define lcd_comm_add ((vu16 )0x60020000)
#define lcd_data_add *((vu16 *)0x60000000)
#define writecommand(cmd) {lcd_comm_add = cmd;}
#define writedata(data) {lcd_data_add = data;}
inline u8 readdata(void)
{
return lcd_data_add;}
inline u8 readcomm(void)
{
return lcd_comm_add;}
以上代码中rs和标准接口定义是反的,是因为lcd驱动ic对rs的定义和标准就是反的。lcd驱动ic的spec:
另一个问题,硬件使用a16连接rs,为什么代码里体现是的0x60020000(a17)?为什么左移一位,原因在stm32中文手册有说明:
借生态力量助力人工智能发展 英特尔这些年做了哪些事?
荣耀正式发布全新一代智能手机V40
新唐科技W584B030主板介绍
如何处理NCM811
ToF 3D图像传感器的特性介绍
STM32系列之LCD驱动接口与驱动程序介绍
嵌入式系统内存管理机制详解
不再纠结, 简单一图告诉你华为荣耀V9与一加3T的区别
Helix QAC—软件静态测试工具
接地和接零是一个概念吗?接地和接零的基本目的 工作接地与保护接零的区别
用于工业应用的几种典型屏蔽连接器介绍
室内空气污染的危害及监测方法
传感财经:医疗传感器概念报跌;MEMS传感器概念报跌;红外传感器概念报跌
上海市启动“宽带网络和5G领域”2020新型基础设施建设工程
自动驾驶中的点云标注:技术与应用
天拓四方:工业物联网网关在远程运维中的应用
气体流量计的分类及其优缺点
维安达斯入侵报警廊工程中的应用案设备浙江交通集团某地下综合管例
直流稳压电源的串联应用
Valve在官网正式公布了其最新的Steam VR头显照片,并刻有Valve Index的字样