论坛上看到的比较。
这几天刚拿到STM32F4的评估板,STM32F4这次的卖点就是FPU和DSP指令集,关注了挺长时间,这次就想测试一下STM32F4的浮点性能,如果满足就升级自己飞控的架构。本来用STM32F103+28335双核架构,F28335当浮点处理器用,调试起来比较麻烦,所以一直想换了。
测试代码就是用的我飞控的算法,全部使用浮点运算,包含姿态和位置两个7阶和9阶的卡尔曼滤波器,包含大量的矩阵运算以及部分导航算法和PID控制器等,还有部分IF和SWITCH包含跳转的判定语句,相比纯算法算是一个比较综合的运算。
测试环境:
F28335:CCS V3.3,使用TI优化的数学库,不开优化,程序在RAM里执行。
STM32F4:KEIL V4.7,使用ARM优化的数学库,不开优化。
测试方法:
F28335:在飞控算法入口设置断点,清零CCS的CPU计数器(profile->clock),然后STEP OVER,记录下CPU的计数。
STM32F4:在飞控算法入口设置断点,记录下Register窗口内算states计数器,然后STEP OVER,记录下新的计数器数值,与之前的数值相减得到CPU计数。
测试结果:
F28335:253359个CPU周期,除以150MHZ,大约是1.69ms。
STM32F4:一共285964个周期,除以168MHZ,大约是1.7ms,比F28335略慢。
结论就是,对于包含相对较多跳转的综合浮点算法而言,STM32F4似乎并不慢多少。
抛开架构因素,从纯浮点运算方面来看的话。STM32F4的FPU加减乘指令VADD.F32、VSUB.F32、VMUL.F32都是单周期指令,而除法VDIV.F32耗费14个周期。
例如:a = a / b;产生的汇编为:
0x08000220 ED900A00 VLDR s0,[r0,#0x00]。
0x08000224 4804 LDR r0,[pc,#16] ; @0x08000238。
0x08000226 EDD00A00 VLDR s1,[r0,#0x00]。
0x0800022A EE801A20 VDIV.F32 s2,s0,s1。
0x0800022E 4803 LDR r0,[pc,#12] ; @0x0800023C。
0x08000230 ED801A00 VSTR s2,[r0,#0x00]。
复制代码 F28335: F28335的FPU有加减乘法指令,都是双周期的,由于没有硬件除法指令,F28335这里是用软件模拟的浮点除法,汇编可以看到 LCR $div_f32.asm字样,需要19个时钟周期。
例如:a = a * b,产生的汇编为:
0087B2 E203 MOV32 *-SP[4], R0H。
0087B4 E2AF MOV32 R1H, *-SP[6], UNCF。
0087B6 E700 MPYF32 R0H, R1H, R0H。
0087B8 7700 NOP //需要让流水线等待FPU运算完毕,所以需要NOP 。
0087B9 E203 MOV32 *-SP[4], R0H。
复制代码 除法:
0087BD E203 MOV32 *-SP[4], R0H。
0087BF E2AF MOV32 R1H, *-SP[6], UNCF。
0087C1 7640 LCR $div_f32.asm:52:71$。
0087C3 E203 MOV32 *-SP[4], R0H。
复制代码 结论:
可见单从浮点处理器来说,F28335是不如F4的FPU的。但是由于F28335是哈佛架构,有较长的流水线,可以在一个时钟周期里完成读取,运算和存储,所以程序连续运行的话,就比ARM快上许多许多,比如执行一次a = a + b只需要5个时钟周期,但是缺点就是一旦要跳转,就必须清空流水线,如果是。
for(i = 0;i < 1000; i ++)。
a = a + b;
复制代码 这样的运算,速度反而要比ARM慢(测试下来单次是17周期,ARM是14).所以说这就是ARM和DSP不同的地方了。
看看这次测试比较,感觉环境还是有一定的问题:
1、F28335是在RAM中运行,并且两者都是在仿真器环境中进行运算,还是离线在Flash中跑比较靠谱。
2、两者编译平台一个是CCS,一个是KEIL,对通用语句的优化,有待商榷。
3、ARM和TI的数学库中,各自支持的运算种类不一样。
课上实训项目中使用的STM32单片机型号有STM32F103、STM32F407、STM32F412等。根据查询相关资料信息显示,STM32单片机是一种高性能、低成本的32位微控制器,由ST公司生产,具有丰富的外设功能,实时处理能力强,是应用在工业控制、医疗设备、消费类电子产品、自动化控制等领域中非常流行的单片机产品,该公司提供给课堂实训的机型有,STM32F103、STM32F407、STM32F412等。
优点如下:
1、STM32属于arm内核的一个版本,比传统的51单片机高级多了,有很多资源是51不具备的,如usb控制器。而且已经废除了机器周期什么的,速度不是51能比的。
2、STM32单片机程序都是模块化的,接口相对简单些,因为它自身带好多功能,工作速度也快。而51的自身功能少,需要外围元件多,要求对电子熟悉。
stm32单片机:
在STM32F105和STM32F107互连型系列微控制器之前,意法半导体已经推出STM32基本型系列、增强型系列、USB基本型系列、互补型系列;新系列产品沿用增强型系列的72MHz处理频率。内存包括64KB到256KB闪存和 20KB到64KB嵌入式SRAM。新系列采用LQFP64、LQFP100和LFBGA100三种封装。
TI 和Infineon的芯片一直是烧录行业内问题最多的两家 (技术难度上还有赛灵思和Altera) . 但也是有规律可循的, 他们的主控芯片上几乎都内置有JTAG端口,数据分布上常设置有加密位,微调位,数据测试段和FLASH区等。这颗芯片TMS320F28335被锁,主要可能是加密位锁住, 相应加密为地址如上图标示。
以STM32F103C8T6为例(stm32系列后缀的前部分STM32F103都是相同的,只有后面几位数字和字母才有区别):
1、STM3代表的是ARM Cortex-M内核的32位微控制器。 。
2、F代表的是芯片子系列。 。
3、103代表的是增强型系列。 。
4、C指引脚数是48脚。
5、8指内嵌的Flash容量为64K字节Flash。
6、T代表的是LQFP封装。
7、6指工作温度范围为-40——85℃。
补充:
1、引脚数除了C代表48脚之外,还会用其他字母表示,比如T代表36脚、R代表64脚,V代表100脚,Z代表144脚,I代表176脚。
2、内嵌Flash容量除了8为64K字节Flash,还会用其他数字或者字母表示,比如6代表的是32K字节Flash,B代表的是128K字节Flash,C代表的是256K字节Flash,D代表的是384K字节Flash,E代表的是512K字节Flash,G代表的是1M字节Flash。
3、封装除了L是LQFP封装之外,还可以用其他字母表示,比如H代表的是BGA封装,U代表的是VFQFPN封装。
4、工作温度范围6代表的-40——85℃之外,还有7代表的是-40——105℃。
扩展资料
在STM32F107和STM32F105互连型系列微控制器之前,意法半导体已经研制出了STM32基本型系列、USB基本型系列、增强型系列、互补型系列。
其中,增强型系列包括STM32F103R8、STM32F103C8、STM32F103VB、STM32F103V8、STM32F103RB、STM32F103ZE、 STM32F103VE。
基本型系列包括STM32F101R6、STM32F101V8、STM32F101C8、STM32F101VB、STM32F101R8、STM32F101RB。
参考资料来源:百度百科-stm32。