用户工具

站点工具


icore3l_arm_49

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

后一修订版
前一修订版
icore3l_arm_49 [2020/12/03 16:53]
zgf 创建
— (当前版本)
行 1: 行 1:
-|  **银杏科技有限公司旗下技术文档发布平台** ​ |||| 
-|技术支持电话|**0379-69926675-801**||| 
-|技术支持邮件|Gingko@vip.163.com||| 
-|技术论坛|http://​www.eeschool.org||| 
-^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^ 
-|  V1.0  |  2020-12-03 ​ |  gingko ​ |  初次建立 ​ |  
-\\ 
-\\ 
-===== STM32CubeMX教程四十九——DSP_MATH实验 ===== 
-1.在主界面选择File-->​New Project或者直接点击ACCEE TO MCU SELECTOR  ​ 
-{{ :​icore3l:​icore3l_cube_49_1.png?​direct |}} 
-2.出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置在搜索栏的下面,提供的各种查找方式,可以选择芯片内核,型号等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32F429IGHx。 
-{{ :​icore3l:​icore3l_cube_49_2.png?​direct |}} 
-3.配置RCC,使用外部时钟源 
-{{ :​icore3l:​icore3l_cube_49_3.png?​direct |}} 
-4.调试选择Serial Wire,时基源选择SysTick 
-{{ :​icore3l:​icore3l_cube_49_4.png?​direct |}} 
-{{ :​icore3l:​icore3l_cube_49_5.png?​direct |}} 
-5.将PI3,​PI4,​PH14设置为GPIO_Output 
-{{ :​icore3l:​icore3l_cube_49_6.png?​direct |}} 
-引脚模式配置 
-{{ :​icore3l:​icore3l_cube_49_7.png?​direct |}} 
-6.设置串口 
-{{ :​icore3l:​icore3l_cube_49_8.png?​direct |}} 
-7.时钟源设置,选择外部高速时钟源,配置为最大主频 
-{{ :​icore3l:​icore3l_cube_49_9.png?​direct |}} 
-8.工程文件的设置,​ 这里就是工程的各种配置我们只用到有限几个,其他的默认即可IDE我们使用的是MDK V5.27 
-{{ :​icore3l:​icore3l_cube_49_10.png?​direct |}} 
-9.点击Code Generator,进行进一步配置 
-{{ :​icore3l:​icore3l_cube_49_11.png?​direct |}} 
-  * **Copy all used libraries into the project folder** 
-  * 将HAL库的所有.C和.H都复制到所建工程中 
-    * 优点:这样如果后续需要新增其他外设又可能不再用STM32CubeMX的时候便会很方便 
-    * 缺点:体积大,编译时间很长 
-  * **Copy only the necessary library files** 
-  * 只复制所需要的.C和.H(推荐) 
-    * 优点:体积相对小,编译时间短,并且工程可复制拷贝 
-    * 缺点:新增外设时需要重新用STM32CubeMX导入 
-  * **Add necessary library files as reference in the toolchain project configuration file** 
-  * 不复制文件,直接从软件包存放位置导入.C和.H 
-    * 优点:体积小,比较节约硬盘空间 
-    * 缺点:复制到其他电脑上或者软件包位置改变,就需要修改相对应的路径 
-  * 自行选择方式即可 
-10.然后点击GENERATE CODE创建工程 
-{{ :​icore3l:​icore3l_cube_49_12.png?​direct |}} 
-创建成功,打开工程。 
-\\ 
-\\ 
-\\ 
-\\ 
-===== 实验四十九:DSP——MATH实验 ===== 
-==== 一、实验目的与意义 ==== 
-  - 了解STM32 DSP结构 
-  - 了解STM32 DSP特征 
-  - 掌握DSP原理 
-  - 掌握STM32 HAL库中DSP属性的配置方法 
-  - 掌握KEIL MDK集成开发环境使用方法 
-==== 二、实验设备及平台 ==== 
-  - iCore3L 双核心板 
-  - JLINK(或相同功能)仿真器 
-  - Micro USB线缆 
-  - Keil MDK 开发平台 
-  - STM32CubeMX开发平台 
-  - 装有WIN XP(及更高版本)系统的计算机 
-==== 三、实验原理 ==== 
-=== 1.FPU简介 === 
-  * STM32F4xx属于Cortex M4架构,带有32位的单精度硬件FPU(Float Point Unit),支持浮点指令集,相对比M0和M3架构,浮点运算性能高出数十倍甚至上百倍。CortexM4 FPU是ARM FPv4-SP单精度FPU一种实现形式。 
-=== 2.DSP库的使用 === 
-  * STM32F4的Cortex-M4内核不仅内置硬件FPU单元,还支持DSP多种指令集,比如支持单周期乘加指令(MAC)、优化的单指令多数据指令(SIMD)等。因此Cortex-M4执行所有的DSP指令集都可以在单周期内完成,而Cortex-M3和M0需要多个指令和多个周期才能完成同样的功能。比如开方运算,M3和M0只能通过迭代法(标准数学函数库)计算,而M4直接调用VSQRT指令完成 
-(1)获取DSP库 
-  * ST官方提供了一整套的DSP库方便我们开发使用。在ST提供的标准库:stm32f4_dsp_stdperiph_lib.zip里面就有(该文件可以从ST官网上下载:http://​www.st.com/​web/​en/​catalog/​tools/​FM147/​CL1794/​SC961/​SS1743/​PF257901下载,文件名:STSW-STM32065)。下载解压缩之后,在目录STM32F4xx_DSP_StdPeriph_Lib_V1.8.0→Libraries→CMSIS→DSP_Lib下可以找到DSP库文件和测试实例。Sourse中是所有DSP库文件源代码,Examples文件夹下是一些测试实例。 
-(2)DSP库简介 
-  * ST提供了.lib格式的文件,方便使用这些库。这些.lib文件就是由Source文件夹下的源码编译生成的,如果想看某个函数的源码,可以在Source文件夹下面查找。.lib格式文件路径:STM32F4xx_DSP_StdPeriph_Lib_V1.4.0→Libraries→CMSIS→Lib→ARM,总共有8个.lib文件,和M4F相关的有两个: 
-  * arm_cortexM4bf_math.lib(浮点Cortex-M4大端模式) 
-  * arm_cortexM4lf_math.lib(浮点Cortex-M4小端模式) ​ 
-  * STM32F4的内核CortexM4F采用小端模式,所以选择:arm_cortexM4lf_math.lib(浮点Cortex-M4小端模式)。 
-=== 3.DSP库编程环境搭建 === 
-  * 首先添加库文件。在工程目录下新建DSP_LIB文件夹用于存放库文件。然后把arm_cortexM4lf_math.lib和相关头文件(路径STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\ Libraries\CMSIS\Include 里的文件)拷贝到DSP_LIB文件夹中。 
-  * 附:ST官方提供了一整套的DSP库方便我们开发使用。在ST提供的标准库:stm32f4_dsp_stdperiph_lib.zip里面就有,该文件可以从ST官网上下载:http://​www.st.com/​web/​en/​catalog/​tools/​FM147/​CL1794/​SC961/​SS1743/​PF257901下载,文件名:STSW-STM32065。下载解压缩之后,在目录STM32F4xx_DSP_StdPeriph_Lib_V1.8.0→Libraries→CMSIS→DSP_Lib下可以找到DSP库文件和测试实例。Sourse中是所有DSP库文件源代码,Examples文件夹下是一些测试实例里的文件)。 
-  * 然后打开工程,新建DSP_LIB分组,并将arm_cortexM4lf_math.lib添加到工程里面。 
-  * 添加好文件之后,需要添加头文件包含路径,将第一步拷贝的Include文件夹和DSP_LIB文件夹,加入头文件包含路径。打开工程属性设置面板,然后点击”C/​C++“选项卡,点击对号处,弹出include path设置面板。添加”..\DSP_LIB“和“..\DSP_LIB\Include“两个路径。 
-{{ :​icore3l:​icore3l_arm_hal_49_1.png?​direct |}} 
-最后,为了能够使用DSP库的所有功能,还需要添加以下几个全局宏定义 
-  * 1、ARM_MATH_CM4 
-  * 2、_CC_ARM 
-  * 3、ARM_MATH_MATRIX_CHECK 
-  * 4、ARM_MATH_ROUNDING 
-{{ :​icore3l:​icore3l_arm_hal_49_2.png?​direct |}} 
-  * 添加方法是打开工程属性设置面板,然后点击”C/​C++“选项卡,在“Preprocessor Symbols“下的”Define:”文本框中进行添加。两个宏之间用“,”隔开。 
-==== 四、实验程序 ==== 
-1.主函数 
-<​code>​ 
-int main(void) 
-{ 
-  int i,j; 
-  int res; 
-  int time[2]; 
-  static int error_flag = 0; 
-  HAL_Init(); 
-  SystemClock_Config();​ 
-  MX_GPIO_Init();​ 
-  MX_USART1_UART_Init();​ 
-  usart1.initialize(115200);​ 
-  usart1.printf("​\x0c"​); ​               //​清屏 ​ 
-  usart1.printf("​\033[1;​32;​40m"​); ​      //​设置终端字体为绿色 ​ 
-  usart1.printf("​Hello,​ I am iCore3L!\r\n\r\n"​);​ 
-  usart1.printf("​DSP BasicMath TEST......\r\n"​); ​ 
-  while (1) 
-  { 
-    uwTick = 0; 
-    for(j = 0;j < 10000;j++) 
-    { 
-    for(i = 0;i < MAX_BLOCKSIZE;​i ++) 
-      { 
- res = SinCos_Test(testInput_f32[i],​0);​ 
- if(res != 0)error_flag ++; 
-      } 
-    } 
-    time[0] = HAL_GetTick();​  
-    uwTick = 0; 
-    for(j = 0;j < 10000;j++) 
-    { 
-      for(i = 0;i < MAX_BLOCKSIZE;​i ++) 
-      { 
- res = SinCos_Test(testInput_f32[i],​1);​ 
- if(res != 0)error_flag ++; 
-      } 
-    } 
-    time[1] = HAL_GetTick();​ 
-    if(error_flag == 0) 
-    { 
-      usart1.printf("​*NO DSP MATHLIB runtime:​%dms *USE DSP MATHLIB runtime:​%dms\r",​time[0],​ time[1]); 
-      LED_GREEN_ON;​ 
-    } 
-    else 
-    { 
-      usart1.printf("​Error\r"​);​  
-      LED_RED_ON; 
-    } 
-  } 
-} 
-</​code>​ 
-2.SinCos_Test函数 
-<code c> 
  
-</​code>​ 
icore3l_arm_49.1606985611.txt.gz · 最后更改: 2020/12/03 16:53 由 zgf