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

NUCLEO-G474RE替代K60控制体验

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

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

# t$ b, k7 t" _
2、开箱检验
这次活动,虽然申请的是G474,但意外地先收到了一块G431的板子,G431 128kB Flash、32kB sRAM,项目对Flash要求较高(需要保存外部片子的固件和配置文件),不能满足需求。后续又收到了G474的板子,对512kB Flash,满足项目需求绰绰有余。两块板子如下图。
# d: r1 p  c% m
11.png
) B: o' z$ n& p9 _" N
使用过程

$ B- d- d  ?' o
1、框图架构
系统框架图如下图示。STM32G474RE通过UART与外部通讯基带板联系,根据基带板提供的API函数,给基带板下载固件和配置文件,监控基带板的运行状态。

+ Z/ Z0 R; x' H# |2 R! T& N0 w9 V
22.png

, \$ c3 N, X% J: g
2、用到的MCU资源
本设计中用到的MCU资源包括UART4、UART5、PA5、PC1、TIM3,其用于如下表:

! K  f: r, S( I" N( I8 k* x) B9 z
33.png

4 _% _7 @4 n- o/ H
3、Flash布局与文件下载
STM32G474RE共有512kBFlash512KBFlash区域(0x0800 0000 – 0x0808 0000),保存着自身程序、基带板固件、基带板配置文件,Flash布局如下:
* x9 s% j/ k1 z% I/ }" X
44.png
1 x" a0 R( X2 h4 V
配置文件和基带板固件通过STM32CubeProgrammer烧录到上表指定的起始位置,烧录过程较J-Flash工具简单,烧录成功后,仿真时可以通过Memory查看数据。
STM32CubeProgrammer软件截图如下,需要注意修改地址。
+ V# W" [2 G4 ~8 c, W6 O, p: k$ T
55.png
! k* L7 x1 p5 }, ]- ^) w, D3 l
4、Flash读取
本设计中,没有用到Flash写功能。Flash读取较简单,流程如下,直接拷贝数据。

% [5 }9 j$ D) c0 O  a
66.png

4 ?3 n: j( _+ q
Flash读取函数,直接调用memcpy()函数将数据从Flash拷贝到RAM中。为防止数据读取出错,读取数据时连续取了两次,比较两次数据是否相同,如不相同,将会重复执行5次,直到相同或者次数达到,软件退出。

  H0 t+ M4 I0 z, c
5、UART、定时器和GPIO
系统时钟配置和UART、定时器、GPIO初始化相关代码由STM32CubeMX生成,这个软件大家都会用,我用过后的感觉是,简单、实用,不需要像使用K6x一样,看手册、了解时钟门、看寄存器配置等等。不过使用这个软件不是说不需要了解寄存器配置,而是能简化我们的开发。
CubeMX的配置界面如下图:

0 q; G" C6 w0 ?" u
77.png

- U0 ~$ q  {# t6 f9 p
6、执行效果
有了前面的准备工作,加之原来基于K6x的工程就是模块化设计的,软件很快就正常工作了,下图展示了NUCLEO板与通讯基带板的连接、调试界面获取到的调试信息等。软件运行效果与K6x的效果完全相同。
# w( Z0 t8 P: P
88.png
- |, I- l; v- V3 g+ c
99.png
: ]" E: [& }9 d/ d, Y& s
10.png

* E6 `; M5 o! F
问题和试用体会
! O/ ]7 b& X+ N' s/ C1 q
多年没用STM32系列的MCU,软件架构确实发生了非常大的变化,谈以下几点感受:
2 G6 H$ F; [$ d$ v
① SDK和CubeMX使用:配合CubeMX的SDK,确实功能强大,但相对NXP的SDK来说,ST的SDK里的例程,没有NXP的例程通俗易懂。当然配合CubeMX后,效果和体验确实不一样。
* ?8 `9 i! l0 k) u$ F) j
② 定时器配置问题:CubeMX生成的代码,只是初始化了定时器,使能了中断,需要用户启动定时器和中断,代码如下:
HAL_TIM_Base_Start_IT(htim_base);
HAL_TIM_Base_Start(htim_base);
之前没有用过CubeMX生成的代码,在这里还是卡壳了一下,不过查看了寄存器配置,发现定时器没有起来,配置一下,也还方便。
再提一点,由于之前一直用IAR7,这次用IAR8发现,它的寄存器查看器,打开后只看到了CPU寄存器,没有外设寄存器,需要右键单击选择寄存器组才行。
: Q( `3 h+ @2 P& p/ `) Y+ x
③ UART配置问题:与定时器一样,CubeMX生成的串口,进不了中断。同样调用HAL_UART_Receive_IT()函数,问题解决。

6 c( M6 z9 w2 n# O8 x3 j" O$ F
④ 栈分配:调试过程中出了个问题,UART5串口接收数据不正常。
我用TTL转USB接电脑调试,运行正常;用开发板接通讯基带板,单步跑也正常,全速跑时就会报错,软件跑飞。CubeMX生成工程时的栈大小为0x400,与原来K6x的一样,本想着没有什么问题的,但根据之前项目的经验,怀疑是栈空间不够,将栈大小改为0x800,问题解决了。可能是SDK不一样,STM32的SDK函数调用深度更深,需要的栈资源也更大吧。
总体来讲,这次试用感受很好。由于工作项目压力大,收到板子后,试用只能在周末和平常的业余时间弄,推进速度较慢,前后用了3个礼拜的时间,但这也从另一方面证明了STM32的开发门槛和难度确实不高,易用性很高。在了解了STM32架构后,我想后续使用STM32其他系列的产品也会很快上手。& D. [! c, p6 s9 K

7 Z3 _1 w! x% R  q* L
% f7 ~# }  ^! o0 `) n2 j
收藏 评论1 发布时间:2020-5-18 16:52

举报

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

所属标签

相似分享

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