×
单片机 > 单片机程序设计 > 详情

基于STM32单片机移植μcgui总结

发布时间:2020-05-30 发布时间:
|
        因为上一个题目的界面是自己一个一个点打到屏幕上去的,计算过程相当恶心,所以这两天赶紧弄了一下μCGUI,希望对后面的人机交互界面的设计有所帮助。

        说实话,我对于人机交互界面的设计真心没什么的灵感,上次赵颖老师就委婉的表达了这个意思,我也深刻的意识到了这个问题,就是设计的界面相当普通,没有给人一种眼前一亮的感觉。

        首先感谢队友王绥学给我提供的资料,因为自己电脑运行各种大型软件实在是太卡,所以这个暑假把女朋友电脑留下,不过资料都在另外一台电脑中,需要的资料就给队友要,十分的感谢啊!

        按照教程一步一步的做下来,前面几步关于GUI的参数设置没什么问题,无非是用到的功能将其参数置1,用不到的功能将其参数置0,但是在最后一步中,就是将自己的LCD底层驱动与μCGUI连接起来,这里出现了问题,开始的时候编译总是出错,耗费了我一个上午的时间啊,以为是新版本的keil不兼容造成的,然后从4.72版本直接降至3.8版本,可是又出现了同样的问题,各种变量的undefined。下午到了实验室,开始认真的阅读排查代码,然后终于一句话让我眼前一亮:#ifndef LCD_H……(各种参数定义) #endif。因为我自己的驱动文件中定义了一个LCD_H,所以造成上面的一部分代码在编译的时候就跳过没有编译,才造成了各种参数的未定义,删除了LCD_H还有LCD_W之后,果断的通过了编译,然后下载之后在屏幕上看到了显示的内容。

        接下来就是优化代码,因为μCGUI是一个通用的图形软件库,所以也就再所难免它还有可优化的地方,尤其是刷屏的速度上,如果是整屏刷新的话,可以很明显的看出来进度,很慢。首先,是把自己驱动的TFT_Point()函数的代码直接复制到μCGUI的画点函数中,因为如果是在μCGUI的画点函数中调用TFT_Point()的话,每一个点都会有一个入栈和出栈的时间浪费,降低了屏幕的刷新速度,同样的道理,把自己的读点的驱动函数代码也直接复制过去,还有就是GUI_Fill之类的函数,因为这些函数是整块整块的在刷屏,但是μCGUI是一个点调用一个画点函数,这样每个点都要写相关的命令和坐标,很低效。直接把自己的代码中的Fill相关的代码复制过去,写好起始坐标之后,就开始向屏幕的RAM中直接送数据,至于坐标的加1是屏幕的控制器自动完成的,这样也节省了时间,完成了这些优化之后可以看到刷屏速度有了不少的提高。我用的是STM32F103RBT6作为主控芯片,它的最高主频是72M,是通过外部的8M经过锁相环9倍频达到的,我把它12倍频超频运行之后,可以看出刷屏速度有了相当明显的提高,所以,芯片的主频也是制约刷屏速度的重要因素,ARM M系列的芯片重要用于控制,而应用型的ARM A系列的主频可以达到更高,玩起屏幕应该会更爽,而这个系列的芯片应该才是大家所熟悉的ARM。

        另外一个制约因素,FLASH的大小,我的单片机只有128Kb的FLASH,一般来说这已经相当大了,但是今天显示位图的时候,先直接转换的时候,超过FLASH大小,然后把图片缩小到50%,然后还是没有编译通过,接着再缩小50%,编译通过,显示正常,虽然FLASH可以外部扩展,但是对于低主频的控制芯片来说,刷屏速度本来就已经够慢的了,还要花时间去读取外部的FLASH,然后再显示,那种速度就可想而知了,前阵子申请到的STM32F407的芯片,是基于ARM Conterx M4的内核,里面自带了1M的FLASH,这个就相当牛逼了,玩起来GUI应该很爽,而且主频可以最高168M,比F103RBT6的两倍还要高,刷屏速度应该可以得到很大的提升,效果应该会更好。

        前两天在正点原子的店里看到了一个7寸的电容屏,和我的单片机接口可以匹配的上,不过暂时没有买的打算,第一没有那么多资金,要300多,第二,我的单片机主频有点低,玩大屏效果肯定很不爽,带大屏就要高频的高级货才行,等到从老师那里拿到TQ2440的板子之后玩玩ARM,这个的主频到时候带屏幕应该不成问题了。

        目前只看到了第7章,接着看,重头戏还在后面。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR熔丝位操作时的要点和需要注意的相关事项