本帖最后由 lkl0305 于 2015-9-27 15:14 编辑
STM32L476 Nuleo测评
首先感谢EEWORLD的 eric_wang版主给我这次尝鲜的机会。
以前玩过的开发板挺多的,STM32的也有几个了,从Discovery到Nuleo。但都是F系列的,低功耗的L系列的这还是首次,所以花了不少时间了解。
当然,正式在这里写测评还是第一次,所以有不妥的地方还望网友们多提宝贵意见。
测评测评,既要有测,同时还要有评。我的测评内容大致包含一下几个部分:
1、Nuleo生态系统
2、初识STM32L476 Nuleo
3、STM32L476资源简介
4、STM32L476 Nuleo板资源简介
5、开发环境搭建
6、第一个程序
7、功耗测试
8、结语
9、参考
=======================================================
一、Nuleo生态系统
意法半导体推出的Nucleo系列开发板结构简单自由、灵活可扩展,STM32 Nucleo系列均采用64Pin的芯片作为主控处理器。目前推出了多个系列的开发板包括:
NUCLEO-F030R8
NUCLEO-F070RB
NUCLEO-F072RB
NUCLEO-F091RC
NUCLEO-F103RB
NUCLEO-F302R8
NUCLEO-F303RE
NUCLEO-F334R8
NUCLEO-F401RE
NUCLEO-F410RB
NUCLEO-F411RE
NUCLEO-F446RE
NUCLEO-L053R8
NUCLEO-L073RZ
NUCLEO-L152RE
NUCLEO-L476RG
Nucleo系列不仅仅再是提供一个简单开发板,通过ARM生态圈的庞大资源以及Arduino接口的支持,Nucleo的开发更为简单,同时具有 mbed 功能,除此还提供ST Morpho 扩展排针,可连接微控制器的所有周边外设。
意法半导体推出的Nucleo开发板基本上定价都在10美元左右。
二、初识STM32L476 Nuleo
1、首次打开包装,非常熟悉的Nuleo风格映入眼帘,包装非常简单,出处体现低碳环保理念,最上面大大的型号——STM32L476 Nuleo:
2、包装里的便签的颜色在STM32不同系列中,颜色也是不一样的,这个绿色表示低功耗的系列。
左下角是板载的STM32L476RG芯片的主要特点介绍。
右边是STM32L476 Nuleo板子的接口说明,方便大家在测试学习中查看方便。
3、背面:
最上面给大家介绍一下初次拿到板子后,延时板载程序的步骤和现象。
中间EMBEDDED SFTWARE是ST给大家介绍最新的STM32CubeL4库。看来官方是非常推荐使用这个Cube库的,这样可以使使用者更快速的开发使用这款处理器。
最下边是给大家推荐使用的开发工具。
4、这个是STM32L476 Nuleo主板,可以看出,秉承了Nuleo的一贯风格,电路板大小尺寸、布局等都一致,让你乍看来,是无法判断是哪一款。
5、这是背面,大大的Nucleo标志。
6、STM32L476 Nuleo板子自带有实例程序,那我们当然要初次上电看看效果了。
(1)首先检查JP1跳线帽没有短接,JP5短接到右侧U5V测,JP6短接。
(2)将板载的USB接口连接到电脑给板子供电,就会发现LD1和LD3两个红灯点亮,LD2这个用户LED快速闪烁。
(3)按下左边绿色的用户按键B1,就会发现绿色的LD2灯闪烁的频率变慢。
(4)再次按下左边绿色的用户按键B1,就会发现绿色的LD2灯闪烁的频率变快。
(5)再次按下左边绿色的用户按键B1,就会发现绿色的LD2灯闪烁的频率更快。回到初始状态了。
(6)可以看到这个Demo程序是通过用户按键B1调整绿色的LD2灯闪烁的频率,共有3种状态。
7、注意:
在这里如果不使用电脑,而使用手机充电器等USB接口的电源给STM32L476 Nuleo板子供电的同学请注意了,默认是无法演示执行你的程序的,当然也不是大家的板子坏了,而是需要将板子最上面的JP1这个跳线短接到一起,如下图:
三、STM32L476资源
我们这款Nuleo板子的主角STM32L476RG是一款超低功耗微控制器。隶属于STM32 L4系列,是ST的一款新品,可以看到,官网首页STM32 L4的广告。
STM32L4系列打破了超低功耗领域的性能限制。基于带有FPU的ARM® Cortex®-M4内核以及意法半导体ART Accelerator™,该系列在80 MHz的CPU频率下性能达到100 DMIPS。
根据EEMBC (Embedded Microprocessor Benchmark Consortium 嵌入式微处理器基准评测协会)最新发布的标准化ULPBench超低功耗微控制器能效对比评测中,意法半导体的STM32L4系列微控制器获得了150.7分ULP-Mark,使设计人员无需以牺牲功耗为代价,便可以得到更高的性能和更大的存储容量。
STM32L4系列包含2条不同的产品线:STM32L476(USB、LCD)和STM32L486(USB、LCD、AES)。下图是STM32 L4系列的成员,标红的是板载的芯片。
其主要特点:
• 80MHz ARM Cortex-M4内核,带DSP指令集和浮点运算单元(FPU)
• 超低功耗MCU中的性能冠军:100 DMIPS / 273 CoreMark
• 高达1MB闪存和128KB SRAM,集成智能低功耗外设和安全保密性能
1x 低功耗UART
2x 16位低功耗定时器
多达7x SPI,包含1x Quad SPI
独立的外设通讯时钟
• 杰出的低功耗模式
动态运行模式:低至100 μA/MHz
STANDBY模式 + 32 KB RAM:360 nA
STANDBY模式:130 nA
SHUTDOWN模式:30 nA
VBAT模式:4 nA
• 唤醒时间:STOP模式下仅需5 μS
• 特别适合以下应用
智能表计
可穿戴设备
工业传感
STM32L476RG的功能图如下
据了解:ART加速器、Flash零等待执行、动态电压调节、FlexPowerControl智能架构,7种电源管理模式(运行、低功耗运行、睡眠、低功耗睡眠、停止1、停止2、待机、关闭)。还有ST的Batch Acquisition Mode(BAM),其允许在低功耗模式下与通信接口足够的数据交换。FlexPowerControl是在低功耗模式时保持SRAM待机,为特定外设和I/O管理独立电源。
四、STM32L476 Nuleo板资源简介
Nuleo系列的开发板风格一致,电路也几乎完全一样,只是在接口上不同的微控制器略微不同。
1、下图是Nuleo板子的结构图
由图大家可以看到,板子最上面是一个ST-Link,通过SWD方式连接目标微控制器,下部的微控制器和接口(Arduino和Morpho接口), 以及复位按钮和用户LED、用户按钮。
2、下图是STM32L476 Nuleo板子的照片和其功能分布,上面包涵了板子的大部分器件。
3、下图是板子的背面,主要是短路用的0欧电阻。
4、STM32L476 Nuleo基本板载资源
(1)STM32L476RGT6微控制器。
(2)支持Arduino UNO R3 Shield扩展板,微控制器所有IO口引脚通过排针座引出。
(3)ST-LINK/V2-1调试器。
(4)3个LED:一个USB通讯LED、一个电源LED、一个用户LED。
(5)2个机械按键:复位RESET、用户USER B1。
(6)USB接口的3个不同功能:虚拟串口、容量存储、调试接口。
(7)3种不同供电方式:mini USB接口供电;IO引脚用电;通过Arduino UNO R3 Shield接口供电。
(8)支持Keil、IAR、embed在线IDE的设计工具。
5、STM32L476 Nuleo接口定义
(1)Arduino接口
(2)Morpho接口
6、我也用了几块Nuleo板子了,今天也来说一说:
(1)个人感觉板子背面的Morpho接口能不能不用针的,有没有一面是排针,一面是孔的接口,感觉电路板背面有这么多针,很容易搞短路。
(2)在这就是背面的短路用的0欧电阻,大家可以根据需要,结合电路焊上或去掉。但是也有一些不便的地方,焊上去还好说,取下来就得要热风枪了。
五、开发环境搭建
STM32L476 Nuleo的开发环境还是比较多的,主流的IDE都支持,比如MDK、IAR、GCC-based IDEs,当然还有最近比较火的mbed在线IDE。
不过据统计,国内用的开发环境MDK相当多,当然,我也不例外,比较热衷于MDK。
由于STM32L476这个微控制器比较新,就需要最新的MDK的支持。
除了MDK这个IDE之外,我不得不对ST的图形开发工具STM32CubeMX表示赞赏,以图形化的界面配置来帮助开发者快速配置工程、实现初识化代码的功能。
我的测试环境:
MDK5.16+STM32CubeMX4.10+Keil.STM32L4xx_DFP.1.0.0.pack + STM32Cube_FW_L4_V1.0.0
1、当然要到MDK的官网下载最新的 MDK5.16
网址:http://www.keil.com/arm/mdk.asp
2、然后下载STM32CubeMX
网址:
ttp://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1533/PF259242?s_searchtype=partnumber
3、软件找好了,就开始安装了,这个我就不说了,一路下一步,没有悬念。
安装好就在桌面可以看到图标:
4、下面就是安装固件库和软件包了。
5、首先安装STM32L4 系列的软件包。
(1)打开MDK,点击install packs按钮
(2)打开软件包界面
(3)但是由于我的网速不给力,只能下载离线包安装了。
网址:http://www.keil.com/dd2/pack/
这个软件包我在周1、周2的时候一直下不下来,其他版本的都能下,直到周2晚上才能正常下载了,不知是不是开始网站的连接错误?
(4)下载下来后就可以安装了,可以双击安装,也可以在下图的位置导入:
6、安装STM32Cube库
(1)在STM32Cube MX中help菜单中选择安装库选项,在下图的位置选择我们使用的STM32L4系列的库,
(2)但是我的网速也比较慢,还是下载离线包安装吧。
网址:http://www.st.com/web/en/catalog/tools/PF261908
下载后得到离线
(3)在库的安装界面选择如图的按钮,从本机安装。
(4)但是却提示本安装包不适合此版本!
这是怎么回事呢,后来我仔细查了一下,原来最新的STM32Cube MX是4.10,上面支持的是stm32cube_fw_l4_v100,但是从官网上下载的只有1.1.0版本的,所以提示安装不上。
不知道这个问题ST公司注意到了没有。软件版本和库版本暂时不一致,库版本更新的快一些。这个问题截至到我写测评文档的时候还存在。
但是官网却没有提供老版本库的连接,个人建议能够把历史软件库的连接能够在网站上给出,万一谁需要的呢?虽然STM32Cube MX的库管理界面有历史库的更新选项,但没有连接可以提供用户自己下载。
(5)没办法,我的电脑在线下载Cube库慢,离线库又于STM32Cube MX软件不对照。最后没办法,只能抱着计算机跑朋友家下载了,可费了不少功夫。
不过还好,总算装好了。
六、第一个程序
开发总算环境搭建好了,下面还是写个程序练练手吧。
那就选大家拿到板子必做的LED灯闪烁吧。必修课。
1、打开STM32Cube MX
首先选择微控制器型号,STM32L476 Nuleo上控制器是STM32L476RG。(当然也可以按板子型号选择)
2、选择系统使用的引脚,并配置相应的功能,板载的LED2接到了PA5上面。
3、进行时钟树的配置。
刚打开,发现这个时钟树比其它系列的芯片庞大很多,满满的2屏。以后需要慢慢学习了,应该主要是为了低功耗而设计的吧,根据自己选择的模块有更灵活的配置方法。
当然第一个程序是让灯闪起来,不用过多的考虑,那就选择最高的时钟吧80MHz。
4、接下来对片内外设进行配置,当然,在这里只选择了PA5脚接LED,那就配置吧。
点开后进行相应的配置,不过发现STM32Cube MX 4.10上面有个问题,就是下面填写用户标号的地方,好像只能输入数字,英文字母无法输入,不知道这是我的电脑的问题还是系统的一个bug。之前的版本用的都是好好的。
5、配置完后,就可以自动生成初始化代码了,当然首先要进行工程设置,包括工程名称,存储路径,使用的开发环境IDE等,在这里使用的时MDK5.16最新板的,选择MDK-ARM V5。
6、点击确认按钮后,自动生成工程文件,然后选择打开工程,就可以打开工程文件了,下图是自动生成的工程代码。
7、在MDK中添加2行使灯闪烁的程序。
8、我习惯在调试程序之前把下面的选项勾上,这样程序下载进去后,可以直接运行看效果了。
9、最后效果就不上了,估计每个学习使用单片机的同学不知道做了多少遍,看了多少回了哈。
10、最后来说说我对MDK5.16+STM32CubeMX4.10开发的几点小小的体会:
(1)ST公司给大家提供的免费的STM32CubeMX图形配置工具非常实用,可以帮助开发者更快的生成工程文件,即使在实际当中不完全使用,使用这个做初始化代码工作还是非常方便的。
(2)ST公司提供的STM32Cube库也非常好,不同系列之间的迁移非常方便,我之前使用的时STM32F系列的芯片,L系列的还没有接触过,但使用库编程,基本功能还是可以很方便的实现。
(3)STM32CubeMX 4.10中在用户标签那里无法输入字母。这个不知是不是我的电脑问题,回头再试试看。
(4)关于USER LABEL这个,我想多说一下,就是这个用户定义的标签要是能同步到生成的MDK工程文件中,用宏定义#define一下就更加完美了。
(5)关于STM32Cube库个人认为可以在非一下层次,比如HAL层和Driver层,可以把底层的具体外设配置和基本功能放在HAL中,而像串口阻塞、非阻塞模式的等封装完整的函数放在Driver层中。
(6)个人感觉应该出个更详细的关于HAL库的说明,比如我想清楚某个中断标志,当然,后来我查了一下,在相应的模块的.h文件中已宏定义的形式给出了,但是.h文件中内容相当多,而且看起来感觉有点乱,甚至这点还没有以前的标准库看着清楚些。所以有个指引说明会更好些。
七、功耗测试
最后来个功耗测试吧,由于我第一次使用STM32L系列的板子,查了一下,在STM32Cube库的工程样例中提供了关于功耗测试的工程,就拿这个来测试测试,看看功耗有多低?
1、工具准备:
我手头没有专业的电流表,只有一个万用表胜利VICTOR VC9806+ 4位半的,有个200uA的档位,凑合着用吧。
2、测试工程:
位置:STM32Cube_FW_L4_V1.0.0\Projects\STM32L476RG-Nucleo\Examples\PWR\PWR_ModesSelection
3、先来分析一下这个程序吧:
(1)首先是私有变量定义和私有的函数定义
(2)在住函数里首先对系统进行初始化,然后用串口输出提示信息,可以通过提示看到,则个程序可以测试13种状态,还是比较全的嘛。
(3)下面就是等待串口输入命令,并获得命令以便进行下一步的处理。
(4)最后是根据输入的命令来判断该执行那个工作模式的函数。
(5)下面来看一下Shutdown模式的程序吧,根据提示信息,进入该模式后,测量完电流需要按复位按钮重新启动程序,然后再进行其它模式的测量。
其它模式就不分析了,这次主要是进行测试功耗嘛。
4、下面就该测试了:
(1)将程序下载到STM32L476 Nuleo的微控制器中。
(2)将板子中间的JP6跳线帽去掉,这个地方是我们测试电流大小的接口。
就是下图这个位置。
(3)然后用万用表表笔接在两个引脚之间,红表笔接右,黑表笔接左,万用表打在电流档。
(4)按下复位键,在串口屏幕上打印出如下信息:
此时万用表显示0.6989mA,不到一个mA。
(5)在计算机上输入0,进入SHUTDOWN模式,此时发现电流显示0.0001mA不到1个uA。
这时量程选择不合适,切换到200uA档,发现读数显示0.07uA,也就是70nA,这个够小了吧。虽然和官方给出的30 nA的相比有一定差距,但是由于仪器,测试环境等限制,这个已经不错了。
(6)复位后,重新在串口输入1命令,进入STANDBY模式,这时万用表显示电流0.16uA,也就是160nA。
(7)复位后,重新在串口输入2命令,进入STANDBY+ RTC模式,但启用RTC,这时万用表显示电流0.75uA,也就是750nA。比不带RTC的模式多了590nA。
(8)下面是在STANDBY + RTC + SRAM2模式,在上一模式基础上又添加了SRAM2,这时万用表显示电流1.00uA,也就是1000nA。又多了250nA的电流。
(9)下面是在STOP2模式,这时万用表显示电流1.44uA。
(10)下面是在STOP2+ RTC模式,这时万用表显示电流2.07uA。
(11)下面是在STOP1 + MR OFF模式,这时万用表显示电流2.11uA。
(12)下面是在STOP1 + MR OFF + RTC模式,这时万用表显示电流8.35uA。
(13)下面是在LPSLEEP 2MHz - FLASH OFF模式,这时万用表显示电流83.13uA。
(14)下面是在LPRUN 2MHz - with FLASH ART ON这时万用表显示电流0.2745mA。也就是274.5uA。可以看到,低功耗的睡眠和运行模式,功耗明显变化。
(15)下面是在SLEEP Range 2, 24MHz - with FLASH ART ON这时万用表显示电流0.8442mA。
(16)下面是在SLEEP Range 1, 80MHz - with FLASH ART ON这时万用表显示电流3.075mA。
可以看到,时钟频率对功耗有明显的影响。
(17)下面是在RUN Range 2, 24MHz - with FLASH ART ON这时万用表显示电流2.558mA。
(18)下面是在RUN Range 1, 80MHz - with FLASH ART ON这时万用表显示电流10.546mA。
(19)最后把测试的数据放在表里对比一下:
5、从功耗的测试结果我们可以看出
(1)单独的STM32L476RG芯片功耗还是相当第的,这也是L系列的主要特点。
(2)时钟频率对功耗的影响比较大。
(3)在具体使用时,可根据需要选择不同的工作模式,以降低功耗。
(4)在使用时,关闭不需要的模块可以降低功耗。
(5)由于条件所限,不能与其它同类型的微控制器比较,有机会找个同性能的其它芯片测试对比一下。
八、结语
以上便是我的这次STM32L476 Nuleo的测评,时间比较紧,只是说了些皮毛的东西,随后有时间再慢慢学习。给大家带来更详细的分享。欢迎大家交流。
最后再次感谢EEWORLD的eric_wang论坛给我这次测试的机会!
九、参考
(1)意法半导体:突破4nA超低功耗,STM32L4做到了——http://www.eefocus.com/mcu-dsp/344957
(2)STM32L4 series of ultra-low-power MCUs——http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1580/LN1840
(3)【Nucleo深度评测】之一STM32L053低功耗测试——https://bbs.eeworld.com.cn/thread-452363-1-1.html
(3)超低功耗MCU是怎样炼成的?——https://www.eeworld.com.cn/mcu/2015/0410/article_19307.html
(4)STM32Cube_FW_L4_V1.0.0库例程
==========================================
在这里编辑文本好麻烦,我调格式图片就花了2个多小时,终于基本搞定了!