
RT-THREAD 中国的操作系统,还算对STM32友好, 稍微调试了下终于把攻略做出来了, 目前github上还没有l496zg-nucleo的工程,正好手上有一块板子,做起来。 在操作系统上点亮一个小灯,应该比较简单。 http://github.com/RT-Thread/rt-thread github上地址: 先把文档稍微看一遍: http://github.com/RT-Thread/rt-thread/blob/master/bsp/stm32/docs/STM32%E7%B3%BB%E5%88%97BSP%E5%88%B6%E4%BD%9C%E6%95%99%E7%A8%8B.md 按照文档基本可以开始实际操作了: 文档中第一步 ![]() ![]() 我们来新建一个文件,从stm32l4xx拷贝出来 ![]() 第二步: 进到目录board\CubeMX_Config 在制作 BSP 的第二步,需要创建一个基于目标芯片的 CubeMX 工程。默认的 CubeMX 工程在 CubeMX_Config 文件夹中,双击打开 CubeMX_Config.ioc 工程,如下图所示: ![]() 对板子做相应的配置 1. CPU要选一下吧,选择L496ZGTX 2. RCC要选对,这边我这板子选择如下: ![]() 这部分比较重要,要对自己板子比较熟悉才行。 如果实在不知道怎么配置,NUCLEO还提供了选择板载的配置(这个配置出厂已经帮你配好了)我也是参考这个配置来改的 ![]() 默认的链接ST-LINK的uart是lpuart1,引脚是PG8 PG7 ![]() 选择配置LPUART1如下图: ![]() LED 是PB14 PB7 下面就是配置clock了 这里选中80Mhz会自行匹配 ![]() 拷贝初始化函数 之后就是生成工程生成完如下图所示,只需要保留两个文件夹就可以了: ![]() 在 board.c 文件中存放了函数 SystemClock_Config() ,该函数负责初始化系统时钟。当使用 CubeMX 工具对系统时钟重新配置的时候,需要更新这个函数。 该函数由 CubeMX 工具生成,默认存放在board/CubeMX_Config/Src/main.c 文件中。但是该文件并没有被包含到我们的工程中,因此需要将这个函数从 main.c 中拷贝到 board.c 文件中。在整个 BSP 的制作过程中,这个函数是唯一要要拷贝的函数,该函数内容如下所示: ![]() 在 board.h 文件中配置了 FLASH 和 RAM 的相关参数,这个文件中需要修改的是 STM32_FLASH_SIZE 和 STM32_SRAM_SIZE 这两个宏控制的参数。本次制作的 BSP 所用的 STM32L496ZG 芯片的 flash 大小为 1024k,ram 的大小为 320k,因此对该文件作出如下的修改: ![]() 接下来修改 board/Kconfig 文件: ![]() 修改链接脚本 linker_scripts 链接文件如下图所示 ![]() 下面以 MDK 使用的链接脚本 link.sct 为例,演示如何修改链接脚本: ![]() 实际修改如下: ![]() 3个文件都需要改一下 修改构建脚本 SConscript 脚本决定 MDK/IAR 工程的生成以及编译过程中要添加文件。 在这一步中需要修改芯片型号以及芯片启动文件的地址,修改内容如下图所示: ![]() 修改工程模板 template 文件是生成 MDK/IAR 工程的模板文件,通过修改该文件可以设置工程中使用的芯片型号以及下载方式。MDK4/MDK5/IAR 的工程模板文件,如下图所示: ![]() 这边就简单配置一下你要生成的project中的配置,基本上就是选择一下调试器和target ![]() ![]() 重新生成工程 重新生成工程需要使用 env 工具。 在 env 界面输入命令 menuconfig 对工程进行配置,并生成新的 rtconfig.h 文件。如下图所示: ![]() ![]() 下面我就要说重要的一步了,这个地方文档没有写,会影响到最终console的使用,这边默认console名字如果不是默认的uart1的话,会打印不出来,这边我们要选择lpuart1 ![]() 下面以重新生成 MDK 工程为例,介绍如何重新生成 BSP 工程。 使用 env 工具输入命令 scons --target=mdk5 重新生成工程,如下图所示: 接下来我们可以分别使用命令 scons --target=mdk4 和 scons --target=iar,来更新 mdk4 和 iar 的工程,使得该 BSP 变成一个完整的,可以提交到 GitHub 的 BSP。 好~到此为止,工程应该就可以用了, 但是还需要稍微改一点东西: 打开project, 默认LED小灯是B1,要改成B7 ![]() 烧入,串口如下: ![]() 小灯在闪烁,ok,整个工程建立完成。 RT-THREAD就这样跑起来了。虽然一步一步比较复杂,但是看得出RT-THREAD还是付出了很多工作量的。但是,我还是想说,其实有更好的办法处理bsp,我觉得目前STM32这种办法只能说根据STM32的工具做了出来,实际上,还是有很多可以优化的地方的。 附件是bsp工程,放在bsp/stm32目录下面就可以工作了。 |
stm32l496zg-st-nucleo.zip
下载258.55 KB, 下载次数: 3
bspç®å½ä¸
我试过,可以使用,不过ls这个命令用不了吧。这个问题可以从两个方面来分析:首先输入命令板子有没有回显?,有回显说明板子和RTTHREAD没问题,命令有问题。如果没反应,可以从UART这边入手,看RX中断有没有进。