你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【NUCLEO-L496ZG评测】+RT-THREAD工程搭建

[复制链接]
飞跃-344154 发布时间:2019-10-2 21:38
RT-THREAD
: p/ d! C# D! \: J$ Y+ [中国的操作系统,还算对STM32友好,% E5 Z- E) g- S  R% Q
稍微调试了下终于把攻略做出来了,8 ]2 e+ d9 S+ x6 [$ Y6 M
目前github上还没有l496zg-nucleo的工程,正好手上有一块板子,做起来。
( z6 q, D3 j. D( |0 m# i& ~/ H在操作系统上点亮一个小灯,应该比较简单。! T, A" r1 b/ @# x
http://github.com/RT-Thread/rt-thread+ P$ w* E! S( c9 J
0 j1 k: h7 |1 Y
github上地址:9 m0 E; Z- m5 C
先把文档稍微看一遍:( n* d- G5 z6 ?, f7 R( M
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' ]  ?( r0 |8 q% V8 W- t
按照文档基本可以开始实际操作了:
8 r) w; p; Q1 {5 L" s0 ]文档中第一步6 Y# t+ z1 i+ n! j8 u/ i
1.png 2 T* P  c2 Q9 j8 Y* q4 b8 }# t) F

! |& [6 j+ L" I7 U9 Z1 `3 [ 2.png . J! L5 L/ H" n( Q8 g# E
我们来新建一个文件,从stm32l4xx拷贝出来7 T* v- M( e% z2 U! s  M- z4 y
3.png % v5 ?4 _; C/ W% q" G8 `
第二步: 进到目录board\CubeMX_Config
/ u7 ~! O* l, l7 j! D, G: o: z) @在制作 BSP 的第二步,需要创建一个基于目标芯片的 CubeMX 工程。默认的 CubeMX 工程在 CubeMX_Config 文件夹中,双击打开 CubeMX_Config.ioc 工程,如下图所示:
/ ~3 a' h6 i7 w* h! F 4.png
- F2 H" {3 }' R对板子做相应的配置
* G( m# L, ]+ {" q3 P2 e; c, m! }1. CPU要选一下吧,选择L496ZGTX' e: D; ^& e/ K6 L# v
2. RCC要选对,这边我这板子选择如下:
+ i- t4 ~6 q. Z1 U; K 5.png & g: E  P  t: w; M# _( J5 t( A
这部分比较重要,要对自己板子比较熟悉才行。
; }' o# A7 _2 |! A) D, o如果实在不知道怎么配置,NUCLEO还提供了选择板载的配置(这个配置出厂已经帮你配好了)我也是参考这个配置来改的' g" H; I8 \. v) A+ h
6.png ) d' O" x" O" O+ O" j
默认的链接ST-LINK的uart是lpuart1,引脚是PG8 PG74 c$ X1 R5 S& c) `( U1 g. X
7.png
5 _/ r3 j" A7 P" N选择配置LPUART1如下图:- ^5 j  I. C' Q4 @8 M+ N! T, G
8.png
9 T4 U$ U* M1 K2 Y) NLED 是PB14 PB7
. F% ?1 C$ b1 D  r5 ^8 f+ y1 r" `6 j3 a3 V0 _/ L, g6 k
下面就是配置clock了
. O4 w$ B+ _% d" w; L0 D& E9 T1 o这里选中80Mhz会自行匹配7 J5 r$ P2 J; J' Q0 F; P9 o9 X! W
9.png 7 `( u! c& l, T/ |, [( r+ b9 G- u
拷贝初始化函数
3 y6 N: A; y: K( m# v/ F之后就是生成工程生成完如下图所示,只需要保留两个文件夹就可以了:% V. S- T+ a) c+ D/ {$ Z" a" W
10.png
# t4 v0 |- C0 D$ L: a& r; t' d9 n0 l2 ~% T
在 board.c 文件中存放了函数 SystemClock_Config() ,该函数负责初始化系统时钟。当使用 CubeMX 工具对系统时钟重新配置的时候,需要更新这个函数。5 \# V, H8 L7 m
该函数由 CubeMX 工具生成,默认存放在board/CubeMX_Config/Src/main.c 文件中。但是该文件并没有被包含到我们的工程中,因此需要将这个函数从 main.c 中拷贝到 board.c 文件中。在整个 BSP 的制作过程中,这个函数是唯一要要拷贝的函数,该函数内容如下所示:
  R0 Z4 v# Q! e8 C 11.png + n6 A( j1 o. I/ C
在 board.h 文件中配置了 FLASH 和 RAM 的相关参数,这个文件中需要修改的是 STM32_FLASH_SIZESTM32_SRAM_SIZE 这两个宏控制的参数。本次制作的 BSP 所用的 STM32L496ZG 芯片的 flash 大小为 1024k,ram 的大小为 320k,因此对该文件作出如下的修改:! l+ M# Z& |' Z0 R6 R8 k
12.png " i* }4 B/ `6 Z/ h
接下来修改  board/Kconfig 文件:- x, K: V0 P6 f. V. L
13.png
* k+ \! l. X2 w* R. t6 c7 L修改链接脚本
* E/ u+ {: X0 w0 w2 S" x, P4 }linker_scripts 链接文件如下图所示
. {' i$ [" x. H2 y9 Z8 E& j0 l! S 14.png , p( U9 A9 F, l6 V3 S
下面以 MDK 使用的链接脚本 link.sct 为例,演示如何修改链接脚本:
6 G  o( k% o2 a! E- D 15.png & ]2 s: X. ^- B7 u# ^  _! w9 s/ }0 ]* u
实际修改如下:. F: D, `+ r* B+ q7 q6 T! m) {
16.png 3 k6 w5 q6 B" B8 }
3个文件都需要改一下! a3 B3 }7 P! m4 N$ ~% v

* \. R% k* I5 x( D3 S7 y: y修改构建脚本9 @: K9 I5 J4 C$ S1 t* g9 _
, {: H: O2 O4 T$ a( T5 u- B
SConscript 脚本决定 MDK/IAR 工程的生成以及编译过程中要添加文件。, p" E# o+ V  }8 z: {

. o/ o  F' ~7 N0 Z在这一步中需要修改芯片型号以及芯片启动文件的地址,修改内容如下图所示:$ G8 Y5 t& l! w1 e/ a' ]
17.png ; |% B" e$ O% N
修改工程模板1 ?6 v6 @4 [$ M2 B
template 文件是生成 MDK/IAR 工程的模板文件,通过修改该文件可以设置工程中使用的芯片型号以及下载方式。MDK4/MDK5/IAR 的工程模板文件,如下图所示:
2 \8 z  h; o: i# K 18.png 2 n; {# M( \3 G1 u. s5 d
这边就简单配置一下你要生成的project中的配置,基本上就是选择一下调试器和target
$ {5 H( E. {$ T. ~7 u, l 19.png
9 t2 T: a9 Y9 g  N- C6 ?3 j) v" e$ v4 j- H& X* J5 E+ p5 b4 N! K
20.png 9 q# N, F/ k4 F$ y% J1 F" R
重新生成工程+ V1 l% r. a( i9 |$ p
- q) s1 j6 W1 [3 w: W" N
重新生成工程需要使用 env 工具。
+ N* T7 L% S- M) Z) {9 X- d' |# v: c, p- @* i' L
在 env 界面输入命令 menuconfig 对工程进行配置,并生成新的 rtconfig.h 文件。如下图所示:
- j# E0 l, u, Q. | 21.png
* n6 U) X* @7 S9 Q# n6 G5 u
4 {7 D5 D9 ?4 Z7 |# a& g2 N9 i 22.png
8 ~) P! w0 J4 L" |1 {! v# J下面我就要说重要的一步了,这个地方文档没有写,会影响到最终console的使用,这边默认console名字如果不是默认的uart1的话,会打印不出来,这边我们要选择lpuart16 o: }$ Y! X9 W' ^; q; ]! _
23.png # z; c* ~3 f! T
下面以重新生成 MDK 工程为例,介绍如何重新生成 BSP 工程。
) o. v8 d' u1 w/ C$ q" T0 o: r3 f% k: m8 Q+ R( B
使用 env 工具输入命令 scons --target=mdk5 重新生成工程,如下图所示:. O1 A  T0 ^6 S3 P
接下来我们可以分别使用命令 scons --target=mdk4 和 scons --target=iar,来更新 mdk4 和 iar 的工程,使得该 BSP 变成一个完整的,可以提交到 GitHub 的 BSP。
; S' N4 ?1 }4 i3 a$ ]好~到此为止,工程应该就可以用了,0 A( v9 y& A- N# o
但是还需要稍微改一点东西:. t! W5 l8 R% i
打开project, 默认LED小灯是B1,要改成B7+ z9 b, |% L7 f: m, f
24.png ; _# b# w5 v# O) S& e; Q0 j
烧入,串口如下:0 B7 h; H. P* {" }% |# N* u/ m
25.png
. ]: W9 _5 n" ]; b+ w( A* k小灯在闪烁,ok,整个工程建立完成。
& ]- g3 M; t, `RT-THREAD就这样跑起来了。虽然一步一步比较复杂,但是看得出RT-THREAD还是付出了很多工作量的。但是,我还是想说,其实有更好的办法处理bsp,我觉得目前STM32这种办法只能说根据STM32的工具做了出来,实际上,还是有很多可以优化的地方的。8 ?5 E/ D9 m  n) u% ]
附件是bsp工程,放在bsp/stm32目录下面就可以工作了。
8 B3 V, Z, y6 v% d2 i' q; e: v& x9 L
% U" I2 b/ [4 n$ l! J0 \+ C! E+ e& Q% {

stm32l496zg-st-nucleo.zip

下载

258.55 KB, 下载次数: 3

bsp目录下

收藏 1 评论4 发布时间:2019-10-2 21:38

举报

4个回答
飞跃-344154 回答时间:2019-10-15 13:49:57
自己顶一下
李康1202 回答时间:2019-10-23 09:56:26
楼主开发版挺漂亮的
yuanweiju 回答时间:2019-10-23 15:27:10
我之前也移植rt thread到这个开发板上,电脑串口终端能打印rt thread的标志性图标,但是输入命令,如ls,终端没有显示目前运行的线程,请问有遇到过这样的问题吗
飞跃-344154 回答时间:2019-12-7 20:58:35
yuanweiju 发表于 2019-10-23 15:27
) \3 O, m+ f: `  p) i我之前也移植rt thread到这个开发板上,电脑串口终端能打印rt thread的标志性图标,但是输入命令,如ls,终 ...

2 J3 f# ]5 [* z9 I5 ?7 j9 ~我试过,可以使用,不过ls这个命令用不了吧。这个问题可以从两个方面来分析:首先输入命令板子有没有回显?,有回显说明板子和RTTHREAD没问题,命令有问题。如果没反应,可以从UART这边入手,看RX中断有没有进。

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版