Nucleo-F413ZH 工程版测评(上)
ST的STM32产品线更新很快,旧的还没玩热,新的就出来了。得益于STM32系列封装的引脚兼容性,Nucleo系列的板子不用大改,就可以搭配新产品发布。F413作为目前F4系列当中片上SRAM容量最高的型号,我比较感兴趣;虽然接触过的Nucleo板子已经有4款了,Nucleo-144 还没有玩过,这次论坛有活动,就申请了一个来玩玩。
和 Nucleo-64 板子摆在一起,差别很容易看出来:
因为144pin的封装尺寸更大,以及为了引出更多的I/O口,PCB宽度没变但加长了。芯片两侧的"ST Zio"连接,正面是双排孔,背面是双排针,用来连接扩展板;若和Nucleo-64的排座对齐,重叠部分是兼容的(下面扩出来一些,内侧再多一排)。包装里面附带的硬纸上也把这个连接口的定义以及MCU Pin对应附上了,方便随手查阅(不然得翻手册)。
光靠着个Zio连接还是不足以把所有I/O都引出来,于是板子外侧还有两排"ST morpho headers"。不过这些焊盘全是空着的,不像Nucleo-64那样已焊上了插针。值得提一下的是,在PCB背面,此处每个焊盘位置旁边都丝印标出了pin的定义,这样实验的时候查起来方便多了。ST手册上说,MCU的每个I/O引脚都能在morpho headers里面找到。
对比Nucleo-64主要还有其它的差异:
(1)板载 USB OTG FS 接口(micro-USB),可以直接做USB开发实验了。弥补了Nucleo-64需要做扩展卡的缺憾。
(2)User LED从1个变为3个。
(3)电源选择除了U5V, E5V外增加了VIN (7V~12V, 板载LDO)。
(4)以太网支持,不过因为F413并不包含MII,这部分相关元件没有焊。
STM32F413ZH, 这个开发板上的MCU是ES版本(Engineering Sample, 工程样品)。反正是评测嘛,样品就样品
. 简要特性可以从ST网站上的这张图看出了:
片上设备基本上和F412一样,明显是增大了Flash ROM和SRAM容量。最高频率和F410, F411都是同样的100MHz. F4内核没什么多说的,了解一款MCU要看看系统结构图:
注意 320kB 的SRAM是怎么组成的:256kB的SRAM1,和64kB的SRAM2. 程序可以在Flash、SRAM1和SRAM2中执行。我不肯定在FSMC上挂的外部ROM/RAM中能否执行程序。
软件开发环境:我依旧是用"原始"的GCC-ARM,直接访问寄存器的。为了玩F413需要获得: (1)寄存器定义的头文件, (2)启动代码,包含中断向量表定义, (3)GNU LD的Linker script. 这些文件可以从ST网站上下载最新版本的 STM32CubeF4 开发包, 或者 STM32F4 DSP and standard peripherals library 来获取。烧写程序使用 ST-Link Utility 的命令行工具比较方便,比我以前用STVP快。
周末写点程序来测试。点灯就不在话下了,先跑个无聊的计算程序吧
这个子程序计算 sin(x)*sin(x)+cos(x)*cos(x) 的值,理论上应该总是等于1, 实际上会有一点误差。对一定数量的输入数据进行计算,把误差累计然后返回。给主程序的数据交互是32-bit整型,计算则转换成float (单精度)型进行。STM32F413 SRAM大,我以为可以随便折腾,一开始是调用CMSIS的数学函数库来计算,Link的时候发现它要把巨大的常数表放到程序里。FLASH可以装下,RAM就吃不消了(因为我要把程序也放到RAM运行,进行对比),所以暂时弃之,只用GCC自带的数学库了。
主程序里面循环处理,每次随机生成16384个整型数(使用RNG随机数发生器),调用 test() 进行计算,并使用Timer5测计算过程消耗的时钟周期数。因为RNG需要使用比较快的时钟,我就配置了PLL,给它40MHz时钟。CPU时钟使用25MHz,AHB, APB也是用25MHz没分频。结果出乎我意料,25MHz下,16384个数的“无聊”计算消耗了大约13秒钟!我故意没有使用Cortex-M4F的浮点处理器,用默认的软件计算浮点方式,而且没有优化(里面隐含了许多double, float类型转换),但也没想到这么慢。可惜身边已经没有486计算机了,不然我要拿Turbo C 2.0写同样的程序算算对比下。
计算的结果,我用Matlab进行了同样的运算测试,和MCU输出的结果一致,精度符合预期。也就是单精度浮点表示的 sin(x)*sin(x)+cos(x)*cos(x) 与1的误差在 1.5e-8 左右。初步认为GCC的这个软件浮点库还是靠谱的。
如手册中这一个图,Cortex-M4 核有三条AHB-Lite总线:I-bus, D-bus, S-bus. 经过Bus Matrix, I-bus 和 D-bus 都连到Flash模块。Flash和SRAM不同的是,它有两个总线接口。也就意味着,CPU核心可以同时从Flash读取指令和数据。虽然AHB总线宽度是32-bit, 但是STM32F4 Flash存储的内部总线是128-bit的,因此在同频率下有更大的读取能力,通过预读取减少等待。实际效果如何待我测试一番。
就用这个无聊的计算程序来测,CPU频率我分别通过PLL配置调整到25MHz, 50MHz, 和100MHz。在50MHz下,Flash必须插入一个等待周期才能访问;而100MHz需要三个等待周期(在FLASH_ACR寄存器中设置). 毫无疑问,Flash等待周期加入后,程序是会变慢一点的,尽管频率提高了执行是更快,从计算消耗的周期上可以看出来。
时钟不开启加速打开PrefetchPrefetch, 使用Cache25MHz (0 wait)29282209429292239950MHz (1 wait)313416305310388296297956680100MHz (3 wait)368267330345938261308417992ST的Flash模块是有加速器功能的,它有Prefetch,就是预读取;还有D-cache和I-cache缓存,弥补Flash本身的等待。在25MHz也就是Flash没有等待周期的时候,Prefetch和Cache的效果并不明显。但到50MHz时,效果就显示出来了。100MHz时,效果更明显,最大获得近20%的性能提升。通过加速器的确减少了Flash等待周期带来的影响,接近0 wait state的执行效率。
那么和没有等待周期的SRAM比如何?如果简单地把程序代码装到SRAM1或者SRAM2中(0x20000000以上)运行,我发现甚至比Flash wait state=3, 不开启加速器的执行还要慢。为什么呢?因为SRAM只有一条总线接口,数据和指令公用了。Cortex-M4在运行的时候,需要从Flash或SRAM中读指令执行,也需要从Flash或SRAM中读取常数,还要从SRAM中读写变量、堆栈。当通道只有一条的时候,指令和数据就需要错开来访问。如果是Cortex-M0,因为它只有一条总线,用Flash还是用SRAM放程序运行没有差别;但对Cortex-M4就不同,前面已经提过了。Flash因为有两个总线接口,可以把指令和常数分开走,而SRAM中的变量又可以走S-bus,所以效率就高一些。用SRAM放程序又放数据,就容易堵车了。
不过呢,STM32F413比它前面几个弟兄要强一点,它有两块SRAM: 256kB的SRAM1, 64kB的SRAM2. 用一块SRAM放指令,另一块SRAM放数据,是否可以减少堵车呢?手册上是这么提了:
关键点:一定要在Remap的条件下,才可以用I-bus和D-bus来访问SRAM.
我的测试结果:
Flash 开启加速 SRAM默认 SRAM Remap 25MHz292922399 33782088229255252650MHz297956680 337788972292580180100MHz308417992 337738861292581401终于,使用两块SRAM分别放程序和数据,SRAM中运行速度超过了Flash一点点。通过这个实验,我也更体会到总线的重要性。
在SRAM中运行程序通常是不必要的,但某些情况下的确能带来好处。还是上面的程序,测量一下计算时消耗的电流——把JP5跳线冒拔下,用电流表接入就可以了——结果我没有事先料到。
Flash运行,加速器开 SRAM运行, Flash PwrDown 25MHz8.20mA5.40mA50MHz13.94mA9.58mA100MHz24.86mA17.91mA使用HSI 16MHz作为PLL输入时钟,PLL VCO频率200MHz,分频输出作为系统时钟。三个频率下APB时钟分别为25MHz, 25MHz, 50MHz (因为Timer5用到的APB1最高就50MHz了)。在SRAM中运行程序时,我将Flash设为Deep Power Down模式,这样减少了电流消耗,竟然相当明显。
看下ST手册里面的数据,对照参考,我的测量处于正常范围内。
因为除了Core本身,还有片上其它硬件在消耗电流,所以影响总电流的因素很多。随频率变化的趋势是一致的。Flash部分加速器的配置也会影响电流。而且我测试出来好象不开加速器消耗的电流会更多
从手册里的数据表看,开加速器但不用Prefetch是比较省电流的,不过我没这样做测试。
测试Sleep模式电流,使用 WFI 指令来休眠,Timer中断唤醒。我只测试了SRAM运行模式下的(Flash Power Down了):
Freq25MHz 50MHz 100MHz SLEEP 电流2.01mA 3.10mA 5.29mA因为我是评测,还有降低Sleep模式电流的方法就不弄了。对比运行状态看个大概。
Stop模式可以降更多的电流,但片上设备基本上都不能干活了。进入Stop模式需要写 System Control Block中的SCR寄存器DEEPSLEEP位:
SCB->SCR|=1<<SCB_SCR_SLEEPDEEP_Pos;
再使用 WFI 指令,电流就大大下降,我测到 185uA 了。这还是不够低,配置 PWR_CR 寄存器中 FPDS 位,将Flash设为Deep power down后,电流降一点,到 162uA了。再设 LPDS 位,使用Low Power的稳压器,降到 93uA.
但是手册上的电流在这个条件下典型应该是 19.7uA, 还差那么多呢?我怀疑问题出在 I/O 引脚上。STM32未用的引脚得给一个固定的电平,否则可能额外消耗电流。我把没使用的引脚都设成输入并加了上拉,可能和板子上的连接有不搭配的地方。对照电路图查了一遍,发现有外部下拉电阻的,都改后Stop模式电流降低到了 36.6uA.
还是差那么点。后来我找到原因是 PH0 这个口(Ext时钟输入)连到 ST-Link上的 MCO,也就是从 ST-Link 供给了 8MHz 的时钟。于是这个pin始终是被一个时钟驱动的…… 因为板子不是自己的,我就不拿烙铁焊掉那个0欧电阻去验证我的想法了。
Standby 模式,连稳压器都关掉,SRAM内容丢失…… 我测到电流是 2.2uA. 尽管够低了,这个模式实在用处不大了哈
进入这个模式除了设DEEPSLEEP位外,再写
PWR->CR |= PWR_CR_PDDS;
以上图文内容均是EEWORLD论坛网友:cruelfox 原创,在此感谢。
欢迎微博@EEWORLD
如果你也写过此类原创干货请关注微信公众号:EEWORLD(电子工程世界)回复“投稿”, 也可将你的原创发至: bbs_service@eeworld.com.cn,一经入选,我们将帮你登上头条!
与更多行业内网友进行交流请登陆EEWORLD论坛。
你可能没见过的电子元件高清切片
电子元器件也许我们看到大概能够认识,但是电子元器件切开后里面是什么样品很多人并不熟悉,今天给大家分享一些电子元器件的剖面图供大家参考,希望可以对大家更好的了解元器件有所帮助。
01
BGA芯片
02
DB9连接器
03
LED
04
按钮
05
薄膜电容
06
贴片电容
07
瓷片电容
08
浅粉电阻
09
电解电容
10
电子管
11
耳机连接器
12
二极管
13
干簧管继电器
14
光耦
15
滑动单刀双掷开关
16
金属薄膜电阻
17
纽扣电池
18
七段数码管
19
三极管
20
色环电感
21
双排插针连接器
22
钽电容
23
网络变压器
24
驻极体麦克风
声明:本文章转自射频百花潭,文章版权、观点归原作者所有,转载仅用于传播知识和分享信息,如有异议、意见或建议,请联系我们修改或删除,联系邮箱:jansonz@actintl.com.hk
相关问答
ad 针 是啥?排针,连接器的一种,英文名称:pinheader。这种连接器广泛应用于电子、电器、仪表中的pcb电路板中,其作用是在电路内被阻断处或孤立不通的电路之间,起到桥梁...
双排 弧 针 好用吗?双排弧针好用一般用来割线的针大都采用圆针,所谓圆针是指在焊针时将数支针按照一个圆心攒合在一起,一般每支细针的粗细度在0.25--0.4之间,从经验上说0.3--0...
15根 针 两排的是什么接口哦?串口?如何和电脑 连接 ?你这说法不对,一般有串口,并口,VGA口等几种串并口有25针的,串口还有9针的,15针一般是VGA口都是三排的,只是15针中保证相应的7针接通就可以使用了。你这说法不...
50 针 ide 是什么接口?50针IDE接口是一种电子设备接口,它有50个针脚,用于连接硬盘驱动器。这种接口常用于早期的计算机系统中,如IBMPS/2和AppleII系列。IDE接口通过并行传输数据,...
串口和并口插座有哪些区别-设计本有问必答并行接口目前,计算机中的并行接口主要作为打印机端口,接口使用的不再是36针接头而是25针D形接头.所谓\"并行\",是指8位数据同时通过并...
串行都有哪些接口?并行都有哪些接口?这样,虽然速度会慢一些,但传送距离较并行口更长,因此长距离的通信应使用串行口。通常COM1使用的是9针D形连接器,而COM2有些使用的是老式的DB25针连接器。串...
cpu电源使用 双排 什么 针 ?新的都是双排24针,主电源,,一般可以拆成20+4,以适合一些20针电源的主板,新的都是双排24针,主电源,,一般可以拆成20+4,以适合一些20针电源的主板,
针 的分类?1、RL系列:收口针,割线圆针;用于割线条,3RL用来割线。2、RS系列:不收口针。3、打雾圆针:用于打雾,只适用打小图案的实心雾。4、F系列:单排针。5、打...1...
电脑主板没有db15 针双排 的接口,怎么办 - 懂得DB15针一般游戏手柄的接口,这个接口在老式的声卡上有,主板一般没有这个接口的见过一种联想的前置11针的USB1.空2.空3.VCC(5V)4.VCC(5v)5.Data-(POR...
耙梳和 针 梳的区别?用途不同。针梳,也叫针布刷,细分又有长毛型针梳,短毛型针梳,硬齿针和软齿针等等。主要功能是打散毛结,梳掉被毛中的大量死毛,正常针梳表层梳理只能梳通长...