这几天研究了一下LPC55S69开发板的tf读写,以及图片文件的读出显示在lcd功能。tf卡工程直接从官方SDK的示例代码里面挖出来的,使用的keil工程。重新排版了文件,编译测试过程过程很顺利。由于使用keil的pack包里面的CMSIS功能,所以项目内SDK的cmsis文件就不需要添加了。如果不去掉SDK内关于CMSIS的文件,编译会出现重定义错误。
初始SDK内测试tf卡例子跑成功后,后面准备添加LCD驱动。lcd使用的是并口8位数据接口屏,直接插在arduino接口上的。主要添加LCD屏的io初始化部分。在pin_mux.c中的void BOARD_InitPins(void)里面添加lcd的使用IO的初始化。LCD用的IO比较多,幸好tf卡用的IO和LCD用的IO没有重复,要不然就麻烦些了。LCD的驱动是写好的,直接拿过来用上就行。
添加LCD驱动后,然后再测试LCD屏是否正常。屏幕正常后,下一步准备添加jpg的解码库。这个jpg解码库使用的是tjpgd解码库。这个解码库是从RT-Thread的软件包里面找来的。
TJpgDec(Tiny JPEG Decompressor)是针对嵌入式系统高度优化的轻量级通用 JPEG 图像解码器,具有易于使用、资源占用小、方便移植等优点,广泛应用在各种资源受限的微处理器上,本软件包是 TJpgDec 的 RTT 移植版本。
解码库地址:https://github.com/RT-Thread-packages/TJpgDec
本次用的jpg解码库也相应做了些修改来适配。主要在tjpgd_port.c中。因为使用了malloc和free内存操作,所以需要设置堆和栈内存空间的。
中间也出现了一些问题,不过幸好都解决了。主要开始设置的堆栈空间不够,导致程序HardFaults了。开始不知道是出现啥问题了,老是显示图片突然死机了。单步调试后,后面才发现是进入HardFault了。
HardFaults一般主要是内存越界,堆栈溢出,内存非对齐访问问题。所以重点检查了堆栈设置。
开始就是没注意有2个地方设置了栈空间,加大了栈空间后就正常了,堆空间和栈空间都加大了,防止空间不够。TJpgDec解码最少需要3K多的堆空间用于内部内存分配。
最终实现了jpg图片文件的显示。后面准备BMP图片文件解码的,bmp解码还未完善。
原图:
显示效果图:
最后是整个工程代码:
lpc55s69_sd_fatfs_lcd.rar (5.6 MB)