这个得看你的算法,stm32的具体型号了,F4的明显比F1的要快。不过,我倒是做过用stm32F103的采集声音进行频率分析,基本上能达到实时显示频谱的效果。
Stm32f407主频168M,内部RAM和RoM更大,还有Stm32f409 更有Stm32f7系列,肯定能满足你的要求。
内存卡的读写速度是不同的,仔细看,卡上有都会有个圈,里面有个数字。
圈其实是个C字,不是个完整的圈,C的意思就CLASS,等级。
10级的最快,4级最慢。
C4就是最低写入4M,而C6就是6M,C10就是10M,以此类推。
目前在TF卡上比较常见的主要是C2、C4、C6和C10的速度。
※兼容于STM32F2系列产品,便于ST的用户扩展或升级产品,而保持硬件的兼容能力。
※集成了新的DSP和FPU指令,168MHz的高速性能使得数字信号控制器应用和快速的产品开发达到了新的水平。提升控制算法的执行速度和代码效率。
※先进技术和工艺
- 存储器加速器:自适应实时加速器(ART Accelerator™ )
- 多重AHB总线矩阵和多通道DMA:支持程序执行和数据传输并行处理,数据传输速率非常快。
- 90nm工艺
※高性能
- 210DMIPS@168MHz。
- 由于采用了ST的ART加速器,程序从FLASH运行相当于0等待更多的存储器。
- 多达1MB FLASH (将来ST计划推出2MB FLASH的STM32F4)
- 192Kb SRAM:128KB 在总线矩阵上,64KB在专为CPU使用的数据总线上高级外设与STM32F2兼容。
- USB OTG高速 480Mbit/s。
- IEEE1588, 以太网 MAC 10/100。
- PWM高速定时器:168MHz最大频率。
- 加密/哈希硬件处理器:32位随机数发生器(RNG)
- 带有日历功能的32位RTC:<1 μA的实时时钟,1秒精度。
※更多的提升
- 低电压:1.8V到3.6V VDD,在某些封装上,可降低至1.7V。
- 全双工I2S
- 12位 ADC:0.41us转换/2.4Msps(7.2Msps在交替模式)
- 高速USART,可达10.5Mbits/s。
- 高速SPI,可达37.5Mbits/s。
- Camera接口,可达54M字节/s。
论坛上看到的比较。
这几天刚拿到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的数学库中,各自支持的运算种类不一样。
原文地址:http://www.qianchusai.com/stm32f767%E6%AF%94f4%E5%BF%AB%E5%A4%9A%E5%B0%91.html