我们知道在HC32F460系列芯片当中有FPU这个内核模块但应用手册当中并没有写出如何打开这个功能。
可能很多初学者用不到FPU 但多学总没有坏处。FPU是专门用于浮点计算的单元根据IEEE的浮点标准
原本通用CPU需要3~4个周期的计算时间现在只需要一个FPU指令就行。在触摸屏,数学函数运算时特别有用。
ok首先我们必须添加arm_math.h这个官方数学库,如果系统提示没有该文件那你必须安装CMSIS这个PACK。
这个CMSIS PACK里面有非常多ARM库,比如DSP这个库就在其中。因为华大半导体并没有为自己的芯片提供DSP库
所以我们也只能用CMSIS(ST就自己优化过的DSP库)并且我们不用担心法律问题Arm根据Apache 2.0许可免费提供CMSIS 。
接下来是要添加几个全局宏定义主要是为了打开预编译
__TARGET_FPU_VFP,__FPU_PRESENT,ARM_MATH_CM4
前面的两个宏是关于FPU开启的后面是官方math库开启的,在打开编译FPU开关其实没有必要不过还是打开以防万一。
之后再在 system_hc32f460kcta.c 的系统初始化函数 SystemInit 添加这段代码.
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
SCB->CPACR |= ((3UL << 20) | (3UL << 22)); /* set CP10 and CP11 Full Access */
#endif
int32_t main(void)
{
float D = 0.000001;
float C = 0;
while(1)
{
C = D+C;
};
}
接下来插上仿真器开始调试,这是反汇编的结果明显调用了FPU指令
并且FPU模块也被塞满了数据。
下面是C的值。
ok实验已经完成,细心的可能已经发现了这和STM32的开启过程一样为什么你还要写?其实内核的东西差不了多少
只是在某平台的作者也写了关于HC32打开FPU的话题但竟然要你开VIP才能看我相信我们的坛友也不想花这个冤枉钱,
于是乎就有了这篇文章。大家可以加我的QQ群375029515一起讨论关于嵌入式的话题。
下期我们使用HC32F460的ADC功能写一个K型热电偶的温度采集,讨论什么是冷端补偿和放大电路设计。
谢谢大家看到这里!!!
下面是工程模板:
HC32F460工程模板.zip
(536.35 KB, 下载次数: 28)
|