“小身材,大智慧”——STM32 NUCLEO-F031K6测评

经过几天的学习试用,有些体会与收获,现在给大家带来我的第一个测评贴,希望不辱使命。测评内容有不足之处,希望大家批评指正。
本次测评包括以下内容:
1、NUCLEO简介
2、NUCLEO-F031K6初识
3、STM32F031K6心(芯)
4、NUCLEO-F031K6探索
5、Mbed云端开发
6、结语
=========================================================
一、NUCLEO简介

ST(意法半导体)公司在2014年推出了Nucleo开发平台,以成本低、扩展方便、通用性强等特点,被越来越多的工程师和电子爱好者使用。Nucleo最开始推出时,使用64脚的MCU做主控制器,称为Nucleo 64。2015年又推出新的32引脚的Nucleo开发平台,称为Nucleo 32。就在这几天,发现Nucleo家族又多新成员,采用144引脚作为控制器的Nucleo144。这样下来,Nucleo开发平台就基本涵盖了ST公司的性能高中低、封装小中大等几十种种控制器,可谓非常丰富!
不论哪种款Nucleo板,在设计时都一成不变的带有ST-LINK/V2-1编程调试器、Arduino接口、基本外设(LED、Button)、支持ST的最新HAL固件库、STM32CubeMX硬件配置工具、多种集成IDE(IAR, MDK, GCC-based IDEs)、Mbed云端开发等共同特点。
STM 32的 Nucleo开发板的这一设计,为用户提供了一个经济实惠且灵活的方式与任何STM32微控制器搭建技术原型,并可从性能,功耗和功能的各种组合中做以选择。给开发者更多的选择,同时又可在不同微控制器之间迁移开发提供便利,不需要花费更多的时间就可以轻松上手。
下面分别是Nucleo 32、Nucleo 64、Nucleo 144的图片,大家可以窥见一斑。

图1-1Nucleo 32开发板

图1-2Nucleo 64开发板

图1-3Nucleo 144开发板

二、NUCLEO-F031K6初识
这次测评的开发板是NUCLEO-F031K6,是隶属于Nucleo 32系列,采用携带方便的吸塑包装,只包含了拇指大小的NUCLEO-F031K6开发板。

图2-1吸塑包装图

拿在手里,NUCLEO-F031K6开发板有拇指大小,小巧玲珑。

图2-2NUCLEO-F031K6开发板

来看一下具体大小,通过实测,开发板长不足5.5cm,宽不足2cm。其中上下两个芯片分别是电源开关IC(ST890CDR)和主控制芯片STM32F031K6T6。

图2-3NUCLEO-F031K6开发板正面

下图是NUCLEO-F031K6开发板背面图,可以看到32引脚Nucleo板同样自带了ST-LINK/V2-1调试器/编程器。

图2-4NUCLEO-F031K6开发板背面

正好手头有一块NUCLEO-F030R8开发板,把32引脚的NUCLEO-F031K6和64引脚的NUCLEO-F030R8放在一起合影,更加凸显NUCLEO-F031K6的小巧。

图2-5NUCLEO-F030R8与NUCLEO-F031K6对比

通过两者的对比,可以看出,两者都配备ST-LINK/V2-1调试器/编程器;有简单的板载外设;提供Arduino接口;多种供电方式等。
但两者也有不同,比如最上面的USB接口,NUCLEO-F030R8采用的是mini USB接口,而NUCLEO-F031K6采用更小的mirco USB接口;前者不但提供Arduino UNO R3接口,同时还提供更多引脚的ST Morpho接口,而后者仅仅提供了Arduino™ nano外扩接口;前者MCU有外接32768晶振,而后者MCU无外扩晶振(虽然有一个晶振焊盘)。
NUCLEO-F031K6开发板对外提供了Arduino™ nano接口,方便外接附件,给用户提供了一个更加灵活的开发平台。具体的Arduino™ nano接口定义可以在包装的说明页找到,大家可以在这里了解NUCLEO-F031K6接口定义和开发板的主要特点等信息。

图2-6NUCLEO-F031K6说明页正面

可以看到,NUCLEO-F031K6开发板采用32脚的STM32F031K6T6,属于ARM® 32-bit Cortex®-M0 CPU,主频高达48 MHz;32-KB Flash存储器和4-KB SRAM存储器;提供Arduino™ nano外部接口;板载ST-LINK/V2-1调试器/编程器;支持Mbed云端开发。
在说明页的背面,有开发板的快速使用、开发工具和系统配置等要求。

图2-7NUCLEO-F031K6说明页背面

通过上面的Getting STARTED,我们来开启NUCLEO-F031K6的体验之旅吧。
1、检查确认开发板背面的跳线接口JP1通过短接帽短接(不容易找到,位置在开发板背面最下部)。
2、将NUCLEO-F031K6开发板用USB type A到mirco-B的转接线连接至电脑,大家就会发现ST-LINK/V2-1调试器/编程器指示灯LD1和电源指示灯LD2点亮,同时用户指示灯LD3开始闪烁。
3、在开发板正面将Arduino™ nano接口的左面CN3接口的D2(5脚)和GND(4脚)的跳线帽去掉,就会发现用户LED灯LD3的闪烁频率变快了。
这个DEMO演示在任何一块NUCLEO开发板上都是自带的例程。这里我们发现,在NUCLEO-F031K6开发板上没有为用户提供用户按钮(在NUCLEO64开发板上的蓝色用户按钮),而使用了跳线帽来模拟按钮的动作,这个想法还是比较巧妙的!
三、STM32F031K6T6心(芯)
NUCLEO-F031K6虽然小巧,但是不简单,源于它有一个强大芯,基于ARM® 32-bit Cortex®-M0 ,主频可达48MHz的STM32F031K6T6。
STM32 F0是入门级Cortex™-M0微控制器MCU,特别适合成本敏感型应用,集实时性能、低功耗运算和先进的STM32架构及外设于一身,包含有STM32F0x0、STM32F0x1、STM32F0x2几个系列。
其中STM32 F0x1系列,主要面向需要32位性能的8位和16位应用(如家庭娱乐产品、家用电器和工业设备等)。该系列产品具有16~256KB片上Flash存储器、多至32KB的SRAM和多种通信接口,包括USART、SPI、I2C、HMDI CEC和16位PWM电机控制定时器。该封装涵盖了从20到100引脚。具有更高的集成度,更好的用户体验。下图即是目前STM32 F0x1系列芯片,图中标红的是NUCLEO-F031K6开发板的板载MCU。

图3-1STM32 F0x1系列

下图就是NUCLEO-F031K6开发板的STM32F031K6芯。

图3-2 NUCLEO-F031K6开发板主控芯片

下图是STM32F031K6微控制器的内部结构原理框图。

图3-3 STM32F031K6框图

可以看到,其主要特点:
(1)内核基于ARM® 32-bit Cortex®-M0 CPU,主频高达48 MHz。
(2)32 Kbytes片内Flash存储器。
(3)4 Kbytes片内SRAM存储器,带有硬件校验。
(4)电源电压:2.0-3.6 V。
(5)低功耗模式:睡眠、停机和待机。
(6)晶振可用4至32 MHz。
(7)5通道DMA控制器。
(8)1×12位,1.0us的ADC(最多10个通道)。
(9)多达9计时器。
(10)1个I2C接口,支持快速模式加(1Mbit/s)。
(11)1个USART,支持主同步SPI和调制解调器控制。
(12)1个SPI高达18Mbit/s。
(13)串行线调试(SWD)。
(14)温度范围:-40-+105°C。
可以看到,STM32F031K6虽然身材小巧,但是这款MCU继承了ST的ARM Cortex™-M的优良基因,内部资源丰富,可应用与家庭娱乐产品、家用电器、物联网IOT和工业设备等。

四、NUCLEO-F031K6探索
NUCLEO-F031K6是在ST原有Nucleo的64引脚基础上,推出的最新的32引脚版本。
STM32 Nucleo-32系列开发板目前包括NUCLEO-F031K6、NUCLEO-F042K6、NUCLEO-F303K8、NUCLEO-L031K6等几个型号。
1、NUCLEO-F031K6开发板的主要特点:
(1)采用32引脚封装的STM32F031K6微处理器
(2)提供Arduino Nano扩展接口
(3)支持云端开发环境Mbed
(4)板载ST-LINK/V2-1编程调试器
(5)USB支持三种接口:
a.虚拟串口
b.存储器
c.调试接口
(6)可变的电源供电
a.USB接口供电
b.Arduino Nano扩展接口供电
(7)提供三个LED灯:
a.LD1作为USB通信指示灯
b.LD2作为电源指示灯
c.LD3是用户指示灯
(8)1个复位按键
(9)支持多种可选的集成开发环境:IAR™, Keil®, GCC-based IDEs等
2、NUCLEO-F031K6开发板功能配置
下图是Nucleo-32开发板的功能框图,可以看出开发板由1个STM32 MCU、1个ST-LINK/V2-1编程调试器、Arduino Nano扩展接口、1个复位按键和一个用户LED组成。

图4-1 NUCLEO-F031K6开发板功能框图

3、NUCLEO-F031K6与NUCLEO-F030R8功能对比
接下来我们还是拿同类型的NUCLEO-F030R8与NUCLEO-F031K6的对比,下图是比较能够说明两者的区别与联系。

图4-2 NUCLEO-F031K6与NUCLEO-F030R8功能对比

4、NUCLEO-F031K6开发板硬件布局

图4-3 NUCLEO-F031K6开发板顶层分布

图4-4 NUCLEO-F031K6开发板低层分布

通过布局图我们可以感觉虽然NUCLEO-F031K6开发板体积不大,但是该有的功能都有了,而且布局非常紧凑,电路板两面都有元件放置,正面是目标单片机部分,背面是ST-LINK部分,电路板上面一如既往的设计了许多锡桥跳线,可以很方便的对电路的功能进行设置,而且又不占用太多空间。

5、NUCLEO-F031K6开发板接口定义
NUCLEO-F031K6开发板提供Arduino™ nano接口,方便外接附件来搭建用户的应用系统。下图应该比较清晰的展示了开发板的接口分布。

图4-5 NUCLEO-F031K6开发板接口定义

可以看出,虽然开发板外扩接口比较少,但是通过端口复用功能,提供了非常丰富的功能。

6、ST-LINK/V2-1编程调试器
Nucleo-32开发板内嵌一个ST-LINK/V2-1编程调试器,通过SWD接口与目标MCU直接连接,可对目标MCU进行编程和调试功能,同时可实现:
(1)USB接口虚拟串口
(2)USB接口存储器
(3)USB电源管理
这里要注意,ST-LINK/V2-1编程调试器不支持SWIM接口和低于3V的工作电压。

7、供电电源选择
Nucleo-32开发板供电方式可以选择使用电脑的USB接口供电,也可以通过Arduino Nano接口的CN4选择外部电源:VIN(7-12V电源)、+5V(5V电源)或者+3V3引脚供电。在这里需要注意,如果选择+3V3接口供电,这时ST-LINK不能工作。下面来分析一下两种供电:
(1)使用USB接口对开发板供电
Nucleo-32开发板可以使用ST-LINK编程调试器的USB接口供电。这里要注意,在电脑的UAB主机在ST-LINK部分USB枚举完成之前,只能向开发板提供100mA电流。只有当枚举过程中,Nucleo-32开发板要求电脑的USB接口随后提供300mA的电流。如果电脑的USB接口能够提供300mA电流,这时目标MCU才能上电成功,同时LD2指示灯点亮,那么大家在随后开发过程中,应保证系统电流需要限制在最大300mA。如果电脑的USB接口不能提供300mA电流给开发板,那么目标单片机不会上电,这是红色指示灯LD2不亮,这是必须考虑使用外部电源为开发板供电。
注意,在开发板上,可通过SB1来配置最大消耗电流。如下表,当通过USB供电时,如果SB1被设置成ON(被焊接上),则最大供电电流不应超过100mA。而默认情况下,SB1被设置成OFF(未被短接),这时可以获得最大300Ma电流。
具体配置可见下表:

另一点特别注意,如果想要不通过电脑,而用USB电源适配器给开发板供电,这时无法完成USB枚举过程,则需要将SB1设置为ON。
结合开发板原理图,整个USB供电过程可分析如下:

图4-6 USB供电电路

(2)使用外部电源供电
Nucleo-32开发板外部供电可采用三种方法进行:VIN(7-12V)、+5V(5V)或者+3V3。外部供电可见下表。

7、LED指示灯
Nucleo-32开发板上有三个LED灯,分别是:
(1)LD1三色(绿、橙、红)LED,用来指示ST-LINK的链接状态,默认LD1正常情况是红色,具体指示信息如下:
·红色LED慢闪:连接USB电源后,USB初始化之前
·红色LED快闪:PC正在与STLINK之间进行第一个正确的沟通(枚举过程)
·红色LED亮: PC和ST-LINK/ V2-1的初始化完成
·绿色LED亮:与目标板之间进行一次成功初始化通信后
·红色LED和绿色LED交替闪烁:正在与目标板的通信时
·绿色LED亮:通信成功完成
·橙色LED亮:通讯故障
(2)LD2红色LED,作为目标单片机部分正常供电并且+5V电源可用
(3)LD3绿色LED,作为开发板提供的用户LED,与目标单片机的PB3引脚连接,若要使LED点亮,需要单片机引脚输出高电平,反之,如果想熄灭,需要引脚输出低电平。

8、跳线JP1
JI1接口是Nucleo-32开发板给用户提供的测试目标单片机的电流大小的引脚,具体设置为:当JP1设置为ON(使用跳线帽短接),这种是默认情况,正常为目标单片机供电;当JP1设置为OFF(将跳线帽去掉,在两引脚间加入电流表),这种情况下就可以用电流表测量目标单片机的功耗大小(IDD电流)。

图4-7 IDD电流测量接口

9、虚拟串口
通过SB2和SB3,可以将目标单片机的USART接口连接到ST-LINK上,实现虚拟的USB串口,可方便开发板的调试。其中目标单片机的PA2作为TX,PA15作为RX接口。具体设置如下表:

通过上面分析,可以看到NUCLEO-F031K6开发板虽然小巧,但是电路设计的还是非常巧妙和人性化的。很多设计都与NUCLEO 64具有相同的部分,使开发人员能够快速的在平台间切换。

五、Mbed云端开发

在对NUCLEO-F031K6开发板进行详细的探索后,就可以上手具体使用了,来一起体验一下这款开发板的功能。

1、NUCLEO-F031K6开发环境
在ST的生态系统中,为NUCLEO开发板提供了非常丰富的开发工具,有ST推出的STM32 CUBEMX配置工具可使用图形化界面完成STM32微处理器的初始化配置工作,有IAR、MDK、GCC-based IDEs等集成IDE,还有最新的支持云端开发的mbed,另外ST还提供HAL软件库方便用户快速实现软件功能。下图是支持NUCLEO-F031K6的免费集成IDE。

图5-1免费支持STM32集成开发环境

这里我们不得不说MDK开发工具,这个在国内工程师中使用量非常大,但是以前MDK是收费软件。而前不久,在ARMKEIL官网提供了针对STM32F0和STM32L0系列MCU开发的免费产品序列号(PSN):U1E21-CM9GY-L3G4L,如下图地址为:http://www2.keil.com/stmicroelectronics-stm32/mdk。这里可以看出ST与ARM之间的合作深度以,对ST和ARM在这里所做的工作表示赞赏。

图5-2适用于STM32L0和STM32F0的DMK免费产品序列号

2、Mbed云端开发准备
STM32 CUBEMX+ MDK+HAL库的开发模式已经被很多用户使用。在这次测评使用中我准备采用一种新的开发体验,来尝试体验一下Mbed云端开发过程!
mbed是一个面向ARM处理器的原型开发平台,它具体包括免费的软件库(SDK),硬件参考设计(HDK)和在线工具(Web)三部分内容,各个部分的具体介绍如下:
SDK:mbed设计了一个硬件抽象层,从而屏蔽了不同mcu厂商提供了微处理之间的差异,对于用户来说,他只需要和这个硬件抽象层打交道即可,也就是说,用户基于mbed开发的应用可以很方便地更换使用不同厂商的arm微处理器,从而留给用户更多的选择。
HDK:HDK是mbed提供的硬件参考设计,它是面向用户开发设计的,所以HDK提供了统一了程序上载接口,单步调试接口,串口调试接口,用户无需购买其它硬件就可以开始软件开发工作。
WEB:为了省去用户开发环境安装的麻烦,mbed提供了一个完备的基于浏览器的微处理器软件开发环境,包括代码编写,程序编译,版本控制等功能,用户只要上网就可以开发,编译结果只要下载保存到mbed开发板上即可工作,非常方便。
这里首先还是要进行开发体验前的准备工作:
(1)计算机上安装ST-LINK/V2-1驱动程序
要使用ST-LINK/V2-1编程调试器,需要在计算机上安装相应的驱动程序。该驱动可在ST的官网上下载,支持Windows XP、Windows 7和Windows 8。
网址:http://www.st.com/web/en/catalog/tools/PF260219

图5-3ST-LINK/V2-1驱动程序

下载安装正确之后,可以在设备管理其中查看到关于NUCLEO-F031K6开发板被识别出的设备,主要包括:ST-LINK调试器、虚拟串口设备、USB存储器等。

图5-4设备管理器

(2)ST-LINK/V2-1固件版本更新
ST公司会定期对ST-LINK/V2-1固件进行更新,以修正固件的BUG、支持新的功能、添加对ST新产品的编程调试功能。因此应该保证开发板的固件是最新的。大家可以使用USB接口对固件进行更新操作。ST-LINK/V2-1固件下载地址:http://www.st.com/web/en/catalog/tools/PF260217

图5-5ST-LINK/V2-1固件下载地址

下载解压后,打开ST-LinkUpgrade.exe进行更新,如下图:

图5-6ST-LINK/V2-1固件更新文件

打开软件,点击链接设备按钮,如下图:

图5-7固件更新界面

连接好设备后,可以看到现有固件版本以及最新的固件版本,如果有更新,可以点击“Yes”按钮进行更新。

图5-8版本检测

固件更新完毕后,就会显示更新成功提示。

图5-9固件更新成功

(3)注册Mbed账户
若要使用Mbed云端开发,首先要进行用户注册,打开浏览器,输入Mbed开发者网址:https://developer.mbed.org/,点击右上角的用户注册按钮进行注册。

图5-10Mbed开发者网址

注册之后登陆界面进行登陆。

图5-11登陆注册界面

登陆后,点击右上角的编译器按钮,就可以进入开发环境。

图5-12进入编译开发环境

网页会自动弹出新窗口,进入了Mbed云端开发界面。

图5-13 Mbed云端开发界面

由于第一次进入,没有选择开发板,因此开发环境右上角显示没有设备被选择,点击这个按钮。

图5-14无开发板被选择

打开选择设备窗口,这里点击添加设备按钮。

图5-15选择设备窗口

在弹出的界面中找到我们这次测评的开发板NUCLEO-F031K6。

图5-16选择NUCLEO-F031K6开发板

在打开的页面的右面点击添加到你的Mbed中。

图5-17添加NUCLEO-F031K6开发板

再次打开选择设备窗口,选择开发板,点击右上角的按钮。

图5-18选择开发板

至此,我们的Mbed云端开发的准备工作完成了。

3、PWM云端开发呼吸灯
下面测试Mbed云端开发,实现一个PWM控制的呼吸灯!
在开发之前,还是要进行电路的熟悉,选择合适的引脚驱动LED。

图5-19 选择PWM输出引脚

经过查找,我们发现开发板自带的用户LED1没有接到PWM输出引脚上。但是NUCLEO-F031K6开发板兼容Arduino Nano扩展接口,非常适合插到面包板上外接元件进行开发DIY,这里选择PB0通过面包板外接一个LED,输出PWM驱动LED实现呼吸灯效果。电路连接好后如下图。

图5-20 呼吸灯硬件电路

硬件电路准备好了,下面再Mbed中新建工程,可以看到由于NUCLEO-F031K6开发板比较新,因此提供的模板工程还比较少,这里选择LED灯闪烁的工程模板。

图5-21 选择工程模板

工程模板选择好后,输入工程名称:Nucleo_pwm_led,如下图。

图5-22 Mbed新建工程窗口

点击确认按钮,可以看到,Mbed自动生成了工程文件结构如下图。

图5-23 默认工程结构

选择主程序双击,就打开了模板程序,程序非常简单,实现LED灯亮200ms、灭1秒这样交替闪烁的功能。

图5-24 默认程序模板

在原有程序模板基础之上完成下图呼吸灯程序。

图5-25 呼吸灯程序

具体源程序如下,方便大家实验:

  1. #include "mbed.h"

  2. PwmOut PWM1(PWM_OUT); //声明使用的PWM引脚,这里指PB0

  3. int main() {

  4. PWM1.period_us(100); //设置PWM的周期为100us

  5. int count = 0, flag = 0; //count记录PWM脉冲宽度,flag记录脉冲宽度的变化趋势

  6. while(1) {

  7. PWM1.pulsewidth_us(count); //设置新的PWM输出宽度

  8. if (flag == 0) //flag为0,脉冲宽度增加

  9. {

  10. count++;

  11. if (count == 100)

  12. {

  13. flag = 1;

  14. }

  15. }

  16. Else //flag为1,脉冲宽度减小

  17. {

  18. count--;

  19. if (count == 0)

  20. {

  21. flag = 0;

  22. }

  23. }

  24. wait_ms(20); //每种PWM宽度输出20ms

  25. }

  26. }

复制代码

上面的程序还是比较简单易懂的,写好程序后,点击编译,如果没有错误,Mbed通过网络会自动把编译好的bin文件下载到计算机中,如下图。

图5-26 编译呼吸灯程序

图5-27 编译生成bin文件

将编译好的bin文件复制到NUCLEO-F031K6开发板对应的Mbed USB存储器中,就会将程序写入FLASH中,并自动运行程序。

图5-28 Mbed USB存储器

(0)

相关推荐