本帖最后由 DavidZH 于 2016-12-21 13:46 编辑
CortexM7 内核包含DSP功能可以进行浮点数运算,增加MCU的浮点数运算能力;MDK的Run-Time Environment 可以直接添加应用ST提供的DSP库;
准备软件:
Keil.STM32F7xx_DFP.2.8.0.zip
http://www.keil.com/dd2/Pack/
STM32CUBEMX和MDK软件
一、MDK采用Run-Time Environment 添加DSP库:
1、先采用CUBEMX 生成相应的代码,时钟依然选择216MHZ;添加串口;
2、添加DSP库:
3、添加宏定义:我们用的STM32F7,所以添加ARM_MATH_CM7
4、添加代码,测试:
- float32_t pSrc;
- float32_t pDst;
- while(1)
- {
- # if 1
- pSrc-=1.23f;
- arm_abs_f32(&pSrc,&pDst,1);
- printf("pDst = %f \r\n",pDst);
- HAL_Delay(800);
- #endif
- }
复制代码结果:
5、复数FFT的逆变换测试:(添加测试代码)
- GPIO_InitTypeDef myled;
- __HAL_RCC_GPIOA_CLK_ENABLE();
-
- myled.Pin =GPIO_PIN_6 | GPIO_PIN_4;
- myled.Mode=GPIO_MODE_OUTPUT_PP;
- myled.Speed=GPIO_SPEED_FAST;
-
- HAL_GPIO_Init(GPIOA, &myled);
-
- HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6 , GPIO_PIN_SET);
- while(1)
- {
- arm_cfft_f32_app();
- i++;
- if(i==1)
- {
- HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6 , GPIO_PIN_SET);
- }else if(i==2){
- i=0;
- HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6 , GPIO_PIN_RESET);
- }
- }
- uint32_t fftSize = 1024;
- uint32_t ifftFlag = 0;
- uint32_t doBitReverse = 1;
- static void arm_cfft_f32_app(void)
- {
- uint16_t i;
-
- fftSize = 1024;
- ifftFlag = 0;
- doBitReverse = 1;
-
- for(i=0; i<1024; i++)
- {
- testInput_f32_10khz[i*2+1] = 0;
-
- testInput_f32_10khz[i*2] = arm_sin_f32(2*3.1415926f*50*i/1000);
-
- }
-
-
- arm_cfft_f32(&arm_cfft_sR_f32_len1024, testInput_f32_10khz, ifftFlag, doBitReverse);
- ifftFlag = 1;
-
-
- arm_cfft_f32(&arm_cfft_sR_f32_len1024, testInput_f32_10khz, ifftFlag, doBitReverse);
- }
复制代码 打开硬件浮点数功能:
测试时间:
不开启硬件浮点功能:
开启浮点运算后的时间,远远小于不开启浮点运算的时间;
F769_hello.zip
(1.15 MB, 下载次数: 30)
点击此处,查看STM32F769I开发板官方资源。