|
本帖最后由 wenyangzeng 于 2018-7-10 20:20 编辑 CubeMX配置STM32F769I GUI过程出现的BUG及解决方法 7 K0 D; C! }, q' S5 L ( ^4 H1 }2 u# J" B" B7 a 按照帖子介绍的方法,很快就配置完成了STM32F769I Discvoery的GUI工程。可能所用的CubeMX4.26.0版本与版主的不同,编译下载后运行结果如图1,图像显示不正常。
图1 : T: q: G( Q8 e. N) z4 v这个demo背景色是黑色,从图中可以看到H方向水平扫描大概只扫描了屏幕的一半400DPI,好像是从下往上扫描而不是从左往右扫描。右边的彩条是复位时留下了的。 6 O7 A. \. S& I0 o1 p针对400DPI进行分析 步骤1: 尝试将MX_LCD_Init()函数中的 hltdc.Init.AccumulatedActiveW=402改成802, hltdc.Init.TotalWidth=403改成 803;参见图6 6 A9 P9 h) h9 b: F% f+ l9 W0 |5 w I编译运行后结果如下图2: + I) V, @+ C- [ D& c$ H! r( k
图2 H方向拉长了,W方向没有改变,问题还是没有解决。 步骤2: 回到CubeMX。
图3 , u! o% c1 P- b. n6 Y$ E7 H* Z: ^1 Z' s1 |2 B, y+ {: B* ?" X 修改CubeMX中LTDC Parameter参数配置将Activa width的400修改成800:
图4 3 x' O& z/ Q0 q) i) X$ C2 [2 E重新生成工程,编译下载运行,结果见图5:
图5 3 M# I& D* B" x2 h5 U& y+ O# RW方向扫描正常了,但H垂直方向坐标明显有误。 % v( ^+ w/ L" r( J; |' y 先小结一下: 为什么在MDK中直接修改函数参数Activa width(步骤1),改变W方向扫描无效? 而在CubeMX中(步骤2)修改Activa width生成新工程有效,改变W方向扫描有效,但H方向坐标出错? 判断:可能是CubeMX的一个BUG。大概从CubeMX中更新工程时不只更新了MX_LCD_Init()函数的内容,应该还有某个文件也更新了,但更新对象错了,可能是W坐标数据更新到H坐标数据去了。 [7 \8 C( ?: X, h% ?6 g- ?这个BUG只能靠ST专家来解决了,我们只能用修补的办法来应急使用: 既然我们从CubeMX中(步骤2)修改了ActiveWidth=800,W方向扫描就正常了,H方向扫描却错误了。 而我们在步骤1修改的:hltdc.Init.AccumulatedActiveW 和 hltdc.Init.TotalWidth 的参数可以影响H方向。 * M) _5 z! B$ z4 W! a& D/ r修改步骤(2步) 1、先在CubeMX中修改:Activa width=800,(图4) 生成新工程(一定要生成新工程!!)。 2、然后在MDK下修改修改MX_LCD_Init() 6 m! W6 p- e) Y+ t5 ]& ` hltdc.Init.AccumulatedActiveW = 402; //(原802) hltdc.Init.TotalWidth = 403; //(原803) . V4 W% B! ~, x图6改成图7的参数: + w, ?' z: @9 y6 H
图6 ; ~- W" y& \5 I* l# v' X
图7 ! H S; s+ b$ j编译、下载、运行: 8 s ]' `: w6 W$ P- K( |, D3 OOK!
图8 使用不同版本CubeMX的朋友也要试试哦! : R+ q2 A" k+ w9 H- v& j. _ 0 a1 v/ j* B9 v8 M2 `5 a) P5 }4 P * a2 e/ }( K: `. ?# X3 p |
基于STM32F767通过cube配置:QSPI接口读写64M PSRAM+flash参考资料...
STM32F746G-DISCO移植lvgl9.0性能基准测试
直播:低成本打造高体验:STM32 GUI 图形方案直播来袭,带你解锁嵌入式界面开发新思路
STM32F745 USART1 Bootloader启动失败排查与解决的流程分析
STM32芯片命名规则
STM32 引脚到底有多少?为什么一个引脚能当好几个用?
入门嵌入式,为什么STM32是“优选起步”?
嵌入式-单片机-STM32 EXTI中断
STM32单片机进行除零运算,为何程序不崩溃?
STM32 LL为什么比HAL高效?
微信公众号
手机版
你图3 原本就是402、403,按照图4修改为802、803后,7 J; m& ~. D" W' ?: b
后来又按照图6、图7修改会402、403( `1 {! B1 Y: k) A% c! d
这怎么在围绕打转呢?这个402、403修改来修改去,
; s8 G" p( w! E' \$ \4 B
其实你没说到问题的重点,看我原贴后边的 补充说明3 x+ w' X# S. z; k
针对图一,最终还是
OTM8009A_ORIENTATION_PORTRAIT 和 OTM8009A_ORIENTATION_LANDSCAPE 的问题 a8 q2 q( }) B
3 S" J+ [# }+ `4 g2 A! x
应该是某些参数没设置对造成,不过我看你的内容,之前不就是402、403?
8 N/ B# c: d& h8 ?- e S' d
r2 f& ~. Z, M5 }! K- H
我的CubeMX与你的事一样的。 4.26
Active=400时,底下2个是402、403 ,显示不正常
Active=800时是802,803
我是说“图6改成图7的参数”这里
这不是也配置成为:402、403 . [4 E$ V5 n1 |2 E3 D
CubeMX按照图4修改后生成新的工程,图4 里的802、803在MDK里显示在图6的参数中,不改成图7就显示图5的图像了。
版主没有理解我的思路,那个402、403必须是在cubeMX里修改Active=800,得到802和803.生成工程后,在MDK里改回402和403.没有打转。cubeMX里不修改,没有生成新工程,在MDK里改没有用的。
; y N& A# I) H. f1 g! q
对比一下active=800 和active=400 其他代码呢?看看生成的代码还有什么差别~
只要过程中某一步参数没有设置好,后面就很麻烦了。1楼链接的版主的那篇帖子很具体,可以按照贴中方法进行。
是的,我也出现了相同问题,感觉就是方向错了,找了半天没找到地方, 最后搜索关键字找到了& }' V C# y" O- ^( m
初始化成了:
OTM8009A_Init(OTM8009A_FORMAT, OTM8009A_ORIENTATION_PORTRAIT);. Q8 t. F7 W T
/ X3 f1 }& R6 Q* ^0 q
OTM8009A_ORIENTATION_PORTRAIT 指竖屏模式 显示人像方向
OTM8009A_ORIENTATION_LANDSCAPE 横屏模式, 显示风景方向