我們知道在HC32F460系列芯片當中有FPU這個內核模塊但應用手冊當中并沒有寫出如何打開這個功能。
可能很多初學者用不到FPU 但多學總沒有壞處。FPU是專門用于浮點計算的單元根據IEEE的浮點標準
原本通用CPU需要3~4個周期的計算時間現在只需要一個FPU指令就行。在觸摸屏,數學函數運算時特別有用。
download.png (2.47 KB, 下載次數: 90)
下載附件
2022-3-20 17:04 上傳
ok首先我們必須添加arm_math.h這個官方數學庫,如果系統提示沒有該文件那你必須安裝CMSIS這個PACK。
這個CMSIS PACK里面有非常多ARM庫,比如DSP這個庫就在其中。因為華大半導體并沒有為自己的芯片提供DSP庫
所以我們也只能用CMSIS(ST就自己優化過的DSP庫)并且我們不用擔心法律問題Arm根據Apache 2.0許可免費提供CMSIS 。
接下來是要添加幾個全局宏定義主要是為了打開預編譯
K482J{([ZCGJYF8FVUCI(@7.png (14.42 KB, 下載次數: 103)
下載附件
2022-3-20 17:08 上傳
__TARGET_FPU_VFP,__FPU_PRESENT,ARM_MATH_CM4
前面的兩個宏是關于FPU開啟的后面是官方math庫開啟的,在打開編譯FPU開關其實沒有必要不過還是打開以防萬一。
下載.png (6.47 KB, 下載次數: 87)
下載附件
2022-3-20 17:10 上傳
之后再在 system_hc32f460kcta.c 的系統初始化函數 SystemInit 添加這段代碼.
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
SCB->CPACR |= ((3UL << 20) | (3UL << 22)); /* set CP10 and CP11 Full Access */
#endif
下載 (1).png (55.24 KB, 下載次數: 93)
下載附件
2022-3-20 17:10 上傳
int32_t main(void)
{
float D = 0.000001;
float C = 0;
while(1)
{
C = D+C;
};
}
接下來插上仿真器開始調試,這是反匯編的結果明顯調用了FPU指令
下載 (2).png (11.53 KB, 下載次數: 104)
下載附件
2022-3-20 17:11 上傳
并且FPU模塊也被塞滿了數據。
下面是C的值。
下載 (3).png (3.33 KB, 下載次數: 93)
下載附件
2022-3-20 17:12 上傳
ok實驗已經完成,細心的可能已經發現了這和STM32的開啟過程一樣為什么你還要寫?其實內核的東西差不了多少
只是在某平臺的作者也寫了關于HC32打開FPU的話題但竟然要你開VIP才能看我相信我們的壇友也不想花這個冤枉錢,
于是乎就有了這篇文章。大家可以加我的QQ群375029515一起討論關于嵌入式的話題。
下期我們使用HC32F460的ADC功能寫一個K型熱電偶的溫度采集,討論什么是冷端補償和放大電路設計。
謝謝大家看到這里!!!
51hei.png (6.19 KB, 下載次數: 88)
下載附件
2022-3-20 17:25 上傳
下面是工程模板:
HC32F460工程模板.zip
(536.35 KB, 下載次數: 28)
2022-3-20 17:13 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|