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

NUCLEO-G474RE替代K60控制体验

[复制链接]
Canly 发布时间:2020-5-18 16:52
开箱体验

9 C! {5 \$ C7 y( m. l; `. n& W
1、试用背景
上次使用STM32,还是读书的时候,那会儿刚刚推出来F1系列不久,得到一块F107的板子,叫“神舟IV号”,玩遍了外设资源,也用F1系列的片子设计了几个小玩意。那会儿就觉得,驱动库好用,直接拿来就跑,省去很多麻烦。工作后,一直使用其它MCU,ST的也有,是STM8系列,STM32确实有挺多年没有碰过了。
虽然没有用过,但是对ST的产品一直都是挺关注,STM32的开发的确相对简单很多,生态链也更加全面,特别是推出 CubeMX 之后,基本的工程搭建和配置非常方便。后续因工作需要,使用的平台仍是NXP的K6x系列,但综合评估,一是价位略高;二是用于开发的库不统一,有自己写的库、有官方库、还有直接面向寄存器的;三是获取支持的途径也有欠缺,线上可参考的有效资源非常有限。借G4板卡试用活动,申请到一块NUCLEO-G474RE,在此分享自己的试用体验。

. k% e( ?' d/ S, K8 l
2、开箱检验
这次活动,虽然申请的是G474,但意外地先收到了一块G431的板子,G431 128kB Flash、32kB sRAM,项目对Flash要求较高(需要保存外部片子的固件和配置文件),不能满足需求。后续又收到了G474的板子,对512kB Flash,满足项目需求绰绰有余。两块板子如下图。

2 D* w" ~4 J9 S! P) k
11.png
! H. F0 y9 }# S  I  k( L1 Y9 q- X6 M. K
使用过程

2 ]: N. E$ N! `* B# o7 T9 F$ z6 i
1、框图架构
系统框架图如下图示。STM32G474RE通过UART与外部通讯基带板联系,根据基带板提供的API函数,给基带板下载固件和配置文件,监控基带板的运行状态。

2 `4 ^4 U' P+ E1 f4 b8 D/ E
22.png
3 j7 ~. d0 g& s/ s5 C2 x: n2 g1 N% `" g
2、用到的MCU资源
本设计中用到的MCU资源包括UART4、UART5、PA5、PC1、TIM3,其用于如下表:

8 n. r9 R9 S4 r* S6 |; i
33.png
# K+ ~0 @; h( O  w+ U/ n; e$ B" c
3、Flash布局与文件下载
STM32G474RE共有512kBFlash512KBFlash区域(0x0800 0000 – 0x0808 0000),保存着自身程序、基带板固件、基带板配置文件,Flash布局如下:

% q5 v1 h( @. {+ k7 n
44.png
6 i, u9 i! l4 r% k: B7 f! x
配置文件和基带板固件通过STM32CubeProgrammer烧录到上表指定的起始位置,烧录过程较J-Flash工具简单,烧录成功后,仿真时可以通过Memory查看数据。
STM32CubeProgrammer软件截图如下,需要注意修改地址。

- w$ H, o* o& ]/ \/ a
55.png

" R( _. F, b7 f
4、Flash读取
本设计中,没有用到Flash写功能。Flash读取较简单,流程如下,直接拷贝数据。
3 `6 r  L/ e2 R0 l- \' V& {, n
66.png

2 k; ]' s5 ?4 R5 K, Z2 f" K2 O3 l
Flash读取函数,直接调用memcpy()函数将数据从Flash拷贝到RAM中。为防止数据读取出错,读取数据时连续取了两次,比较两次数据是否相同,如不相同,将会重复执行5次,直到相同或者次数达到,软件退出。
5 ?3 }5 T% u( n! w" ~
5、UART、定时器和GPIO
系统时钟配置和UART、定时器、GPIO初始化相关代码由STM32CubeMX生成,这个软件大家都会用,我用过后的感觉是,简单、实用,不需要像使用K6x一样,看手册、了解时钟门、看寄存器配置等等。不过使用这个软件不是说不需要了解寄存器配置,而是能简化我们的开发。
CubeMX的配置界面如下图:
- I$ k) n  ?3 c: j2 ^, A1 v8 m
77.png

% l9 Y! _+ b$ A7 C4 T, B
6、执行效果
有了前面的准备工作,加之原来基于K6x的工程就是模块化设计的,软件很快就正常工作了,下图展示了NUCLEO板与通讯基带板的连接、调试界面获取到的调试信息等。软件运行效果与K6x的效果完全相同。

' c! Z; `6 S1 Q# y
88.png
# U/ x9 A& k6 W% V3 _/ `3 ^
99.png

4 O" ]& M& r4 e* }9 a
10.png
+ U+ `  [" M" F  E# Y
问题和试用体会
* G% |. ]& O$ F0 Y" E5 |
多年没用STM32系列的MCU,软件架构确实发生了非常大的变化,谈以下几点感受:

2 Z  [  F0 K5 [
① SDK和CubeMX使用:配合CubeMX的SDK,确实功能强大,但相对NXP的SDK来说,ST的SDK里的例程,没有NXP的例程通俗易懂。当然配合CubeMX后,效果和体验确实不一样。

8 [1 E$ G8 s' R+ l: k. u* J% z/ @
② 定时器配置问题:CubeMX生成的代码,只是初始化了定时器,使能了中断,需要用户启动定时器和中断,代码如下:
HAL_TIM_Base_Start_IT(htim_base);
HAL_TIM_Base_Start(htim_base);
之前没有用过CubeMX生成的代码,在这里还是卡壳了一下,不过查看了寄存器配置,发现定时器没有起来,配置一下,也还方便。
再提一点,由于之前一直用IAR7,这次用IAR8发现,它的寄存器查看器,打开后只看到了CPU寄存器,没有外设寄存器,需要右键单击选择寄存器组才行。

6 B! [$ j1 n! Z" J7 F; r2 n7 G' q
③ UART配置问题:与定时器一样,CubeMX生成的串口,进不了中断。同样调用HAL_UART_Receive_IT()函数,问题解决。
: l2 x( K1 ~" X  ?! v
④ 栈分配:调试过程中出了个问题,UART5串口接收数据不正常。
我用TTL转USB接电脑调试,运行正常;用开发板接通讯基带板,单步跑也正常,全速跑时就会报错,软件跑飞。CubeMX生成工程时的栈大小为0x400,与原来K6x的一样,本想着没有什么问题的,但根据之前项目的经验,怀疑是栈空间不够,将栈大小改为0x800,问题解决了。可能是SDK不一样,STM32的SDK函数调用深度更深,需要的栈资源也更大吧。
总体来讲,这次试用感受很好。由于工作项目压力大,收到板子后,试用只能在周末和平常的业余时间弄,推进速度较慢,前后用了3个礼拜的时间,但这也从另一方面证明了STM32的开发门槛和难度确实不高,易用性很高。在了解了STM32架构后,我想后续使用STM32其他系列的产品也会很快上手。
1 j1 @  _1 ^4 w" z+ Q/ R3 T+ Z" |. P! i0 T
1 f4 P$ s5 ?9 b. G# |
收藏 评论1 发布时间:2020-5-18 16:52

举报

1个回答
baobo 回答时间:2020-5-19 08:38:29
签到

所属标签

相似分享

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