欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MCU开发 —— GD32篇:3.添加ARM_DSP库到工程模板里

程序员文章站 2022-07-04 12:27:07
...

前言

相关代码可以在第一篇文章中的百度云网盘链接中下载

上一篇我们重新调整了SES关联的工程文件路径,将必要文件均从SES中解耦出来,方便移植到其他IDE中,本文主要是添加ARM_DSP库

添加ARM_MATH

在工程中添加对应的源文件

MCU开发 —— GD32篇:3.添加ARM_DSP库到工程模板里
在项目配置中,添加宏定义ARM_MATH_LOOPUNROLL 这个是将4个数据为一组同步处理,加速计算

MCU开发 —— GD32篇:3.添加ARM_DSP库到工程模板里
使能硬件浮点计算

MCU开发 —— GD32篇:3.添加ARM_DSP库到工程模板里
添加代码

MCU开发 —— GD32篇:3.添加ARM_DSP库到工程模板里

/*********************************************************************
*                    SEGGER Microcontroller GmbH                     *
*                        The Embedded Experts                        *
**********************************************************************

-------------------------- END-OF-HEADER -----------------------------

File    : main.c
Purpose : Generic application start

*/

#include <gd32f30x.h>
#include <stdio.h>
#include <stdlib.h>
#include "arm_math.h"

static volatile int ticks = 0;

void SysTick_Handler(void) {
  ticks++;
}

static void delay(int n) {
  unsigned endTicks = ticks + n;
  while (ticks < endTicks);
}

float a,b,c;

/*********************************************************************
*
*       main()
*
*  Function description
*   Application entry point.
*/
int main(void) {
  // Enable SysTick timer interrupt
  SysTick->LOAD = (SystemCoreClock / 1000) - 1;
  SysTick->VAL = 0;
  SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk;

  // Config led gpio
  rcu_periph_clock_enable(RCU_GPIOB);
  gpio_init(GPIOB,GPIO_MODE_OUT_PP,GPIO_OSPEED_2MHZ,GPIO_PIN_14);
  gpio_init(GPIOB,GPIO_MODE_OUT_PP,GPIO_OSPEED_2MHZ,GPIO_PIN_15);
  while(1){
    a= 5.0f;
    b= a / 2.0f;
    c = arm_cos_f32(0.5f);
    printf("ticks = %d\n", ticks);
    printf("div = %f\n", b);
    printf("cos = %f\n", c);
    gpio_bit_set(GPIOB,GPIO_PIN_14);

    gpio_bit_reset(GPIOB,GPIO_PIN_15);
    delay(200);
    gpio_bit_reset(GPIOB,GPIO_PIN_14);
    gpio_bit_set(GPIOB,GPIO_PIN_15);
    delay(200);
  }

  // Disable SysTick interrupt
  SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
  exit(EXIT_SUCCESS);
}

/*************************** End of file ****************************/

编译后在除法处打个断点,可以看到使用的是vdiv.f32指令,说明使用的是内部硬件FPU。

MCU开发 —— GD32篇:3.添加ARM_DSP库到工程模板里
全部运行可以的到对应的计算结果,其中arm_cos_f32输入的弧度 (0.5rad 约 28.6°),可以得到cos(28.6°) 约0.8775,计算正确。

MCU开发 —— GD32篇:3.添加ARM_DSP库到工程模板里