野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10992|回复: 10

【F429】 BH-429 DSP使用方法总结

[复制链接]
发表于 2016-1-23 15:20:00 | 显示全部楼层 |阅读模式
本帖最后由 十一月的萧邦 于 2016-1-23 17:38 编辑

最近用到FPU,于是用火哥的429开发板移植了一下DSP库,分享出来。
STM32-F4属于Cortex-M4F构架,这和M0、M3的最大不同就是多了一个F-float,即支持浮点指令集,因此在处理数学运算时能比M0/M3高出数十倍甚至上百倍的性能,但是要充分发挥FPU的数学性能,还需要一些小小的设置,下面为大家揭开咯。

1: 编译器选项

       不知大家有没有看过 Systerm_Init()函数,在函数开始就有预编译语句:
       /* FPU settings ------------------------------------------------------------*/
      #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
       SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));  /* set CP10 and CP11 Full Access */
     #endif
      再后面就是一些对RCC时钟的配置啥的了,与题不符,不多讲。
      从以上的函数语句可以看出要使用FPU 首先要过了预编译这一关,因此首先在Target选项C/C++选项卡的Define中加入宏:__FPU_PRESENT=1,__FPU_USED =1,此时你程序中简单的 +-*/ 运算将由FPU来搞       定。但这貌似还缺点什么,如果程序中我要计算某正弦波的有效值,势必要用到开方,如果再有Sin Cos 向量啥的,那就显得远远不够。如果编程时还是使用math.h头文件,那是没法提升效率的:因为math.h      头文件是针对所有ARM处理器的,其运算函数都是基于定点CPU和标准算法(IEEE-754),并没有预见使用FPU的情况,需要很多指令和复杂的过程才能完成运算,也就增加了运算时间。因此要充分发挥M4F        的浮点功能,就需要使用固件库自带的arm_math.h,这个文件根据编译控制项(__FPU_USED == 1)来决定是使用那一种函数方法:如果没有使用FPU,那就调用keil的标准math.h头文件中定义的函数;如果      使用了FPU,那就是用固件库自带的优化函数来解决问题。
        在arm_math的开头部分是有这些编译控制信息:     

          #ifndef _ARM_MATH_H
         #define _ARM_MATH_H

         #define __CMSIS_GENERIC            

         #if defined (ARM_MATH_CM4)
                    #include "core_cm4.h"

         ...........(此处略去万万字)

        就是说如果不使用CMSIS的,就会调用keil自带的标准库函数。否则就用CMSIS的定义。这里因为是用的STM32F4,所以应该要ARM_MATH_CM4控制,即加入core_cm4.h,否则就用使用ARMCM4.h——但在           编译时keil会提示找不到这文件。因此需要在工程选项之C/C++选项卡的define中继续加入宏:   ARM_MATH_CM4

        在以上操作后也就有了可以直接使用CMSIS-DSP库的前提条件。

        在 CMSIS 的源文件目录下有一些已经被编译并且打包成*.lib 形式的库,如果不想额外编译库
        的源码,可以选择直接将*.lib 文件加入到自己的工程目录中去并做些小的修改即可。从 CMSIS-DSP
        库的说明文档中我们可以看到F429对应的DSP库:
        arm_cortexM4lf_math.lib (Cortex-M4 小端模式,带浮点运算器的 MCU)      注 : 大小端模式不知道的自行百度,或者自行写个测试代码测试下。
        最后将 lib添加到工程中就可以直接使用了。

        当然 CMSIS-DSP库怎么可能就这么点用处呢,他还包括了大量的复数运算,算法库(PID MOTOR CONTROL , FFT)等,应有尽有。
        DSP库链接如下: http://www.keil.com/pack/doc/CMSIS/DSP/html/group___p_i_d.html
        测试例程  :  链接:http://pan.baidu.com/s/1nupG6ox 密码:wiws

        以上是对M4使用DSP的移植步骤,那么是不是代表103就不能使用了呢?103也可以使用普通的DSP库,在MDK的Target选项中有个Floating Point Hardware选项卡        如果MCU不带FPU 则打到Not Used,即使用定点运算(效率相对Keil自带math库,效率相对快些) ,     ARM CMSIS的官方库文件中有特殊的不带FPU库文件,移植起来更容易。


[{M(6XFD2L]6ZX7TMYYIEBT.png
2C4A$ZJ$_FY%[V)DJ}6F~P7.png
E[~[)A9W07}LWA~K)5WT7{C.png
F(`9T08V0T9MI~UKNP7C%8Y.png
CR(__`3(C1G7N{NWI~AMM33.jpg
1E%1`@]JKJV_3F_59V@@Z9O.png
回复

使用道具 举报

 楼主| 发表于 2016-1-23 15:20:22 | 显示全部楼层
消灭您回复,自顶!!!!
回复 支持 反对

使用道具 举报

发表于 2016-1-23 16:05:09 | 显示全部楼层
感谢分享,希望能分享更多的dsp使用经验库里竟然连pid都有。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-23 16:17:33 | 显示全部楼层
flyleaf 发表于 2016-1-23 16:05
感谢分享,希望能分享更多的dsp使用经验库里竟然连pid都有。。

有FFT  才让人惊叹   
回复 支持 反对

使用道具 举报

发表于 2016-1-23 16:31:35 | 显示全部楼层

FFT的之前有看过,感觉FFT是必备啊,只是没想到有pid
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-23 16:35:58 | 显示全部楼层
flyleaf 发表于 2016-1-23 16:31
FFT的之前有看过,感觉FFT是必备啊,只是没想到有pid

对,啥都有,还有插值算法
回复 支持 反对

使用道具 举报

发表于 2016-1-23 17:22:53 | 显示全部楼层
赞                       ,好东西
回复 支持 反对

使用道具 举报

发表于 2016-1-23 17:39:50 | 显示全部楼层
M4 用来做飞控制 会不会 很吊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-23 17:43:16 | 显示全部楼层
fire 发表于 2016-1-23 17:39
M4 用来做飞控制 会不会 很吊

匿名飞控 都用的M4
回复 支持 反对

使用道具 举报

发表于 2017-8-21 20:32:21 | 显示全部楼层
请问有F103的DSP库移植例程吗,最近做一些东西急需在F103里面做FFT变换还有滤波啥的,请指教谢谢!
回复 支持 反对

使用道具 举报

发表于 2017-8-21 20:32:53 | 显示全部楼层
请问有F103的DSP库移植例程吗,最近做一些东西急需在F103里面做FFT变换还有滤波啥的,请指教谢谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-20 10:58 , Processed in 0.042276 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表