本帖最后由 Litthins 于 2020-10-10 21:06 编辑
最近拿到LPC55S69-EVK开发板,打算做点有趣的东西,费尽心思想出了这个:
物趣系列
简单介绍下,物趣系列的最终目标是实现基于55S69的智能识别,猫猫狗狗之类的,能支持到多少种“物”,看具体进度。物趣系列技术路线:OV7670采集图像➡1.77寸TFT屏显示➡ESP8266上传服务器➡获取识别结果➡显示到TFT屏上。物趣系列将分三步走,
第一步,LPC55S69-EVK适配 ST7735 TFT屏,这个屏是SPI的,用的是手边上项目剩的料。本贴! 第二步,LPC55S69-EVK适配 OV7670 摄像头,把图像显示到TFT屏上。已更。 第三步,LPC55S69-EVK适配 ESP8266 WIFI模块,上传到自家服务器,识别物体,将返回结果显示到TFT屏上。已更
整个计划三帖更完,废话不多说,先更第一帖!
LPC55S69物趣系列之①:8分钟上手ST7735串口屏
手边上的TFT是1.77寸的SPI串口屏,FPC连接线,分辨率128*160,每秒刷3-4帧,稍微有点勉强,但紧巴紧巴还凑合。屏是之前项目剩的料,一包好多个,不利用起来也挺可惜。我这块屏唯独不太好的地方,它是2.8V供电,不知道你们手头的是不是3.3V的。最近比较忙,2.8V的电源不想做了,索性用个二极管串一下,0.4V的压降,干到2.9V,差不多得了。于是乎画了下面这个转接板。
这个屏是ST7735的SPI屏,除去SPI的MOSI和SCK,还需要复位信号RST、片选信号CS、指令|数据切换信号DC、背光信号LED等4个信号,这里用GPIO来实现。本人使用的是NXP的MCUXpresso IDE v11.2.0_4120集成开发环境,SDK已预先通过IDE安装完成,相关外围设备的初始化使用IDE自带的图形化配置界面Config Tools完成。
首先是建立一个新的LPC55S69 Project,这里直接建立一个空工程,不要从SDK里拉取示例。因为TFT是SPI接口的,记得在Components➡Drivers中勾选SPI。在Project Options➡SDK Debug Console中选择Semihost,这个“Semihost”把MCU打印信息和IDE的调试工具配合起来,是个很实用的工具,开箱即用无需配置。相比之下串口打印就显得生硬些。相关选项可参考下图。
新建工程后,使用图形化配置工具对工程进行配置,这款芯片的UART、I2C、SPI等外设都是通过FLEXCOMx统一管理的,这是很有个性的一点。本人用NXP的MCU较少,不知道在其它型号上是不是也是这样。这里用到GPIO和SPI。像我这样的新手可以先配置GPIO,学习读写。再上SPI,用逻辑分析仪看看波形。 这里SPI0设置好后,需要配置FLEXCOM0的时钟,并完成SPI0的初始化。由于只用到SPI0的MOSI和SCK,其它两条线用不到所以不用初始化,右下角的警告可忽略。GPIO选取PIO0_0,PIO0_13,PIO0_14,PIO1_31,这四个IO正好位于P19接口的最下方,方便记忆与连接。NXP的SPI好像可以直接控制CS信号,这里暂时还是用GPIO来实现,感兴趣的朋友可以自己试一下。相关配置可参考下图。
配置完成后记得点击“更新源代码”将更改应用到工程中,一定不要忘了。如果对自己的配置不放心,可以在驱动里找SPI的收发函数,测试一下。 这里提供一个我裁剪过的驱动,仅针对ST7735的128*160分辨率SPI串口屏适用。移植时实现GPIO引脚控制和SPI发送函数即可正常使用。适配后的代码如下: #define TFT177_LED_PORT 0U #define TFT177_LED_PIN 0U
#define TFT177_RST_PORT 1U #define TFT177_RST_PIN 31U
#define TFT177_CS_PORT 0U #define TFT177_CS_PIN 13U
#define TFT177_DC_PORT 0U #define TFT177_DC_PIN 14U
#define LCD_CS_CLR GPIO_PinWrite(GPIO, TFT177_CS_PORT, TFT177_CS_PIN, 0) #define LCD_CS_SET GPIO_PinWrite(GPIO, TFT177_CS_PORT, TFT177_CS_PIN, 1)
#define LCD_LED_CLR GPIO_PinWrite(GPIO, TFT177_LED_PORT, TFT177_LED_PIN, 1) #define LCD_LED_SET GPIO_PinWrite(GPIO, TFT177_LED_PORT, TFT177_LED_PIN, 0)
#define LCD_DC_CLR GPIO_PinWrite(GPIO, TFT177_DC_PORT, TFT177_DC_PIN, 0) #define LCD_DC_SET GPIO_PinWrite(GPIO, TFT177_DC_PORT, TFT177_DC_PIN, 1)
#define LCD_RST_CLR GPIO_PinWrite(GPIO, TFT177_RST_PORT, TFT177_RST_PIN, 0) #define LCD_RST_SET GPIO_PinWrite(GPIO, TFT177_RST_PORT, TFT177_RST_PIN, 1) void SPI_Write_Data_x8(uint8_t Data) {
spi_transfer_t xfer = { 0 }; xfer.dataSize = sizeof(rxBuff); xfer.configFlags = kSPI_FrameAssert;
SPI_MasterTransferBlocking(SPI0, &xfer);
|