[应用笔记] KF32A152 LVGL移植

[复制链接]
162|3
手机看帖
扫描二维码
随时随地手机跟帖
mzy2364|  楼主 | 2022-6-13 22:16 | 显示全部楼层 |阅读模式
本帖最后由 mzy2364 于 2022-6-13 22:16 编辑

lvgl 是一个免费的开放源代码图形库, 它提供创建嵌入式 GUI 所需的一切, 它具有易于使用的图形元素, 精美的视觉效果和低内存占用。强大的构建块按钮, 图表,列表, 滑块, 图像等, 带有动画, 抗锯齿, 不透明度, 平滑滚动的高级图形, 各种输入设备的触摸板, 鼠标, 键盘, 编码器等, 多显示器支持, 即同时使用更多的 TFT 和单色显示器, 支持 UTF-8 编码的多语言, 完全可定制的图形元素。独立于任何微控制器或显示器使用的硬件, 可扩展以使用较少的内存(80kB 闪存, 12 kB RAM) , 支持操作系统, 外部存储器和 GPU, 但不是必需的, 即使使用单帧缓冲区操作, 也具有高级图形效果。用 C 语言编写, 以实现最大的兼容性(与 C ++兼容) , 模拟器可在没有嵌入式硬件的 PC 上启动嵌入式 GUI 设计, 快速 GUI 设计的教程, 示例, 主题, 在线和离线文档, 在 MIT 许可下免费和开源。因为项目需要用到一个显示屏展示运行信息,所以采用KF32A152单片机加SPI屏实现一个GUI界面,屏幕是中景园的1.54寸240*240的屏。
KF32A152单片机标称频率是120M,实际上可以跑到96MHz,再网上就会出问题,SPI的时钟来自系统主频的四分频,然后SPI内部最低还要二分频一次,所以SPI时钟最大是12MHz,不算快,但是刷屏240*240的屏还是可以实现,具体效果也还不错。
lvgl目前已经更新到8.3版本,尝试过将8.3版本移植到KF32A152上面,但是不现实,在移植的过程中发现kf-gcc里面的标准库不支持snprintf等函数,所以移植一个lvgl 5的版本,实测可行。
移植重点:
需要使用SPI的DMA模式来刷屏,配合lvgl的双缓冲刷屏模式。
SPI支持8位和16位,在向屏幕写命令的时候,要使用SPI的8位模式,在写数据的时候,可以使用16位模式,这样刷屏效率会更高。
lvgl需要选择双缓冲机制,这样才能有更好的刷屏体验,具体思路就是定义两个n行大的buf,比如240*240的屏,一行就是240*2字节的大小,当需要刷屏的时候,先刷写到RAM的buf1,然后向屏幕发送写数据命令,然后利用DMA将数据刷到显示屏,DMA采用中断模式,这时候不占用CPU时间,CPU再将数据刷写到buf2,当DMA产生中断后通知lvgl,lvgl再将buf2的数据通过DMA刷写到屏幕,如此循环,实现了刷屏过程中cpu可以渲染的目的。
初始化的DMA的时候,不配置存储器地址和数据大小,也不开启DMA,配置下其他参数和SPI_TX的地址即可。
在初始化SPI的时候,newStruct_SPI.m_BaudRate = 0;这样可以获得最快的SPI速度。
KF32A152_LVGL.zip (4.24 MB)

使用特权

评论回复
yangxiaor520| | 2022-6-14 08:14 | 显示全部楼层
LVGL确实不错

使用特权

评论回复
lvben5d| | 2022-6-14 10:02 | 显示全部楼层
楼主  上图看看呀,把开发过程描述下? 比如开是加库进工程, 哪个库文件需要配置之类的  

使用特权

评论回复
mzy2364|  楼主 | 2022-6-14 20:36 | 显示全部楼层
整个过程还是比较麻烦的,直接上个教程吧,帖子里面就描述了功夫单片机的注意事项
开源GUI LittlevGL应用教程.pdf (7.39 MB)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则