SPI接口驱动LCD显示 在吸取了前次试用的经验后,果断的更换为BRD4182A模块进行测试,发现整个IDE用起来突然就顺手了很多,官方应该是基于这个模块来设计的,所以支持很好。 BRD4182A无线模块和BRD4001A联合使用的时候,LCD的显示部分实际是搭载在主板上的,所以和使用串口时差不多,都需要有个使能开关,将显示模块切换到EFR32MG22处理器上来。 1. 基本硬件配置说明 和串口的试用比起来,LCD似乎更加复杂一些了,他的接口配置也比较多。LCD显示模块为夏普的1.28英寸128x128图形点阵液晶,型号为LS013B7DH03。 液晶的驱动使用SPI接口,占用PC02-SCLK,PC00-MOSI,PC06-CS,没有使用MISO,说明液晶为只写,不能回读。 液晶同时要求一个周期性变化的引脚EXTCOMIN,占用PA00,这个引脚可选通过软件直接控制周期性改变状态,也可以采用RTCC,利用PRS自动完成。 还有一个就是使能引脚,占用PC07,必须将该引脚置位高电平,才能让EFR32MG22具备LCD的控制权。 2. 工程创建 同前面工程创建过程基本相同,不同的是这次IDE支持的非常好,所以,我们想要看到的选项直接都出来了,赞一下。 创建工程的时候我们直接就选择最高版本的Gecko SDK V2.7版。下面就是按照提示创建就行了。 工程创建完成后,我们同样需要创建一个Simplicity ConfiguratorDocument。 打开硬件配置器,在“DefaultMode Peripherals”中选择需要添加的硬件设备,有些设备在我们对端口进行配置的时候他会自动添加上。 例如外设选择CMU,HAL选择Button,LED,SPI Display,其它不选。 选择后,右侧的DefaultMode->Peripherals下面就会出现我们刚才选择的外设和硬件接口层。 我们这里就说明一下SPI Display的配置过程,其它不做详细说明。 选择SPI Display 我们可以看到一些缺省的设置,如上图所示,我们需要配置其它的相关选项,保留Displaytype不动,这个就是我们的LCD型号。 配置完后,应该是这个样子的,这时候我们保存一下硬件配置文件。我们可以观察到,系统自动帮我们选择了USART0的外设,之前我们并没有选择。 同样我们也需要配置USART0,并且配置为SPI类型。 将SPI波特率更改为500K,实际LCD允许1.1M,我们也可以选择其它的波特率。 按照硬件原理图配置其它的SPI接口,保存硬件配置。 3. 软件配置说明 在开始软件程序开发前,我们需要先增加官方提供的硬件驱动库文件。在工程名上点击鼠标右键,选择属性,在选择Project Modules,我们需要选中HAL Config项下的SPIDISPLAY这一项。 点击OK后,系统自动为我们增加了几个支持目录,包括glib,kit-drivers,spidisplay。 编译中发现了一些找不到头文件的问题,解决如下。 编译错误提示1: 编译的时候,系统提示displayconfigapp.h文件没有,我们在提示信息下面可以看到具体路径,现在我们不使用它,但是驱动中需要这个文件,我们把它找到后,复制到当前工程中,具体路径为 SDK目录v2.7\util\silicon_labs\silabs_core\graphics下面 方便起见,直接复制SDK目录v2.7\hardware\kit\EFR32MG22_BRD4182A\config下,不用再添加路径支持了。 编译错误提示2: 找不到em_types.h文件。 通过查找,发现因为包含他的路径不在我们工程所搜路径内,我们添加就行。 具体路径为: SDK目录:v2.7\platform\middleware\glib 4. 软件测试 打开main.c文件 添加 #include "display.h" #include "glib.h" static GLIB_Context_tcontext; static const char *msg = "Hello GLIB!"; void setupGlib(void) { DMD_init(0); GLIB_contextInit(&context); GLIB_drawString(&context,msg, strlen(msg), 10, 10, true); DMD_updateDisplay(); } 然后编译,发现了超多的错误,这个主要是因为我们再emlib下面没有添加相应的库文件。我们只需要把emlib相应的C文件和H文件都复制到工程后,问题就可以解决了。 如果没有大问题,基本编译就通过了。 5. 演示 我这里实现了一个主循环扫描按键和小灯闪烁,并将按键扫描结果显示再LCD上的一个基本演示。
完成了LCD显示单元的测试内容。
|