OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6841|回复: 7

软磨硬泡上LVGL,心得分享

[复制链接]

35

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2016-10-12
在线时间
53 小时
发表于 2022-9-6 13:43:28 | 显示全部楼层 |阅读模式
剧透:本文不会介绍LVGL的移植过程,只是在移植中的“小事故”分享。
一、起因
        之前,在应用中想用界面,都是自己写,你可以想像,一个按钮、一个菜单……,这些实现起来有多复杂,所以,我被人骂了,有现成的图形系统,你干嘛要自己造轮子呢?想想也是,那就干吧。
        先说说我的硬件:我有F407、H743、H750三块板子,H750是朋友给我焊的小板,用的LCD是480*800的5110的MCU屏,带电容触摸板。
b3d9a69e1675e7afec99795519336f2.jpg 7fa53bab65a8732b7faafc1a2440c5a.jpg dad3d309d3dc33486be6be5053716e7.jpg
        我先是在F407的小板子上移植,经过多次的移植,略有小成,感觉对LVGL有点小入门了。这里要说明一下,LVGL7开始,需要使用AC6编译器,所以,一开始我是移植LVGL6,后来把编译器升到AC6,又移植了L7和L8。AC6的升级也是一段心酸史,之前的模板也用不成,又重新去找……,总之也很折腾。
        不知道是不是强迫症,我觉得无数次的烧写,对芯片不利,其实,官称10万次的烧写,就算只有3万次,一天烧50次,也可以烧近两年,但我总觉得不爽,所以,一个奇怪的想法产生:只烧一个BootLoad程序,然后用串口将程序发到Sram,跳转执行。
        先从F407开始搞,它的Sram是128K的一片、64K的一片,就只能将程序放到128K这一片上,那么问题来了,LVGL7的程序,只画一个BUTTON,也达到130K,只能玩LVGL6,烧一个复杂的DEMO,也就是70K左右,但界面有点粗糙,跟不上咱们“日益增长的审美需求”,所以,把目标转向H750的小板子。
        H750,ROM只有128K,而内存很大,有512K的一片连续内存,可用来放APP,还有一片288K的连续内存,可用来作为程序内存使用,非常不错,噩梦也就从这里开始了……
二、噩梦
        H系列没有标库,只能用HAL库,开始堆代码,搞完后,发现屏没点亮,找原因,原来H7需要处理MPU(内存保护),不然不会亮。加上MPU代码,终于亮了,这里插一句,我个人觉得ST公司搞这个MPU,有点“画蛇添足”的感觉,用处不大,麻烦事挺多。
        既然亮屏了,那就开始移植LVGL8了,移完后,果然亮了,但出了个奇怪的现象,图像能显示,但只要有点动画,那部份就飞了(花屏了,还只花动画那部份),怎么也想不明白,一直认为是MPU哪里没搞对,检查了一天,无果,后来怀疑是H7的Cache机制有问题(MPU和Cache在F4就有,但可以不管),又检查一天,还是无果,只能虚心向高人请教:上百度、群聊请教、搜贴,又是三天无果,这种“如埂在喉”的感觉,让人寝食难安(码侬是不是都这样?)。
lvgl2.jpg
        终于在原子的论坛里,找到一个台湾人写的STM32H743移植LVGL的代码,下载下来,还真能运行,因为硬件和我的小板不一样,改了两个小时,烧上,居然亮了,没花屏,顿时感觉找到了曙光。那就使用“替换”法,一个模块一个模块的去替换,大约折腾了两个晚上,终于找到问题啦,是LCD_Color_Fill()这个函数出了问题,LVGL调用时,给的坐标是两个点的坐标,而LCD驱动里的LCD_SetWindow(),要的参数不是两个点,而是一个起点和width、height。这两个逻辑产生的问题。
        但是,问题来了,如果这个逻辑出错,为啥大部份的图像都没问题?按理应该出来的图像是花的呀,但非常清晰……不管啦,往下走。
        终于看到移植成功的图像啦,没花屏,很是享受,Demo的第二个显示页,还有几个类似时钟的元件,还在不停的转……咦?怎么转几圈就不动了?
三、软磨硬泡
        如果不进动画,不会死机,但一进动画,转几圈就死机了,第一个想到的问题,是栈溢出,那就开始调整参数,一顿搞,还是一样,还是会死机。
        怀疑代码有问题,就把这个程序移给H743的原子板,修改完硬件引脚,一次点亮,未死机,那还是板的问题。
        怪了,我用的都是芯片的内存,不会是内存有问题吧?又写了段代码,搞了一个特大数组,几乎把288K的内存用完,写数据、读出来,都是对的,那内存也没问题,又一次陷入深思……
        因为H750是自己做的板,所以,也想到了检查板子的硬件是否正常。LCD是能显示的,所以这30来个脚,是没问题的,电源部份量了一下,也是对的,那还会是啥原因了?BOOT脚和RESET脚,都检查了线路和电平,都是正常,这样又虐了几天,无果。
        又分析了一下,动画显示死机,平时不死,会不会和内存高频读写有关?那哪个电路会影响到它呢?想来想去,把怀疑重点锁定到两个VCap引脚,这是内部电路退耦引脚,外接一个2.2uf电容,用万用表检查,是否有短路或是断路,还是没有,怪了。
        突然有一个发现,这两个电容为啥是黑色的?按理,贴片大部份是黄或是褐色的,黑色的是电阻嘛,马上烧起了烙铁,在它预热的过程中,找了两个2.2uF的贴片电容,然后一阵冒烟的操作,换上了电容。
        写进程序,正常,有显示,进入动画,在动,焦急的等了10秒,还在动,1分钟,还在动,5分钟……,居然没死机了。
b83f8e32ccfc96bd45ec288a7f22db5.jpg f884b42cd6e4601442a65da8464e2bb.jpg
        啊,问题终于解决了,大至算了一下,从LVGL6到LVGL8,所有的移植次数,已经过50次了,是的,你没听错,是50多次……
       


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

35

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2016-10-12
在线时间
53 小时
 楼主| 发表于 2022-9-6 13:45:20 | 显示全部楼层
过几天有时间,我会把那个lcd_color_fill参数错误还能显示对的问题,给大家交待一下。
回复 支持 反对

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10560
金钱
10560
注册时间
2017-2-18
在线时间
1911 小时
发表于 2022-9-6 21:18:09 | 显示全部楼层
这种精神,牛逼【表情】
回复 支持 反对

使用道具 举报

6

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2017-3-1
在线时间
33 小时
发表于 2022-9-7 09:24:21 | 显示全部楼层
码农就是不断的跳坑填坑啊
回复 支持 反对

使用道具 举报

17

主题

161

帖子

0

精华

高级会员

Rank: 4

积分
955
金钱
955
注册时间
2022-7-21
在线时间
446 小时
发表于 2022-9-7 11:50:38 | 显示全部楼层
太强了值得学习
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2022-10-2
在线时间
12 小时
发表于 2023-2-22 19:42:55 | 显示全部楼层
太强了,大佬
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2022-3-10
在线时间
4 小时
发表于 2023-5-11 18:52:34 | 显示全部楼层
我用H743跟着视频教程移植LVGL8.2的时候也出现了相似的问题,我的现象是:自己添加的switch控件可以正常使用,但是跑压力测试的Demo时会花屏卡死(进了硬件错误中断),后面参考原子哥的F407的LVGL例程解决了,我的问题是分配的栈空间太小了,使用的是默认的0x00000200字节,我把栈空间设置为0x00000800后就正常运行了,我看F407例程设置的是0x0x00001000,我试着把栈空间设为0x00000400,程序运行了一下就卡死了。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2023-5-12
在线时间
0 小时
发表于 2023-5-18 09:47:58 | 显示全部楼层
請問一下 台湾人写的STM32H743移植LVGL的代码 這個代碼哪邊可以下載?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 14:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表