2020年的时候,有个项目想用stm32f407来做,参考下面这个贴移植RT-Thread到stm32f407开发板上,期间还接触了env来配置RT-Thread组件,添加lwip、spi flash、SD、fs支持等,添加以太网驱动的时候还碰到不少问题,当时参考网上的贴都一一解决了,可是当时没写博客,导致现在只有书签和git提交记录可供参考(见下面分享)
--------------------------------------------------------------------------------------------------------------------------------------------------
最近对LVGL感兴趣,于是打算在原来的基础上接着搞,实现RT-Thread+lwip+LVGL。这时百度发现不少开发者开始使用RT-Thread Studio IDE了,看了一下,把env和stm32CubeMX都集成进去了,比以前用起来要方便多了。目前主要参考
(STM32)从零开始的RT-Thread之旅这系列的贴在做,下面记录一下使用RT-Thread Studio开发和直接使用rt-thread的git工程开发有什么不同。
1、RT-Thread Studio生成的代码结构变了,把rt-thread相关的东西(kernel、cpu、components)统一放在了rt-thread目录,另外IDE会根据选定的芯片型号来生成对应的代码,比以前git工程一堆其它芯片和板卡的无关代码全列出来要好多了,起码在代码搜索方面要快
2、移植方面,在结合Cubemx使用上(比如RCC配置部分)发生了些变化,还得自己写SConscript文件,详细见下面两个贴
IDE会做两处修改:
1)修改自身的“clk_init”函数,改成调用Cubemx生成的SystemClock_Config函数,因为__WEAK的原因,可以直接包含Cubemx生成的main.c和stm32f4xx_hal_msp.c来用(连带对应的头文件),不过需要编写SConscript文件把文件纳入工程中(一定要记得加入脚本后在脚本上右键->同步scons 配置至项目)。
2)把自身的drivers目录下的stm32f4xx_hal_conf.h改成stm32f4xx_hal_conf_bak.h,采用上面Cubemx生成并包含进来的stm32f4xx_hal_conf.h
3、bsp移植方面,RT-Thread Studio把原来的board.c移植到了drivers目录下,和其它drv_xx放在了一起,用于完成板卡相关的配置(比如时钟、外设等,比如前面介绍的clk_init),board.h里面注释有介绍移植技巧,下面以网卡驱动为例进行解释
board.h里面对网卡驱动移植提出了6个步骤,理论上按照提示操作即可,可是步骤2描述有误,HAL_ETH_MspInit(由Cubemx生成的stm32f4xx_hal_msp.c提供)不需要在board.c里面显式的调用,因为drv_eth.c里面注册网卡驱动的时候会调用HAL_ETH_Init(由libraries\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_eth.c提供),而HAL_ETH_Init会自动调用HAL_ETH_MspInit完成网卡相关的gpio、clk等设置,类似的RCC里面SystemClock_Config配置时钟,也会对应的配置相关的gpio一样。
网卡驱动依赖phy_reset来复位phy芯片,对应的gpio操作是bsp相关的,需要自己根据硬件情况进行添加,我参考以前git工程的做法,增加board目录用于存放此类操作(在里面完成gpio的配置和复位操作)
4、开始添加lvgl支持了,这里面有个插曲,就是我一开始选用的rt-thread版本是v3.1.5,结果提示版本不匹配添加不了,百度后发现为了方便移植,rt-thread和lvgl社区互相做了适配,结果就是建议你使用rt-thread 4.1.1版本对接lvgl 8.3。
--------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------
我使用RT-Thread Studio升级rt-thread版本为4.1.1碰到些怪问题,后面重新弄了个工程来解决,算是温习了一遍。
D:\RT-ThreadStudio\workspace\stm32f407-lx-ve\Debug/../packages/LVGL-v8.3.9/src/misc/lv_printf.c:866: multiple definition of `rt_snprintf'
./rt-thread/src/kservice.o:D:\RT-ThreadStudio\workspace\stm32f407-lx-ve\Debug/../rt-thread/src/kservice.c:1161: first defined here
collect2.exe: error: ld returned 1 exit status
make: *** [makefile:126: rtthread.elf] Error 1
搜索后发现lv_conf.h和lv_rt_thread_conf.h有多个重复的宏定义,我的理解lv_rt_thread_conf.h应该就是rt-thread针对lvgl所做的一些适配(还有lv_rt_thread_port.c)。之前需要开发者自己修改lv_conf.h文件,现在rt_thread已经把要适配的地方都给你在lv_rt_thread_conf.h上实现了,编译的时候会提示redefine的问题,需要根据提示把重复定义的宏从lv_conf.h上注释掉(重要!!!)。
再者就是lv_port_disp.c中lv_disp_draw_buf的初始化,如果采用第3种方案的话,要掂量一下mcu的ram空间是否足够~
posted on 2023-08-23 12:30
lfc 阅读(134)
评论(0) 编辑 收藏 引用