MCU开发 —— GD32篇:3.添加ARM_DSP库到工程模板里
程序员文章站
2022-07-04 12:27:07
...
前言
相关代码可以在第一篇文章中的百度云网盘链接中下载
上一篇我们重新调整了SES关联的工程文件路径,将必要文件均从SES中解耦出来,方便移植到其他IDE中,本文主要是添加ARM_DSP库
添加ARM_MATH
在工程中添加对应的源文件
在项目配置中,添加宏定义ARM_MATH_LOOPUNROLL
这个是将4个数据为一组同步处理,加速计算
使能硬件浮点计算
添加代码
/*********************************************************************
* 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。
全部运行可以的到对应的计算结果,其中arm_cos_f32
输入的弧度 (0.5rad 约 28.6°),可以得到cos(28.6°) 约0.8775,计算正确。
上一篇: halcon 识别遥控器显示数字
下一篇: VBA基础学习之1.11事件