RT-THREAD! x( J; i& J4 U0 D' e6 \% @ 中国的操作系统,还算对STM32友好,3 U7 t' W) b! w$ W 稍微调试了下终于把攻略做出来了,9 x7 o: L' ^: g% L8 k# I0 I i9 @ 目前github上还没有l496zg-nucleo的工程,正好手上有一块板子,做起来。6 l; ?4 e4 V* S6 w% d9 W9 M 在操作系统上点亮一个小灯,应该比较简单。 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) Z! o' I: K$ ?; _8 u8 ` 按照文档基本可以开始实际操作了:9 ` K& k0 B& \6 M* u) Q2 K x 文档中第一步0 b1 D! N; ~' J 我们来新建一个文件,从stm32l4xx拷贝出来3 S* Z1 `1 q `4 m ^, Y: G x 第二步: 进到目录board\CubeMX_Config 在制作 BSP 的第二步,需要创建一个基于目标芯片的 CubeMX 工程。默认的 CubeMX 工程在 CubeMX_Config 文件夹中,双击打开 CubeMX_Config.ioc 工程,如下图所示: 对板子做相应的配置% j5 {( C* D/ n 1. CPU要选一下吧,选择L496ZGTX+ ?8 J- B5 `% a: E3 }$ M: p; I% [ 2. RCC要选对,这边我这板子选择如下:3 }) M$ R5 I, k/ L3 \ 这部分比较重要,要对自己板子比较熟悉才行。 如果实在不知道怎么配置,NUCLEO还提供了选择板载的配置(这个配置出厂已经帮你配好了)我也是参考这个配置来改的 默认的链接ST-LINK的uart是lpuart1,引脚是PG8 PG76 h H8 J5 w, L 选择配置LPUART1如下图: LED 是PB14 PB7 8 `- E2 z* @' s 下面就是配置clock了0 @6 D; M, ~( s/ W& i5 a5 b j. v 这里选中80Mhz会自行匹配- H# v6 F. ^3 T+ H 拷贝初始化函数 之后就是生成工程生成完如下图所示,只需要保留两个文件夹就可以了:0 Z, C) {( P& e# P & f0 @1 _* A* m8 y4 V 在 board.c 文件中存放了函数 SystemClock_Config() ,该函数负责初始化系统时钟。当使用 CubeMX 工具对系统时钟重新配置的时候,需要更新这个函数。# R* e( G( [6 N/ k' \6 q( h+ v 该函数由 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 链接文件如下图所示6 C5 N1 {( S" b0 w% ? 下面以 MDK 使用的链接脚本 link.sct 为例,演示如何修改链接脚本:5 t; D3 D' `( s/ O9 N! _ 实际修改如下:$ O, v: x4 @1 q) p( ~ 3个文件都需要改一下" a$ e5 t& p# Z4 M. a) Y # z+ T5 j9 p) C% ` 修改构建脚本- C9 n8 |% c! }. T4 C9 t' Z 8 b: W/ A" Z" G: p SConscript 脚本决定 MDK/IAR 工程的生成以及编译过程中要添加文件。& K6 }) _) Z3 c# M 在这一步中需要修改芯片型号以及芯片启动文件的地址,修改内容如下图所示:7 i5 o& w1 Q. w4 b 修改工程模板 template 文件是生成 MDK/IAR 工程的模板文件,通过修改该文件可以设置工程中使用的芯片型号以及下载方式。MDK4/MDK5/IAR 的工程模板文件,如下图所示:4 y# N& v3 z# J/ ?/ w( C$ y" a 这边就简单配置一下你要生成的project中的配置,基本上就是选择一下调试器和target + @5 y7 ^: F& u4 F5 R T 重新生成工程& _* Y" W3 z- J* r6 k - \# | S2 n$ F. O- w( ]/ c 重新生成工程需要使用 env 工具。: g" \3 I# ]1 H& L0 ?, D' w% R% z 在 env 界面输入命令 menuconfig 对工程进行配置,并生成新的 rtconfig.h 文件。如下图所示: ' D3 b3 `+ }- N& y" q# J: A 下面我就要说重要的一步了,这个地方文档没有写,会影响到最终console的使用,这边默认console名字如果不是默认的uart1的话,会打印不出来,这边我们要选择lpuart1 下面以重新生成 MDK 工程为例,介绍如何重新生成 BSP 工程。& D" v' D, _8 y+ S" k8 A0 D 使用 env 工具输入命令 scons --target=mdk5 重新生成工程,如下图所示:, b" U6 F7 @; I- O 接下来我们可以分别使用命令 scons --target=mdk4 和 scons --target=iar,来更新 mdk4 和 iar 的工程,使得该 BSP 变成一个完整的,可以提交到 GitHub 的 BSP。 好~到此为止,工程应该就可以用了,; I2 }: l4 g. D# |# v5 X) I 但是还需要稍微改一点东西: 打开project, 默认LED小灯是B1,要改成B7 烧入,串口如下:: [# v) B) A6 a 小灯在闪烁,ok,整个工程建立完成。/ m5 h6 ~! t+ P% F5 E: P7 x RT-THREAD就这样跑起来了。虽然一步一步比较复杂,但是看得出RT-THREAD还是付出了很多工作量的。但是,我还是想说,其实有更好的办法处理bsp,我觉得目前STM32这种办法只能说根据STM32的工具做了出来,实际上,还是有很多可以优化的地方的。 附件是bsp工程,放在bsp/stm32目录下面就可以工作了。3 @& P ^- c( h z; \& q |
stm32l496zg-st-nucleo.zip
下载258.55 KB, 下载次数: 3
bspç®å½ä¸
我试过,可以使用,不过ls这个命令用不了吧。这个问题可以从两个方面来分析:首先输入命令板子有没有回显?,有回显说明板子和RTTHREAD没问题,命令有问题。如果没反应,可以从UART这边入手,看RX中断有没有进。