打印
[STM32L4+]

Nucleo-STM32L4R5ZI开发板评测兼漫谈ST的开发环境

[复制链接]
7029|41
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhanzr21|  楼主 | 2017-12-31 15:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
元旦假期过了一半, 跟节日有关的活动进行的差不多了.

今天闲下来,玩了一会开发板. 随手写写, 不算正式的评测, 当做漫谈, 如果按照文学分类来讲, 应该属于散文.

Nucleo-STM32L4R5开发板是节前拿到手的. 至于外观, 已经有些审美疲劳了. ST的开发板不以外貌取胜, 而是其通用性,易用性成为工程师的好助手的.





ST中文官方网站

STM32L4+​系列Cortex-M4超低功耗微控制器产品介绍

STM32L4+资料下载:数据手册,参考手册,应用笔记等

STM32 Nucleo-144开发板原理图




沙发
zhanzr21|  楼主 | 2017-12-31 15:15 | 只看该作者
关于Nucleo-144

这个系列的开发板子应该是嵌入式工程师最熟悉的的开发板子了. 产量很大, 定价合理, 而且ST公司的推广也很到位, 本人就收到了不少这种板子.
而且LQFP144这个封装的芯片最难体现STM32产品的特性. 太小了很多引脚都省去了, BGA,WCSP的则不大适合玩家实验.

但是Nucleo-144的开发板也有几种:

ST公司最开始推出的是当中这种, 带有以太网的, 板子的型号为MB1137
后来某些产品自身不带有以太网接口, 所以有了第三种,即省去了以太网PHY,变压器,RJ45接口等等,这个板子跟中间这种是一样的,也是MB1137
再后来又推出了第一种这种型号,因为没有以太网,留个缺口,象狗啃的, 也不美观, 而且占用了空间, 这种型号是MB1312
这次拿到手的Nucleo-STM32L4R5的也是MB1312的型号.

这个原理图到ST官网不难下载, 放在这里供参考.
en.nucleo-l4r5zi_sch.zip (3.3 MB)

除了三种板子的接口上的差别之外, Nucleo-144的特点有:
1.与Arduino Uno接口兼容的ST Zio接口
2.自带STLINK/V2的调试器,有的型号带的是STLINK/V2的版本
3.几个LED,一个用户按键
4.对于主控芯片, 主晶振出厂是没有焊接的, 但是32K晶体都焊接了, 对于MB1137, STLINK可以输出8MHz的MCO时钟给主控, 对于MB1312这个信号默认没有连接.


ST中文官方网站

使用特权

评论回复
板凳
zhanzr21|  楼主 | 2017-12-31 15:34 | 只看该作者
关于ST公司的系列

这次拿到手的STML4R5的开发板上载的是L4+的系列. L4+是ST新推出的系列, 相对于L4是升级版本. 比较直观的升级就是最高频率到120MHz. 这个系列是ST公司在IoT市场寄予了厚望的系列.


从资源上看, 这个系列的主要定位当然是IoT市场. 比如智能节点, 传感器融合集中器, 可穿戴式产品的控制器.

这里漫谈一下子ST公司推出的这些系列.

ST公司最早推出的是F10x系列, 其中F103系列取得的成功最大, 价格也合理(跟产量大互相促进), 功能上很强大(针对同时期的市场上其他竞争者), 软件开发很简单(SPL居功至伟). 可以说现在有一定嵌入式开发经验的工程师,应该最先知道的就是STM32F103系列.

F10x系列的F100/F101/F102这几个产量不大, 我至今没有见过.

F105/F107系列属于连接系列, 带有一些F103系列不具备的接口, 比如OTG/Ethernet, 这个系列也比较受欢迎.

F10x得到广泛应用之后, ST公司又推出了F20x系列, 希望继续在更高性能的领域抢占份额. F20x系列也是Cortex M3的内核, 只是运行频率从72 MHz提升到了120 MHz. F20x系列的市场接受度, 现在看来没有达到F10x的程度. (Jlink-V9的硬件是用F20x系列设计的.) 究其原因,本人认为是市场对仅仅提升一点性能的产品没有很强的升级需求. F10x系列的最高可以跑到72 MHz, 跟120 MHz的F20x差不了多少, 价格,配套的生产,开发工具, 代码,已经做好的板子等等要换一套可不简单. 后来随着其他系列的推出,F20x系列并非工程师开发新产品的首选. 很有可能先于F10x系列而退出历史舞台.

[先发一段, 以免丢失内容]

ST中文官方网站



使用特权

评论回复
地板
zhanzr21|  楼主 | 2017-12-31 15:53 | 只看该作者
F20x之后又有F30x系列,
F30x系列,ST公司的定位并非F10x,F20x的直接升级产品, 而是着眼于一些比较窄的工控领域, 因为集成了不少模拟器件,如Delta-Sigma的ADC, 运放等等:

这个系列的核心升级到了Cortex M4, 且最高频率限制在了72MHz. 由此可见, 此系列并非追求绝对的性能升级. 目标应用领域在工业领域的采集,信号处理.

真正的F10x系列的直接升级版本应该是F4xx系列.
F40x系列的产品, 升级到了Cortex M4, 且最高频率为168 MHz.
F42x系列的产品, 最高频率为180 Mhz. 且增加了SDRAM这种接口.
F46x系列的产品, 在显示接口上又进行了丰富.

如果F10x系列的产品要升级, 自然地选择就是F4xx系列.

至于F7xx,H7xx系列, 性能上又进了一步, 但是我还没有发现其主要应用领域. 因为价格上F7xx,H7xx系列的对于Cortex A系列的产品没有优势了.

在以上这个道路之外, ST公司分别推出了另外两条路线的产品.
1.F0xx系列
这个系列是Cortex M0内核的产品. Cortex M0内核的实现比Cortex M3实现要简单很多, 且是基于ARMv6M的, 相对于M3等内核成本上降低了不少. 现在Cortex M0内核更是免除了授权费用. 所以后面的几年, 以前的8bit/16bit产品将慢慢退出市场, Cortex M0将成为当代的8051. F0xx系列最高频率为48 MHz.

2.L0xx/L1xx/L2xx/L4xx/L4+系列
L0xx系列是基于Cortex M0+的产品, 最高频率32 MHz. 针对传感器节点的市场.
L1xx/L2xx/L4xx都是L0xx的升级产品, 分别对应不同内核, 资源, 在对功耗敏感的应用领域, 用户可以从F系列转向L系列. ST产品的兼容度很高, 尤其是软件开发方面, 这个后面介绍.

总之本人才疏学浅, 有些观点不一定正确请包涵并指教.


使用特权

评论回复
5
zhanzr21|  楼主 | 2017-12-31 16:23 | 只看该作者
Cortex M/ST产品的软件开发

ST的产品之所以能获得这样的成功, 跟其软件开发方面的工作分不开的. 因为用户能快速将产品应用起来才能创造价值. 一旦用户在某一平台上用熟了,就不大愿意转移到其他平台. 这就是直到现在还有不少工程师还在使用8051这种内核的原因. 不能怪这些工程师抱残守缺, 软件的稳定性是产品稳定性最重要的一环.

不管是ARM还是ST公司, 都不算是传统的嵌入式系统的老厂家.

Cortex M内核是ARM公司的ARM7/ARM9产品即将在嵌入式领域被边缘化的时候推出的, Cortex系列的内核之前的ARM公司的产品都致力于全系列的编程模式/指令兼容. 有过ARM7/ARM9产品开发经验的工程师都记得, 那时处理器有Thumb模式,ARM模式,经常要切换来切换去. 简单而言,ARM指令的性能高, Thumb指令的密度高. 要用户管理这种切换可以说是一种繁重的负担. 后来ARM公司终于开窍了,嵌入式系统在指令设计上要简单. 从此推出了Cortex A/R/M三系列, Cortex M专心服务于嵌入式领域, 完全抛弃了ARM指令,而对Thumb指令进行了升级. Cortex M3是第一个内核产品(Cortex M0/M0+/M1是后来才推出的面向更低端的市场的产品).

ST公司的F10x系列正是首批应用Cortex M3内核的产品, 同时期的还有NXP,Freescale,TI等公司的产品

之前的嵌入式开发,都是程序员自己阅读数据手册,编程手册来直接对寄存器进行操作.

而ST公司的SPL(Standard Peripheral Library)将这些操作都封装成Library, 在牺牲了一些性能的同时大大增加了软件开发的效率.同时软件的可维护性, 稳定性都得到了很大的提升. 因为Cortex M3内核的性能本身比较高, 因为使用Library而牺牲的性能可以说是工程师承受的起的开销.

与此同时, Cortex M内核的设计上与之前的嵌入式内核也有所不同, 很多之前是外设的部件现在纳入了内核上. 比如Systick, 中断管理, 休眠管理都属于内核, 大大增强了软件在不同器件之间的可移植性. ARM公司称之为CMSIS.

[未完待续]


使用特权

评论回复
6
zhanzr21|  楼主 | 2017-12-31 16:40 | 只看该作者
HAL,CubeMX,LL

SPL的优点很明显, 可以称得上是简单的软件工程概念在嵌入式开发中获得收获.

但是嵌入式平台毕竟与通用的开发不同. 不同之处在于嵌入式平台与硬件的连接也属于需要维护的设计. 而不像通用平台有标准的接口与驱动.

ST公司意识到了这一点, 于是开发CubeMX+HAL, 而渐渐放弃SPL.

只是这个过程显得过于匆匆, 在HAL库远远没有稳定的情况下而不停地发布Release. 早期不停地下载升级补丁, 更换接口, 给程序员带来了不小的困扰. 直到今日, 这个震荡过程还没有完成.

但是HAL的优点不可否认:
1.软件层次非常标准,明确, 对于SPL来是非常大的进步, SPL库不够标准, 很多地方都是随意命名,定义接口
2.因为CubeMX工具, HAL库可以跟硬件平台结合起来

但是HAL有一个不可忽视的问题, 就是过于复杂完备, 以至于性能受了很大的影响.

同样的程序, 使用HAL库与使用SPL库, SPL版本的性能几乎全部高于HAL库. 这是因为HAL的抽象封装层次过多带来的开销.

这个开销在F系列还不明显, 在L系列上因为需要快速完成软件任务进入休眠, 所以功耗方面也受了托累.

LL库是ST公司对于这个问题的回应.

ST公司的愿景:
使用CubeMX+HAL进行原型设计,
设计完成之后转移到LL库

但事实上是目前存在三种框架:
SPL, HAL, LL
SPL当然是要慢慢淘汰,
HAL与LL是否能够共存, 互相补充, 相互辉映, 这个需要时间来证明.

使用特权

评论回复
7
zhanzr21|  楼主 | 2017-12-31 16:54 | 只看该作者
使用CubeMX将硬件设计与软件设计联系起来

L4+是新的系列, 如果要使用CubeMX, 必须下载最新的支持包.

这个版本的包有1G多, 所以网络不是很好的同学, 请使用迅雷这样的工具进行下载,再离线安装. 直些下载总是在某个点断开, 且不能断点续传. 这个问题自从该软件发布以来一直没有改善. 在之前支持包不大的时候还不明显, 目前支持包越来越大, 这个问题越来越明显, 也不清楚ST公司会不会有所行动.

之后选择芯片,板子都可以

CubeMX工具对我自己的帮助有如下几点:
1.帮助选型, 在选择芯片的界面就可以查看哪些型号可以满足需求
2.引脚分配, 根据功能来分配引脚这项任务本来不是人做的(表示适合自动化,非抱怨)
3.时钟自动合成,随着时钟越来越复杂,这个任务也变得不是人做的事了. 目前这部分的功能还有些bug,但是比起手工配置时钟我还是愿意忍受这些bug
4.外设配置生成初始化代码
5.功耗估算,目前我还没有用到这个功能,凭感觉觉得这个很有用

综上所述,这个工具真是帮了很大的忙, 但是缺点也很明显. 就像很牛B又很有脾气的同事, 我愿意只考虑他/她的好,不愿意计较其令人郁闷之处.


使用特权

评论回复
8
zhanzr21|  楼主 | 2017-12-31 16:59 | 只看该作者
如前所述, LL库是ST公司对于HAL库的诸多缺点的回应.

LL库几乎在HAL库诞生之时就有了, 只是最近才慢慢完备.

用户可以选择生成HAL还是LL的代码:

为了显示两者的主要区别:性能, 故意生成两个程序框架, 进行Dhrystone, Coremark评测.

官方宣称的得分为: 150 DMIPS/ 409 Coremark



使用特权

评论回复
9
zhanzr21|  楼主 | 2017-12-31 17:09 | 只看该作者
本帖最后由 zhanzr21 于 2018-2-27 17:43 编辑

本人使用ARMCC 5.06,优化全打开, 最高得分为:

LL框架版本:
LL API Coremark.#define ITERATIONS        5000
with microlib:CoreMark 1.0 : 311.410065 / ARMCC 5060422 -c --cpu Cortex-M4.fp -g -O3 -Otime --apcs=interwork --split_sections --C99 / STACK
without microlib:CoreMark 1.0 : 311.468261 / ARMCC 5060422 -c --cpu Cortex-M4.fp -g -O3 -Otime --apcs=interwork --split_sections --C99 / STACK

HAL框架版本:
Coremark for STM32L4R5 @ 120 MHz.ARMCC 5.06 Optimized for speed.#define ITERATIONS        5000
With microlib: CoreMark 1.0 : 275.816417 / ARMCC 5060422 -c --cpu Cortex-M4.fp -g -O3 -Otime --apcs=interwork --split_sections --C99 / STACK
Without microlib: CoreMark 1.0 : 274.002630 / ARMCC 5060422 -c --cpu Cortex-M4.fp -g -O3 -Otime --apcs=interwork --split_sections --C99 / STACK

除了本人想展示的HAL与LL框架对性能的影响之外, Coremark评测对使用的C Library不挑剔, 似乎将C library的影响排除了. 而Dhrystone评测被C Library的影响极大, microlib能节省代码尺寸, 但是性能不如standard c library.

代码可以去本人的Github下载:
https://github.com/zhanzr/stm32l4r5-demo.git
https://github.com/zhanzr/STM32L4R5-LL-Demo.git

Coremark补充代码:
coremark_v1.0_l4r5_port.zip (4.32 KB)

此篇的小小漫谈到此为止, 谢谢阅读, 请多指教!
[更正与注意] 这几个选项对性能影响很大, 尤其是Instruction Cache.





使用特权

评论回复
10
zhanzr21|  楼主 | 2017-12-31 17:34 | 只看该作者
本帖最后由 zhanzr21 于 2017-12-31 17:36 编辑

补: ITM重定向IO

这个内容我发过一两次了, 但是还是有很多工程师对这个不熟, 本着共享知识的精神, 不怕别人说啰嗦再发一次.

所谓重定向IO,就是将此标准输出输入接口重定向到能看到的界面, 以便调试观察.

比如:
    printf("Coremark For STM32L4R5 Nucleo Board [url=home.php?mod=space&uid=72445]@[/url] %u Hz, %u, %u, %u\n",
    SystemCoreClock, HAL_RCC_GetHCLKFreq(), HAL_RCC_GetSysClockFreq(), HZ);
这种代码, 如果在Host机器上编译运行, 现象是Console界面看到打印.

如果是嵌入式平台, Console是没有的, 一般情况下可以将其重定向到串口上, 但是如果该CPU与调试器有ITM接口, 将其重定向到ITM接口上将更加方便.

ST所有的Cortex M3及以上的内核都支持ITM输出

所有的Nucleo板子上的调试器都支持捕捉ITM输出

Cortex M0/M0+的处理器一般没有此接口, 为的是节省资源.

如果要输出ITM, SWD接口除了SWCLK, SWDIO之外, 还要接一根SWO,也称SWV的IO.

在Cube中这么设置:

至于JTAG口, 另有设置, 这里暂时不节外生枝

在生成的代码中需要提供相关的输出函数.
在RTE配置界面这样配置:

如果是重定向到串口, 相应的OUT配置成User, 这里选ITM.

因为RTE自己本身就有ITM的输出函数(属于内核), 所以这样之后, 就可以使用printf了:
static int stdout_putchar (int ch) {
  return (ITM_SendChar(ch));
}
如果是重定向到串口, 则需要重新实现这个stdout_putchar函数,直接输出到串口上即可.

如果不是Keil MDK开发, 使用GCC来开发, 则不需设置RTE, 只需要重新实现这个函数即可:
//Retarget IO to ITM
int _write(int file, char *data, int len)
{
     for(int i=0; i<len; ++i)
     {
          ITM_SendChar(*(data+i));
     }
     return len;
}
如果要使用scanf函数,则还要实现_read函数, 只是调试的话一般printf最为常用.
如果是ST-LINK调试器, 输出使用ST-LINK Utility工具查看即可:

注意,时钟要跟内核时钟配置成一样子.
补充完毕.


使用特权

评论回复
11
mintspring| | 2017-12-31 22:36 | 只看该作者
32这几年火的一塌糊涂

使用特权

评论回复
12
ddllxxrr| | 2018-1-1 09:40 | 只看该作者
散文写得不错

使用特权

评论回复
13
sc1884| | 2018-1-1 11:27 | 只看该作者
好贴

使用特权

评论回复
14
biechedan| | 2018-1-2 22:10 | 只看该作者

使用特权

评论回复
15
wangdezhi| | 2018-1-2 22:10 | 只看该作者
zhanzr21 发表于 2017-12-31 16:59
如前所述, LL库是ST公司对于HAL库的诸多缺点的回应.

LL库几乎在HAL库诞生之时就有了, 只是最近才慢慢完备. ...

  跟着学习一下。

使用特权

评论回复
16
isseed| | 2018-1-2 22:11 | 只看该作者
不如以前的disconvery

使用特权

评论回复
17
biechedan| | 2018-1-2 22:13 | 只看该作者
这个的资料还真是不错。

使用特权

评论回复
18
wangdezhi| | 2018-1-2 22:13 | 只看该作者
zhanzr21 发表于 2017-12-31 16:59
如前所述, LL库是ST公司对于HAL库的诸多缺点的回应.

LL库几乎在HAL库诞生之时就有了, 只是最近才慢慢完备. ...

STM32L4R5ZI开发板功能非常齐全。

使用特权

评论回复
19
isseed| | 2018-1-2 22:13 | 只看该作者
一起的disconvery还带有TFT屏幕呢

使用特权

评论回复
20
一路向北lm| | 2018-1-2 22:13 | 只看该作者
不错。楼主厉害了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:每天都進步

91

主题

1013

帖子

34

粉丝