你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【安富莱——DSP教程】第6章 ARM官方DSP库的移植

[复制链接]
baiyongbin2009 发布时间:2015-3-16 11:38
本帖最后由 baiyongbin2009 于 2015-3-16 11:42 编辑

特别说明:完整45期数字信号处理教程,原创高性能示波器代码全开源地址:链接
第6章 ARM官方DSP库的移植

    本期教程主要讲解ARM官方DSP库的移植和一些相关知识的介绍。
    6.1 DSP库的下载和说明
    6.2 DSP库在MDK上的移植
    6.3 简易DSP库函数验证
    6.4 总结

6.1 DSP库的下载和说明
    下面详细的给大家讲解一下官方DSP库的移植。
6.1.1 DSP库的下载
    DSP库是包含在CMSIS(Cortex Microcontroller Software Interface Standard)里面的,所以下载DSP库也就是下载CMSIS。有两个地方可以下载CMSIS,一个是ARM官网,一个是ST官网。首先说一下如何在ARM官网下载。
l 第一步:登陆ARM官方网址:http://www.arm.com/zh/
l 第二步:注册一个ID号,ARM官网不像ST官网,不注册就可以下载大部分资料,在ARM官网下载资料一定要注册一个ID。
6.1.png
l 第三步:具体注册过程就不多说了,按照提示步骤走即可。注册后可以简单的熟悉一下ARM官网的结构,然后查询我们需要下载的CMSIS,也可以直接在这里检索CMSIS即可。
6.2.png
  n 检索后打开界面如下:
6.3.png
  n 点击进去后,如下就是我们要找的CMSIS
6.4.png
关于ST官方上CMSIS的下载就不在这里赘述了,在STM32-V5开发板用户手册第5章:ST官方固件库介绍有详细的说明。
6.1.2 DSP库的说明
    这里我们以ST官方的F4系列固件库V1.3.0为标准进行移植。打开固件库里面的CMSIS文件,可以看到如下几个文件:
6.5.png
l 其中DSP_Lib中的文件如下:
6.6.png
Examples中的文件如下(这些是ARM官方提供的DSP实例):
6.7.png
Source中的文件如下(这些是DSP库的源文件):
6.8.png
一般情况下不建议将源文件加到工程里面,直接将ARM官方整理好的DSP库文件加入到工程中即可。不过需要查看库文件源码实现的话,可以加入源文件。
l Lib文件夹中就是DSP库文件
    打开后主要有以下三个文件夹:
6.9.png
    其中ARM文件夹中是我们可以加入到MDK中的DSP库,主要有以下几个版本:
6.10.png
    其中最后一个arm_cortexM4lf_math.lib是用于Cortex-M4系列带FPU的DSP库文件(l表示小端格式,b表示大端格式)。

收藏 2 评论12 发布时间:2015-3-16 11:38

举报

12个回答
baiyongbin2009 回答时间:2015-3-16 11:39:46
本帖最后由 baiyongbin2009 于 2015-3-16 11:41 编辑

6.2 DSP库在MDK上的移植
    下面我们讲解一下如何在MDK上面移植DSP库,DSP库的移植相对比较容易。这里我们仅介绍如何移植DSP库到MDK上面,官方没有IAR版本的库,所以无法提供移植(可以尝试将源码在IAR中进行编译)。
6.2.1 第一步:建立MDK工程并添加DSP库
    为了方便起见,我们这里不再专门建立一个MDK工程了,直接以V5开发板中的例子:V5-101_按键检测和LED控制例程为模板进行添加即可。打开这个实例并在左侧添加针对Cortex-M4F的DSP库。
6.11.png
6.2.2 第二步:添加头文件路径
    添加DSP所需的头文件路径,这个头文件路径是已经在工程中添加好的,这里只是跟大家强调一下。
6.12.png
6.2.3 第三步:添加宏定义
    添加宏定义如下(这里将STM3240XX换成了STM32F40_41xxx):
6.13.png
6.2.4 第四步:开启FPU
    需要客户通过MDK开启FPU,开启方法如下:
6.14.png
    另外根据ARM官方DSP库的要求,还需要设置宏__FPU_PRESENT为1,不过这个宏已经在文件stm32f4xx.h中设置了(为保险起见,建议把__FPU_PRESENT在第三步的地方也加上,因为部分DSP函数会因为没有这个声明而报错)。
6.15.png
6.2.5 第五步:添加头文件arm_math.h
    用到DSP库函数的相应的文件得添加#include "arm_math.h"的支持。
    按照上面五部操作即可完成DSP库的移植,移植好我们通过几个DSP库中的函数验证下是否正确。

baiyongbin2009 回答时间:2015-3-16 11:40:46
6.3 简易DSP库函数验证
    这里我们主要运行下函数arm_abs_f32,arm_abs_q31,arm_abs_q15这三个函数,以此来验证我们移植的DSP库是否正确。
实验目的:
    1. 学习官方DSP库的移植
实验内容:
    1. 按下按键K1, 串口打印函数arm_abs_f32的输出结果
    2. 按下按键K2, 串口打印函数arm_abs_q31的输出结果
    3. 按下按键K3, 串口打印函数arm_abs_q15的输出结果
实验现象:
    通过窗口上位机软件SecureCRT(V5光盘里面有此软件)查看打印信息现象如下(分别按几次K1,K2,K3):
6.16.png
程序设计:
    程序的设计也比较简单,通过按下不同的按键从而打印不同的DSP库函数执行结果,主程序如下:
  1. #include "bsp.h"         /* 底层硬件驱动 */
  2. #include "arm_math.h"

  3. /* 定义例程名和例程发布日期 */
  4. #define EXAMPLE_NAME        "V5-900_ARM官方DSP库的移植"
  5. #define EXAMPLE_DATE        "2014-08-25"
  6. #define DEMO_VER         "1.0"

  7. /* 仅允许本文件内调用的函数声明 */
  8. static void PrintfLogo(void);

  9. /*
  10. *********************************************************************************************************
  11. *        函 数 名: main
  12. *        功能说明: c程序入口
  13. *        形 参:无
  14. *        返 回 值: 错误代码(无需处理)
  15. *********************************************************************************************************
  16. */
  17. int main(void)
  18. {
  19. uint8_t ucKeyCode;         /* 按键代码 */
  20. float32_t pSrc;
  21. float32_t pDst;
  22. q31_t pSrc1;
  23. q31_t pDst1;
  24. q15_t pSrc2;
  25. q15_t pDst2;

  26. bsp_Init();         /* 硬件初始化 */
  27. PrintfLogo();        /* 打印例程信息到串口1 */

  28. bsp_StartAutoTimer(0, 500);        /* 启动1个500ms的自动重装的定时器 */

  29. /* 进入主程序循环体 */
  30. while (1)
  31. {
  32. bsp_Idle();         /* 这个函数在bsp.c文件。用户可以修改这个函数实现CPU休眠和喂狗 */

  33. if (bsp_CheckTimer(0))        /* 判断定时器超时时间 */
  34. {
  35. /* 每隔500ms 进来一次 */
  36. bsp_LedToggle(4);        /* 翻转LED4的状态 */
  37. }

  38. /* 按键滤波和检测由后台systick中断服务程序实现,我们只需要调用bsp_GetKey读取键值即可。 */
  39. ucKeyCode = bsp_GetKey();        /* 读取键值, 无键按下时返回 KEY_NONE = 0 */
  40. if (ucKeyCode != KEY_NONE)
  41. {
  42. switch (ucKeyCode)
  43. {
  44. case KEY_DOWN_K1:         /* K1键按下 */
  45. pSrc -= 1.23f;
  46. arm_abs_f32(&pSrc, &pDst, 1);
  47. printf("pDst = %f\r\n", pDst);
  48. break;
  49. case KEY_DOWN_K2:         /* K2键按下 */
  50. pSrc1 -= 1;
  51. arm_abs_q31(&pSrc1, &pDst1, 1);
  52. printf("pDst1 = %d\r\n", pDst1);
  53. break;

  54. case KEY_DOWN_K3:         /* K3键按下 */
  55. pSrc2 -= 1;
  56. arm_abs_q15(&pSrc2, &pDst2, 1);
  57. printf("pDst2 = %d\r\n", pDst2);
  58. break;
  59. default:
  60. /* 其它的键值不处理 */
  61. break;
  62. }
  63. }
  64. }
  65. }
复制代码
6.4 总结
    本期教程主要跟大家介绍了官方DSP库的移植,相对来说移植也比较简单,建议初学的同学按照这个步骤移植一遍。

大浪10010 回答时间:2015-3-16 15:54:55
学习了,,,,,
zfz0122 回答时间:2015-3-16 18:28:07
学习了 3.gif
wambob 回答时间:2015-3-16 19:14:41
学习了,支持
wu1169668869 回答时间:2015-3-17 00:11:34
很详细,期待整一个集合贴~
数码小叶 回答时间:2015-3-17 09:52:11
谢谢分享
数码小叶 回答时间:2015-3-17 09:53:26
支持一下。。。
w小菜才 回答时间:2015-3-17 10:03:26
学习一下
12下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版