STM32CubeMX生成代码在SW4STM32下移植STemWin(CLion+CubeMX)

本文介绍如何使用STM32CubeMX和CLion在SW4STM32环境下移植STemWin图形库,包括配置开发环境、驱动TFT-LCD屏幕、使能FPU及DSP库、移植STemWin并适配触摸屏。

STM32CubeMX生成代码在SW4STM32下移植STemWin(CLion+CubeMX)

0.软硬件环境

硬件:

​ 主控芯片:STM32F407ZGTx

​ LCD:正点原子4.3寸TFT-LCD(MCU屏)

软件:

​ STM32CubeMX

​ CLion

1.配置CLion用于STM32开发

参考:https://zhuanlan.zhihu.com/p/145801160

2.使用硬件FSMC驱动TFT-LCD屏幕(MCU屏,NT35510控制器)

参考:https://blog.youkuaiyun.com/Mculover666/article/details/108361830

此配置是fsmc时序最快的,如果不稳定可以加大1到2。

lcd驱动移植了正点原子的驱动函数。

void TFTLCD_Init(void) 函数中,由于FSMC已经配置好了,直接去掉就可以了。
在这里插入图片描述

3.使能FPU与添加DSP库

a.使能FPU

打开system_stm32f4xx.c文件,找到SystemInit函数,看到此时FPU未打开。
在这里插入图片描述
打开工程中的CMakeLists.txt,看到这个地方默认注释掉了,取消注释就可以打开FPU了,reload一下回到SystemInit函数就可以看到那句话变亮了。
在这里插入图片描述
在这里插入图片描述

b.添加DSP库

cubemx下可以看到使用的库的路径,顺着路径可以找到Drivers/CMSIS。在生成工程时只生成了必要的文件,因此在这里复制DSP,Lib这两个文件夹到工程中的Drivers/CMSIS中。
在这里插入图片描述
在这里插入图片描述
所有这些 DSP 库代码合在一起是比较多的,因此,ST 为我们提了.a格式的文件,方便使用。这些.a 文件就是由 Source 文件夹下的源码编译生成的,如果想看某个函数的源码,大家可以在 Source 文件夹下面查找。.a 格式文件位于:/Driver/CMSIS/LIB/GCC
总共有2个.a 文件,如下:
① libarm_cortexM4l_math.a (Cortex-M4 小端模式)
② libarm_cortexM4lf_math.a (浮点 Cortex-M4 小端模式)
我们得根据所用 MCU 内核类型以及端模式来选择符合要求的.a 文件,我们选用libarm_cortexM4lf_math.a(浮点 Cortex-M4 小端模式)。

因此DSP文件夹下只需要保留头文件include/arm_math.h就可以了。

如下:
在这里插入图片描述

c.添加路径

gcc编译器是通过cmake进行编译的。CLion编译这些文件,关键是要配置好CMakeLists.txt。我们需要完成下面3步:

  1. 声明头文件
  2. 声明源文件
  3. 声明库文件

添加下面这段代码到CMakeLists.txt中,注意:需要放在add_executable这个操作前面。

#DSP
include_directories(Drivers/CMSIS/DSP/Include)
link_directories(Drivers/CMSIS/Lib/GCC)
link_libraries(libarm_cortexM4lf_math.a)

在这里插入图片描述

4.移植STemWin(不带OS)

a.使能CRC校验

没有使能CRC的话,STemWin是不能正常使用的。
在这里插入图片描述

b.添加STemWin文件

还是在之前的库文件中,找到Middlewares\ST\STemWin文件夹。
在这里插入图片描述
复制到工程中保留文件如下,Config文件夹下需要新建一个LCDConf.h文件,不需要写任何代码,不然编译会提示找不到LCDConf.h文件。inc文件夹全部复制过来就行。因为是裸机移植,OS文件夹只需要保留GUI_X.c即可。 Lib文件夹只需要保留STemWin_CM4_wc32.a
cmake第三方链接库要求lib开头,因此修改其文件名在其前面加上lib,最终是libSTemWin_CM4_wc32.a,否则在cmake时会找不到库文件!
在这里插入图片描述
在这里插入图片描述

为什么选STemWin_CM4_wc32.a
在这里插入图片描述
img
STemWin V5.44a 中的库文件全部变为.a 格式,文件名中不再直接写出编译器的类型,而是使用 wc16 和 wc32 区分不同的编译器, 标有 wc16 的可用于 EWARM7(IAR for ARM) 和 Keil 5,标有 wc32 的可用于 EWARM8(IAR for ARM) 和 SW4STM32(GCC)

c.添加路径

跟添加DSP库的路径一样,添加下面这段代码。

#STemWin
include_directories(STemWin_544/Config STemWin_544/inc)
link_directories(STemWin_544/Lib)
link_libraries(libSTemWin_CM4_wc32.a)

修改一下file( ),把STemWin_544文件夹下的源文件包含进来。

file(GLOB_RECURSE SOURCES "startup/*.*" "Drivers/*.*" "Src/*.*" "STemWin_544/*.*")

d.修改工程文件

这些操作与正点原子所给的教程几乎一致,不再细说。说明一下改动的地方。

GUIConf.c文件

由于没有成功移植正点原子的malloc函数库。因此在这里就去掉了外部SRAM的使用。后期我会再加上SRAM。使用硬件FSMC读写SRAM可以参考:https://blog.youkuaiyun.com/Mculover666/article/details/108355554

GUIConf.c修改后文件内容如下

#include "GUI.h"

/*********************************************************************
*
*       Defines
*
**********************************************************************
*/
//
// Define the available number of bytes available for the GUI
//
#define GUI_NUMBYTES  (100*1024)         //设置EMWIN内存大小
#define GUI_BLOCKSIZE 0x80              //块大小

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       GUI_X_Config
*
* Purpose:
*   Called during the initialization process in order to set up the
*   available memory for the GUI.
*/
void GUI_X_Config(void) {
    //
    // 32 bit aligned memory area
    //
    static U32 aMemory[GUI_NUMBYTES / 4];
    //
    // Assign memory to emWin
    //
    GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);

    GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);
    //
    // Set default font
    //
    GUI_SetDefaultFont(GUI_FONT_6X8);
}

e.移植触摸屏

这些操作按照正点原子的移植,耐心点就基本没问题。
需要加入OS的话可以在STM32CubeMX中选中FreeRTOS,在这里就不再详说了。

5.总结

最后利用GUI Builder简单做了个效果出来。至于内部如何实现的不是这篇讲的重点,emwin的一些使用还是需要学习的。做成的效果如下图所示。
在这里插入图片描述
做这个的意义基本上也是为自己参加电赛提供一个模板,只不过mdk实在太丑了,体验感极差,当然也可以用其他颜值高的编辑器而把mdk作为一个编译器。至此,本篇文章到这里就结束了。由于知识水平有限,折腾这玩意还折腾了挺久了,不过感觉折腾的过程还是挺有趣的。希望这篇文章可以帮助到你们。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值