环肥燕瘦,精彩纷呈——STM32F031K6开发板评测
扫描二维码
随时随地手机看文章
引子
ST 最近要火。一是听说ST 的芯片现在部分系列缺货,如经典产品STM32F1 系列,原因据说是ST 现在在国内混得风生水起,预谋着涨点价,所以先缺点货,等价格上来了,再放量,自然是皆大欢喜。缺不缺货我不知道,反正最近自己画了块STM32 的MINI 板,在某宝上购买了几片,价
格是比以前高了一点。传说毕竟是传说,今天要说的是另一件事,就是ST 的官方评估板又添了新成员。
众所周知,ST 官方评估板,传统上分为三个系列,第一类是高大上的EVAL 板,功能齐全,价格威猛,只有大户才用得上;第二类是DISCOVERY 板,板载资源相对丰富,价格亲民,向来为各屌丝所爱好;还有一类就是所谓的NUCLEO 核心板,光板一块,引出所有可用引脚,
供各大爱好者自行选择外设资源,自由组织,乃各DIY 爱好者首选开发板。
传统上,NUCLEO 被设计为使用固定的64PIN 芯片,芯片选择会涵盖大部分产品,这样原本极好,只是在选择的自由度上有所局限。ST 也意识到了这个问题,今年将NUCLEO 评估板再度细分,将使用32PIN 芯片的NUCLEO 板命名为NUCLEO32,而原来的64PIN 开发板则称之
为NUCLEO64,值得注意的是NUCLEO64 板并不是64 位MCU。另官方消息已泄露了还将有144PIN 的NUCLEO144,不过暂未面市。
今天测评的STM32F031K6 就是NUCLEO32 中的首批评估板。
开箱
用过NUCLEO 和DISCOVERY 板的用户都知道,对于NUCLEO 及DISCOVERY 板来说,就没有开箱之说,一块开发板,用个简单的透明塑料板包装就行了。不过塑料板一般都是定制的,刚好和开发板的形状吻合,起到保护开发板的作用。这样既节省了成本,又有效保护了开发板,不错的设计理念!
包装可谓精简之极,除了板,什么都没有,不过这也是惯例,在NUCLEO32 上也不例外。
甚至不需要打开包装,就一个感觉:小,太小了!
打开塑封包装之后,终于得见NUCLEO32 的真面目,感觉仍然是:小,真小!
左边是NUCLEO64,右边是NUCLEO32。环肥燕瘦,各具风骚,有么有!
拿在手上,体验一下。
真正的掌中舞,比飞燕还要飞燕!
认识开发板
小美人虽然小巧玲珑,然内涵依旧,正如流行语所言:主要看气质!且听我一一介绍。
USB
- STM32F031K6开发板上使用的是MINI USB接口,见图。该USB接口主要有如下几方面的功能:
- USB供电,连接到PC后,可以使用PC的USB接口为开发板供电,
- 虚拟串口, 与板载的ST-LINK相连,可以实现与主机的串口通信功能
- 大容量存储接口,可以连接大容量存储设备
这样看来,USB接口的功能确实非常丰富。一般情况下,我们使用USB VBUS来给开发板供电,除此之外,如果要实现开发板与PC通信,就不再需要单独的串口模块来连接开发板的串口了,非常方便。当然这个功能是由ST-LINK提供的。
ARDUINO NANO接口
传统的NUCLEO板,也就是现在所称的NUCLEO64板,其中一个宣传点就是和ARDUINO接口兼容,新的NUCLEO32则与ARDUINO NANO接口兼容。这一点当在情理之中。一张图诠释ARDUINO NANO接口。
MCU
开发板使用的MCU型号是STM32F031K6T6,其主要特性如下
- (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)1X12位,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。
该MCU在F0家族中的地位如图所示
中规中矩的一颗芯。
复位按钮
说实话,我是第一次看到这样的按钮,所以找了很久才找到。复位按钮的作用当然是用来给系统复位的。功能很简单,就怕你找不到!
ST-LINK/V2-1
板载ST-LINK/V2-1接口似乎已成ST官方开发板的标配,以前的DISCOVERY板只支持ST-LINK/V2,二者的差别之一就是前者能使用虚拟串口功能,这样,在与PC连接的时候就可以直接通过UART与PC通信,不再需要专门的串口模块了。
ST-LINK使用的是一颗STM32F103C8T6的芯,这在所有的ST-LINK/V2中都是一样的。注意这颗芯在开发板的背面。
IDD
IDD只是用来给你测功耗的,别的也没有什么用途。如果需要测量开发板的电流,拔掉这个跳线帽,用万用表连接上去就可以测量开发板的电流,进而评估开发板的功耗。不过这个IDD跳线太过纤弱,插拔要小心,我就是在使用万用表测试电流的过程中将这个小东西扯下来了。
关于供电
开发板提供了几种供电机制,使用非常灵活。
USB供电
可以通过USB直接从PC取电。需要注意的是在USB开始枚举之前,只会给ST-LINK供电,此时只需要100MA的电流。在USB进行枚举时,它向PC询问是否能提供300MA的电流,如果PC能够提供的话,此时开发板开始上电,同时LED LD2点亮。如果PC端不能满足此要求,则只能使用外部供电。
外部供电
外部供电有三种方案,VIN、+5V或+3V3。
当使用VIN或+5V的供电方案时,仍然能使用ST-LINK。只不过在这种情况下,需要先给板子供电,然后再连接PC,此时因为是外部供电,枚举肯定能够成功。使用外部VIN供电时,电压范围可以是7-12V,此时最大可以提供约800MA的电流,而使用+5V供电时,则能达到最大约500MA的电流。
使用CN4上的+3V3给板子供电时,此时ST-LINK上没有电,所以不能用来调试。
将USB与PC连接后,开发板开始上电工作,此时LED LD3开始闪烁,频率约为0.5HZ
代码测试
好了,板子也认识了解得差不多了,跑个代码。
准备工作
STM32的NUCLEO系列除了支持传统的GCC工具链之外,还支持M-BED云端开发。M-BED是一个在线开发环境,因为基于云端开发,所以能很好的实现代码共享,全球的STM32开发者都位于同一个平台,共享相同的代码。
本文使用MDK做为开发工具。自MDK 5.X推出后,使用的是一种新的称之为PACK的机制,即每个系列的MCU都有自己对应的PACK,所以在正式体验之前,先要到这里下载好对应的PACK。
http://www.keil.com/dd2/packs/,最新的版本是1.4。
将下载好的PACK导入到MDK开发工具中。
下载F0系列的官方示例代码。ST官方的代码库现在称为HAL库,区别于传统的STD库。HAL库是ST官方主推的开发库,STD库已不再更新和维护。从这里下载最新的官方HAL库。
http://www.st.com/web/en/catalog/tools/PF260612
最新版本也是1.4。
ST官方推出一个图形化编程工具STM32CUBEMX,在上面的链接中下载,安装。需要注意的是STM32CUBEMX需要JAVA支持,所以还要下载JAVA运行时支持包。
不赘述。
如果还没有安装ST-LINK/V2-1的驱动,在上面的页面中还要下载ST-LINK的驱动安装。正常安装后设备管理器里应出现如下的驱动。
生成代码
运行STM32CUBEMX代码生成工具,创建一个新的工程,选择对应的MCU,如下图
接下来选择外设,这里只使用了LED,通过查看原理图,LD3连接在PB3上。所以直接在PB3引脚上右击,选择GPIO_OUTPUT。
接下来设置时钟树,由于NUCLEO32板没有提供外部晶振接口,所以就只能使用HSI了。通过前面的介绍,我们知道STM32F031K6最高支持48MHZ的频率。故作如下配置
然后就是生成代码了,点击生成工程按钮
在弹出的工程设置对话框中作相应的设置
这样一个工程文件就生成了。需要注意的是,STM32CUBEMX只会给你生成工程文件的框架,并不会给你添加程序逻辑,所以要想实现自己的功能,就需要往这个框架里添加实现代码。
添加逻辑
使用MDK打开刚才生成的工程,打开main.c文件,在while循环里添加如下语句
/* Infinite loop */[!--empirenews.page--]
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_3);
HAL_Delay(500);
}
/* USER CODE END 3 */
然后编译,下载,一切正常的话,LED LD2应该开始闪烁了,只不过现在的频率变成了1HZ。
如果发现LD2没有闪烁,尝试按一下复位键,还记得在哪吧!
特别策划:HSI精度测试
NUCLEO32开发板为了减少体积,尽可能缩减一些不必要的设备。其中的外部晶振都被简化了,也就是说使用NUCLEO32开发板,只能使用芯片内置的HSI及LSI。
我们知道,内部晶振的精度是有限的,到底这个HSI的精度如何,让我们编写一段简单的代码,借助外部仪器来检查一下。
片内设备如定时器等,都是在晶振产生的时钟信号下工作,通过测试定时器定时的精度,进而来了解晶振产生的时钟信号的精度。本次测试利用了片内设备的TIM1及TIM2,其中TIM1产生一路PWM信号,周期为1MS,占空比为30%。TIM2产生一个定时中断信号,周期也为1MS,在中断例程中翻转GPIO,通过测试GPIO来了解时间信息。
测试使用的仪器为逻辑分析仪LA,该LA最高可达400M采样率,如下图。
下面是LA抓取的信号图
这是PWM波形信号,可以看到在1MS内,大约发生了1US的误差。对于精度要求不高的场合,这种情况是可以接受的。
这是TIM2产生的1MS中断信号,结果与上面的大致差不多,也有一定的误差。
为了对比,这里再来一张以前在STME32F407上使用外部晶振产生的信号图
上图产生的精确的30%占空比的PWM信号。
关于HSI,想必你心中已经有数!
结语
平心而论,NUCLEO32并不是什么新东西,相对于NUCLEO64来说,只不过是一个新的开发板,选择了一个新的MCU,做了一个更小巧的玩意儿。所以自然也引不起我们太多的激情。然而NUCLEO32的优势在于:它非常小巧,同时它还能完成我们所需要的工作,在很多场景下,我们可以直接将NUCLEO32开发板作为一个模块,嵌入到现有的系统中,从而增强系统的功能,实现我们自己额外的逻辑。就这一点而言,NUCLEO64则有点力不从心,毕竟NUCLEO64的体积和尺寸摆在那。还有一点令人担心的是,一旦NUCLEO144出来后,NUCLEO64差不多就是一个鸡肋,不过这一点现在说还为时过早,毕竟尺有所短,寸有所长。NUCLEO32系列还一个大的缺陷,那就是没有提供外部时钟,只能使用内部的HSI及LSI,在需要高精度时钟的场合下,这必然会是一块短板!
另外不得不说一下,那个IDD的跳线帽,也许是为了追求小体积,排针的距离大约是1.27mm的,且是横向焊接在开发板上,正准备来测试开发板电流的时候,虽然小心,还是把那个排针给搞掉了,得重新焊上去!
就板载的STM32F031K6而言,这是一个低功耗的产品,同时价格也便宜,只是牺牲了CORTEX系列中的TRACE功能,有点可惜!
再者,为了让板子更小巧,将NUCLEO64上提供的外部晶振接口都一并省略啦,如果你对时钟精度要求很高,得另外考虑别的方案!
掌中舞罢箫声绝,三十六宫秋夜长。
现实中,各种需求都会碰到,不会出现一个芯片独领风骚的情况。总而言之,就是环肥燕瘦,精彩纷呈!这一点在NUCLEO144出现后,会再掀高潮!
资源链接
NUCLEO-F031K6官方介绍及资源:
该页面包含如下内容:
- 1. NUCLEO-F031K6简介
- 2. 用户手册,开发板手册
- 3. 官方开发原理图
- 4. ST-LINK驱动程序
- 5. STM32CubeF0 HAL库
STM32CubeMX工具及相关HAL库:
http://www.st.com/web/en/catalog/tools/PF259242
测试工程及代码:
http://pan.baidu.com/s/1gevhVyV PASS:xxnf
M-BED FOR NUCLEO-F031K6:
https://developer.mbed.org/platforms/ST-Nucleo-F031K6/
STM32F031K5 MCU官方介绍及资源:
http://www.st.com/web/catalog/mmc/FM141/SC1169/SS1574/LN7/PF259773?s_searchtype=partnumber
内含技术文档,应用笔记等丰富开发资源
——————本文版权归属21ic,未经许可请勿转载——————