低功耗,大容量--NUCLEO-L496ZG开发板评测 微控制器(MCU)之间的竞争越来越激烈了。主要原因之一是生产MCU的门槛相对降低了,只需要向像ARM这样的厂商购买IP授权,然后将它整合到一个芯片上,就可以出售产品了。这样描述MCU的制造虽然有点过于简化了,但MCU生产厂商及MCU产品越来越多已是不争的事实。然而生产制造是一方面,销售产品就是另一个大问题了。所以各MCU厂商都会设计各种评估板,一方面可以帮助用户快速体验及评估产品性能,另一方面也是招揽潜在的研发人员及学生。 ST意法半导体无疑很聪明,ST推出的系列MCU不仅功能齐全,适用面极广,同时在评估板及软件生态方面也不遗余力,对研发人员及潜在的客户极力拉拢。 ST官方推出的Nucleo系列板已有20多款,涵盖了从Cortex-M0到Cortex-M7大部分的产品,也就是从低功耗到高性能的全系列产品。其中L4系列综合了低功耗与高性能的优势,算是一款折衷的方案。L4系列从最初的L476/L486,发展到今天的L496及L4A6,在系统主频方面没有做大的更改,主要在存储及外设方面做了更多的改进,使得产品适用面更广,用户选择面也更广泛。 本次评估的NUCLEO-L496ZG是NUCLEO144系列家族的新品,代表了L4系列最高的水准。 ST提供的评估板包装基本就是一样,塑料一体成型的包装盒,凸凹设计方式也可以有效保护开发板。 包装盒内一般衬有一张简单的用户快速入门指南,帮助用户快速上手,同时上面还列出了评估板的具体型号,简单明了。 NUCLEO系列评估板基本都采用公版PCB设计,这样的好处是只要用户使用过其中的一款开板,对后续同一款式的开发板元器件的布局就会比较了解了。如果你以前使用过NUCLEO144评估板的话,像上面一些主要元器件的功能及位置应该会比较熟悉。 NUCLEO-L496ZG评估板的主要特性包括 板载STM32L496ZG微控制器,LQFP144针封装 板载SMPS(只针对P结尾的开发板),使用SMPS生成Vcore所需供电,可以极大的减少运行模式下的功耗 3个用户LED灯 两个按键,一个用户可编程按键及一个复位按键 板载LSE晶振 两种扩展接口,兼容Arduino UNO R3的ST Zio接口;引出全部可用GPIO的ST Morpho接口 USB OTG接口 板载ST-LINK/V2-1调试/下载器 4种供电方式,ST-LINK USB供电,Vin, E5V及+3.3V
开发板背面包含大量用户可调整的Solder Bridge,通过调整这些设置,可以调整开发板的一些硬件设置。 举例来说。NUCLEO系列很多都没有提供MCU的外部晶振,解决的办法主要有两个,一是使用MCU内部的HSI作为MCU的时钟源,另一种方法是使用ST-LINK上引出的MCO作为MCU的时钟源。另外对于L4系列来说,还有一个叫MSI的时钟,这是专门为低功耗设计的一种新型时钟源,可以动态调整时钟频率,从而得到更符合实际需要的时钟树设置。 参考官方给出的原理图,其中使用MCO时钟源的部分电路如下 看到ST-LINK引出的MCO要经过SB148,默认是开路,所以在该评估板上要使用MCO作为时钟源的话,就需要手动将SB148连接起来,准备一个0欧的电阻或者直接连接起来即可。不过一般在L4上都是使用MSI提供时钟源,这样可以更方便的实现低功耗特性。 评估板上集成ST-LINK/V2-1,使用的是STM32F103C8T6作为主控,用来调试代码并且支持mBed拖放式代码上传功能。ST-LINK/V2-1还可以用来给其它没有集成调试器的开发板作为独立的调试器,通过SWD接口引出的接口连到其它开发板的调试接口来进行调试。 STM32L496ZG是L4系列MCU中的高端产品,MCU集成1MB/320KB的FLASH/SRAM存储组合,LQFP144封装。该MCU的主要特性如下 ARM Cortex-M4内核,最高工作主频80MHz,具备FPU、ART加速技术,CoreMark测试得分为273.55(@80Mhz) 超低功耗,运行模式下功耗为37uA/MHz(SMPS模式下),停机模式(Stop mode 2)下功耗约2.57uA,待机模式下最代功耗约108nA 丰富的外设支持,主要包括RTC、SPI、I2C、UART等常规外设的支持 8X40或4X44 LCD支持 USB OTG全速支持 LPTIMER及LPUART支持
STM32L496ZG内部功能框图如下 NUCLEO-L496ZG属于核心板系列,所以开发板上基本没有提供用户所需的外设,而是将这一选择留给了用户自己。为了方便用户连接外设,评估板引出了全部可用的GPIO接口,通过ST Zio及ST Morpho引出,另外开发板上引出了USB OTG接口。 这是ST Zio及ST Morpho的特写,ST Zio兼容Arduino UNO R3引脚,从上图可以看到Arduino接口对标注了各引脚名称;ST Morpho接口只预留了焊盘。 引出的USB OTG接口,方便连接USB存储设备。 软件方面,ST的HAL库已渐入佳境。STM32CUBEMX图形化的配置方式极大的减轻了程序员的负担,STM32CUBEMX可以直接导出支持主流IDE的工程也让用户省心不少。 让我们使用STM32CUBEMX来建立一个简单的工程,然后添加CoreMark测试代码到工程中,测试MCU的CoreMark的跑分结果。 启动STM32CUBEMX,建立一个新工程,如下图所示,选择MCU型号 选择好MCU的型号之后,启用2种类型的外设:GPIO及LPUART1。GPIO用来点灯,LPUART1用来输出CoreMark测试结果。具体配置时钟时要注意,由于SB148默认开路,所以不能使用ST-LINK的MCO作为时钟,建议选择MSI作为时钟源,这也是ST推荐的用法。 此处的PLL Source选择的是MSI,同时还可以指定MSI的频率,该选项在实现低功耗时特别有用。 最后生成指定的工程,这里选择生成IAR的工程,设置参数参考如下 特别注意此处堆栈的值设置,因为CoreMark代码默认情况将数据保存在栈中,所以此处的栈的值要设得大一点,否则容易导致Hard Fault的错误。 CoreMark的移植也比较简单,与移植相关的代码都放在core_protme.c/h文件中,修改几个简单的设置就可以了。笔者将移植好的代码放到了github上面,按照README.md文件的说明,可以很轻松的实现CoreMark的移植及测试。 最终的测试结果如下 与ST宣称的273.55分大约相差了10分的样子,这大概与笔者的优化水平有关,不过总的来说,测试结果还是令人满意的。 L4系列向来以低功耗著称,同时ST的开发板上一般都有一个IDD跳线设置,专门用来供用户测试系统运行电流,简单的测试可以使用万用表就可以实现。 除了可以使用万用表或专门的电流测试仪器来测试电流外,其实在STM32CUBEMX里也有一个专门的功耗估算工具,在STM32CUBEMX的Power Consumption Calculator选项卡里,用户可以添加不同的功耗估计方案,如下图是一种功耗估算方案的结果 这里估算是RUN模式下的功耗情况,点击上图中的绿色+按钮,可以添加多种不同类型的估算方案,对每种方案,用户可以指定不同的运行参数以得到一个大致的估算值,如下图是指定Run模式下的电流值估算 指定的值主要包括运行模式、VDD及主频等参数,我们看到在RUN模式下,电流消耗值约为9.44mA。窗口的右边是具体的外设启用情况,比如是否使用了UART、GPIO等,不同的外设配置,最终计算出来的电流值也会相应变化。 接下来使用HAL库中的Example_LL目录下提供的代码来实际测试低功耗的运行情况。LL是low layer的缩写,这是ST针对底层推出的一种新型支持库,相比HAL库来说,LL库更多的使用寄存器模式来配置及操作系统,非常接近硬件直接操作,所以应该能提供代码运行效率,减少代码尺寸,相应的降低了系统功耗。 测试用的工程名为PWR_OptimizedRunMode,该工程主要测试不同频率下的RUN模式的电流值,测试参数设置如下 [td]频率 | VCore(V) | IDD | 80MHz | 1.2 | 9.46mA | 24MHz | 1.0 | 2.51mA | 100KHz | 1.0 | 0.055mA |
ST在L4系列中引入了MSI时钟,这是一种能提供多尺度时钟的新型机制。MSI时钟的全称是multi-speed internal (MSI) RC oscillator,它能提供 100 kHz,200 kHz, 400 kHz, 800 kHz, 1 MHz, 2 MHz, 4 MHz (default value), 8 MHz, 16 MHz,24 MHz, 32 MHz and 48 MHz等不同类型的输出值,供PLL选择。这里给出一段将时钟调整为100KHz的代码,供参考 - void EnterRunMode_UpTo80MHz(void)
- {
- /* 1 - Set Voltage scaling to LL_PWR_REGU_VOLTAGE_SCALE1 before increase Clock Frequency */
- LL_PWR_SetRegulVoltageScaling(LL_PWR_REGU_VOLTAGE_SCALE1);
- /* 2 - Wait Voltage Scaling 1 before increase frequency */
- while(LL_PWR_IsActiveFlag_VOSF() != 0)
- {
- };
- /* 3 - Adjust Flash Wait state before increase Clock Frequency */
- LL_FLASH_SetLatency(LL_FLASH_LATENCY_4);
- /* 4 - Set Frequency to 80MHz (PLL) */
- LL_RCC_MSI_SetRange(LL_RCC_MSIRANGE_6);
- /* Enable PLL and wait for activation */
- LL_RCC_PLL_Enable();
- LL_RCC_PLL_EnableDomain_SYS();
- while(LL_RCC_PLL_IsReady() != 1)
- {
- };
- /* Switch on PLL. Previous configuration done by SystemClock_Config is used */
- LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);
- while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL)
- {
- };
- /* Set systick to 1ms in using frequency set to 80MHz */
- LL_Init1msTick(80 * 1000000);
- /* Update CMSIS variable */
- LL_SetSystemCoreClock(80 * 1000000);
- }
复制代码
LL库目前的支持还相对有限,目前主要支持一些系统设置功能,具体外设的支持及更完善的库结构估计在后续的版本中会进一步添加。 下面是该段代码运行时万用表测得的实际值 对比该值可以看到与STM32CUBEMX估算的值9.44mA还是非常接近的。 总结来说,NUCLEO-L496ZG开发板为用户带来了ST最新的STM32L496ZG体验。 做为L4家族的高端产品,除了沿袭一贯以来的低功耗特性,这次的升级带来的是更大的存储能力,1MB的FLASH存储及320KB的SRAM存储,使得L4系列在享受低功耗优势的同时,对LCD、音频处理等需要更多存储的应用中亦不遑多让,不再受限于存储能力偏小而带来的种种限制。
参考资源:
|