本帖最后由 netlhx 于 2016-5-10 22:57 编辑
NUCLEO-L011评测
STM32的产品线似乎越来越长,不知道能不能照顾得过来。不过这些不是我们应该担心的事,作为产品研发人员,你要关心的重点在于:ST又为我们提供了什么好的新东西,都有哪些特性,能不能满足咱产品的需求,同时在价格、性能、功耗之间做一个选择。
索取样片、画PCB,做评估板,也许是你生活中的一部分了。不过ST也想到了这一点,给你官方的评估板,让你折腾。
在林林总总的MCU生产厂商中,要说评估板的类型、覆盖程度,ST应该算是NO. 1了吧!从最初的DISCOVERY板到NUCLEO板,然后再到NUCLEO板的分化演变,变成了今天的NUCLEO32,NUCLEO64和NUCLEO144,不可谓不用心。
NUCLEO32是NUCLEO系列中的小弟,价格便宜,体积小巧,功能足够!今天拿到的NUCLEO-L011K4就是其中一款,好好体验一把!
一、初识
外观
NUCLEO32素有拇指板之称,小到和拇指一样。
包装盒,简单、环保
拆开包装后,发现开发板只有拇指大小,正面是STM32L011K4T6 MCU
背面是啥,STLINK/V2-1,用来下载/调试用的
MCU特写,注意到一个细节,以往的芯片都是以ST开头,这里换成了ES开头,仅仅是编号的改变么?
拇指板的优势在于小,灰常的小!要用它来做个小控制器,随便塞到一个小空间里,不占地!
特性
NUCLEO32虽小,但内涵不错。
* MCU使用的是STM32L011K4T6,基于CORTEX-M0+,16KB/2KB的FLASH/SRAM组合
* ARDUINO NANO扩展接口
* 板载STLINK/V2-1,调试/供电二合一
* 3个LED灯,用于指示电源、通讯及用户编程
* 复位按键,太小了,小得几乎找不到
STM32L011K4T6的特性在于低功耗,据官方资料介绍,主要有以下特色
* ?0.23 μA Standby mode (2 wakeup pins)
* ?0.34 μA Stop mode (16 wakeup lines)
* ?0.67 μA Stop mode + RTC + 2 KB RAM retention
* ?Down to 79 μA/MHz in Run mode
* ?5 μs wakeup time (from Flash memory)
* ?1 μA 12-bit ADC conversion at 10 ksps
这些指标看起来确实令人心动。当然不止如此,麻雀虽小,其它外设一应俱全。多达10路12位ADC通道,两个超低功耗比较器。7通道DMA控制器,支持ADC,SPI, I2C等操作。2个USART接口,1个SPI接口,一个I2C接口,多达8个定时器,不过似乎在NUCLEO-L011上并没有全部引出。
一般的控制应用应该差不多了。
二、上电
NUCLEO-L011使用MICRO USB母头接口,兼供电和通信之用。准备一根USB转MICRO USB公头数据线,连接好设备。
上电后,USB开始枚举设备,直到与PC端协商成功后才会给开发板供电。连接上PC后,发现两个东西
这个新出现的盘符是用来结合MBED编程用的。
这个表明你的驱动没有安装成功。到ST官方去下载STLINK驱动,如果安装了MDK开发环境的话,MDK安装目录下面也有的。
安装驱动
装好驱动后的设备管理器
一切正常,看看开发板,几个指示灯应该会亮。LD1和LD2常亮,LD3开始闪烁。按官方说明,拔掉开发板上的跳线帽,指示灯的闪烁频率开始变化。当然这一切都是内部代码在控制着。
三、试用
STM32开发板均支持丰富的开发环境。经典的MDK,IAR自是不用说;ARM自家发起的MBED云端开发环境,可以像使用ARDUINO一样来使用STM32。除此之外,基于ECLIPSE的开发环境如AC6,使用起来亦非常方便。
关于库函数的支持,ST官方最初使用的是STD库,即标准库。不过STD库从3.5之后就不再更新,转而使用新型的HAL库,从名字可以看出,这是基于硬件抽象层设计理念的一种函数库,目的是为了更好的抽象硬件层,尽可能将硬件底层细节进行封装,提供更高层的功能库。这样也便于硬件移植。为了和HAL库配合,进一步减少程序员的负担,ST还推出了STM32CUBEMX代码生成工具,在熟悉了底层的基本硬件工作原理之后,使用简单的指点鼠标即可完成一个工程的框架。注意这里指的是工程框架,而不是逻辑代码本身。毕竟,STM32CUBEMX还没有聪明到和人类大脑一样。关于STM32CUBEMX及HAL库的相关介绍,请参考官方资料。
对于大部分MCU开发板而言,准备开发之前,需要了解一些硬件的配置,特别是时钟的配置。
NUCLEO-L011默认没安装HSE,但配备了32.76K的LSE。所以要配置时钟树的话,选择HIS似乎是不二选择。不过STM32的L系列引进了一种新的时钟,称之为MSI。MSI是multispeed internal的简称,源自内部晶振,当系统复位及从待机模式唤醒时均默认使用MSI时钟。在L011中,MSI共有七种频率可选,通过RCC_ICSCR 寄存器中的MSIRANGE[2:0] 来进行选择。MSI主要用于低功耗应用场景。
试用一:点个灯
点灯似乎已成第一个程序的惯例,类似于C的HELLO WORLD程序。本文未能免俗,暂借一灯大师的法号一用,用后归还,不敢以大师自居!
代码片段:时钟配置参数,HSI16经配置后SYSCLK值为32MHZ
简单的点灯代码
试用二:定时
简单的点灯实在泛善可陈,不过定时器就不同了,可以完成很多的功能。比如生成PWM输出,用来控制电机的好手啊。下面就来试试。使用TIM2,TIM2内部挂接在APB1总线上,APB1最大可配置为32MHZ工作频率。定时器的配置稍复杂一点,下面放上STM32CUBEMX的截图
上述配置生成1KHZ的PWM波,占空比为30%。
测试结果如下
大体准确,只是在US级别会有几个误差。官方文档中特意提到了,如果在使用UART时,如果波特率大于9600,则建议使用STLINK引出的MCO做为MCU的外部时钟频率,这样准确率会更高。这一条应该适用于整个开发板。
试用三:低功耗
关于低功耗,可以使用固件库中的例程来进行测试。固件库中包含丰富的测试例程,具体例程如下
打开PWR_STANDBY中的测试例程,编译并下载到开发板,然后进行电流测试。由于没有精密的电流测试仪器,所以用万用表做一个简单的检测。代码上电后处于RUN模式,LD3点亮。5S过后,系统进入STANDBY模式,两次测试所得结果如下
RUN模式下的电流值
STANDBY模式下的电流值,与官方标称的0.23uA略有差别,但在可接受范围之内
其它低功耗模式未一一测试。管中窥豹,总体特性可见一斑。
结论
NUCLEO-L011评估板基于CORTEX-M0+内核,属于低功耗中的新品。开发板体积小巧,可以直接集成到需要MCU控制器的应用中。在如此小的体积中,还集成了STLINK/V2-1,使得程序下载和调试非常方便,这也是NUCLEO系列板标配。
默认情况下,NUCLEO32板均未配置外部晶振,部分型号配置了LSE外部晶振。在需要高精度时钟的情况下,可以使用STLINK引出的MCO做为外部时钟源,这种设计还是很方便的。
STM32L系列低功耗特性令人印象深刻,MSI时钟的引入,为低功耗模式开启了另一种可能。
附录
STM32L011K4介绍:
http://www2.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32l0-series/stm32l0x1/stm32l011k4.html
NUCLEO-L011介绍:
http://www.st.com/web/catalog/tools/FM116/CL1620/SC959/SS1532/LN1847/PF262595?s_searchtype=partnumber