[STM32]关于移植STemwin所遇到的问题记录(2)

前面说到了完全用我们自己的画点读点函数的直接线性访问 (LIN) 驱动程序,这种方法有个问题会出现偶尔的画面失真,不过大部分情况下还是稳定的,接上回说到还有第二种方法就是间接访问(FlexColor )驱动程序,那这一次就来谈一下这个方法。这个方法对LCD控制器有要求,首先我们看LCD_X_Config 函数的最后一句

GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66708, GUIDRV_FLEXCOLOR_M16C0B16);

这个函数是用来配置总线宽度、缓存用量和硬件程序。
首先看这个函数的官方描述:
这里写图片描述

这句话里有两个比较关键的点
GUIDRV_FLEXCOLOR_F66708GUIDRV_FLEXCOLOR_M16C0B16 ,前一个参数是选择控制器的,后一个参数是选择位宽等模式的。首先你要看一下你所用的LCD控制器是否在受支持的范围内,如果不支持那就GG了。我的显示器是ILI9341所以我选择了66709这种方式

如果支持的话那就好办了,我们只需要把LCD_X_Config函数 上面的四个函数填充好就可以了,具体的实现方式和我们裸机的读写寄存器的方式基本类似具体可以

static void LcdWriteReg(U16 Data);//写寄存器函数
static void LcdWriteData(U16 Data);//写数据函数
static void LcdWriteDataMultiple(U16 * pData, int NumItems);//写多字节
static void LcdReadDataMultiple(U16 * pData, int NumItems);//读多字节

写好以后就类似于以下的样子的


static void LcdWriteReg(U16 Data) {
  LCD_WR_REG(Data);
}

static void LcdWriteData(U16 Data) {
  LCD_WR_DATA(Data);
}

static void LcdWriteDataMultiple(U16 * pData, int NumItems) {
  while (NumItems--) {
    LCD_WR_DATA(*pData++);		
  }
}

static void LcdReadDataMultiple(U16 * pData, int NumItems) {
  while (NumItems--) {
    *pData++ = LCD_ReadReg(0x22);
  }
}

还是要再提醒一下,一定要看好你的LCD控制器


根据ST公司的官方测试,这种FlexColor方式和Lin方式的对比,测试的结果如下,但是我实测的时候正好是反过来了,不知道问题出在哪里:
这里写图片描述

这样就完成了所有的移植。


注意,上面一共提到了两种方法(FlexColor 和 Lin 方法),初学者不要以为我把一种方法分成了两篇来写,造成冲突。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山猫Show

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值