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

NUCLEO-G474RE替代K60控制体验

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

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

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

11.png

使用过程

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

22.png

2、用到的MCU资源
本设计中用到的MCU资源包括UART4、UART5、PA5、PC1、TIM3,其用于如下表:

33.png

3、Flash布局与文件下载
STM32G474RE共有512kBFlash512KBFlash区域(0x0800 0000 – 0x0808 0000),保存着自身程序、基带板固件、基带板配置文件,Flash布局如下:

44.png

配置文件和基带板固件通过STM32CubeProgrammer烧录到上表指定的起始位置,烧录过程较J-Flash工具简单,烧录成功后,仿真时可以通过Memory查看数据。
STM32CubeProgrammer软件截图如下,需要注意修改地址。

55.png

4、Flash读取
本设计中,没有用到Flash写功能。Flash读取较简单,流程如下,直接拷贝数据。

66.png

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

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

77.png

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

88.png

99.png

10.png

问题和试用体会

多年没用STM32系列的MCU,软件架构确实发生了非常大的变化,谈以下几点感受:

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

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

③ UART配置问题:与定时器一样,CubeMX生成的串口,进不了中断。同样调用HAL_UART_Receive_IT()函数,问题解决。

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


收藏 评论1 发布时间:2020-5-18 16:52

举报

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

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版