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步:
- 声明头文件
- 声明源文件
- 声明库文件
添加下面这段代码到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


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作为一个编译器。至此,本篇文章到这里就结束了。由于知识水平有限,折腾这玩意还折腾了挺久了,不过感觉折腾的过程还是挺有趣的。希望这篇文章可以帮助到你们。
本文介绍如何使用STM32CubeMX和CLion在SW4STM32环境下移植STemWin图形库,包括配置开发环境、驱动TFT-LCD屏幕、使能FPU及DSP库、移植STemWin并适配触摸屏。
1086





