日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stm32h743单片机嵌入式学习笔记7-FPU

發布時間:2023/12/8 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stm32h743单片机嵌入式学习笔记7-FPU 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

* FPU 即浮點運算單元(Float Point Unit)。浮點運算,對于定點 CPU(沒有 FPU 的 CPU)
來說必須要按照 IEEE-754 標準的算法來完成運算,是相當耗費時間的。而對于有 FPU 的 CPU
來說,浮點運算則只是幾條指令的事情,速度相當快

LDR.W R0, =0xE000ED88 ; 使能浮點運算 CP10,CP11
LDR R1,[R0]
ORR R1,R1,#(0xF << 20)
STR R1,[R0]
DSB
此部分代碼是 Reset_Handler 函數的部分內容(默認就是有的,我們不需要修改和添加),功能就是設置 CPACR 寄存器的 20~23 位為1,以開啟 STM32H743 的硬件 FPU 功能。

但是,僅僅開啟硬件 FPU 是不夠的,我們還需要在編譯器上面,做一下設置,否則編譯器
遇到浮點運算,還是采用傳統的方式(IEEE-754 標準)完成運算,不能體現硬件浮點運算的優
勢。這里,我們在 MDK5 編譯器里面,點擊 按鈕,然后在 Target 選項卡里面,設置 Floating
Point Hardware 為 Double Precision,如圖 56.1.1.2 所示:(我估計這個過程,編譯器實際上就是在單片機程序里添加了定義了__FPU_USED這樣的一個宏,文章末尾我會講解一下hal庫函數工程確實就是這么回事)

這樣就成功開啟了FPU,當我們的程序中有浮點數計算的時候單片機就會自動調用FPU硬件單元進行計算了

經過這個設置,編譯器遇到浮點運算就會使用硬件 FPU 相關指令,執行浮點運算,從而大
大減少計算時間。

最后,總結下 STM32H743 硬件 FPU 使用的要點:
1, 設置 CPACR 寄存器 bit20~23 為 1,使能硬件 FPU。
2, MDK 編譯器 Code Generation 里面設置:Double Precision。不需要在代碼里添加任何東西
經過這兩步設置,我們的編寫的浮點運算代碼,即可使用 STM32H743 的硬件 FPU 了,可
以大大加快浮點運算速度。

----------------------------------------------------------------------------------------------------------------------------------------------

hal庫函數工程:

我們在 system_stm32h7xx_c 文件里面開啟,代碼如下:
void SystemInit(void)
{
/* FPU settings ------------------------------------------------------------*/
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
#endif
……//省略部分代碼
}
此部分代碼是系統初始化函數的部分內容,功能就是設置 CPACR 寄存器的 20~23 位為 1,
以開啟 STMH32H7 的硬件 FPU 功能。從程序可以看出,只要我們定義了全局宏定義標識符
__FPU_PRESENT 以及__FPU_USED 為 1,那么就可以開啟硬件 FPU。其中宏定義標識符
__FPU_PRESENT 用來確定處理器是否帶 FPU 功能,標識符__FPU_USED 用來確定是否開啟
FPU 功能。
實際上,因為 H7 是帶 FPU 功能的,所以在我們的 stm32h743xx.h 頭文件里面,我們默認
是定義了__FPU_PRESENT 為 1。大家可以打開文件搜索即可找到下面一行代碼:
#define __FPU_PRESENT 1
但是,僅僅只是說明處理器有 FPU 功能是不夠的,我們還需要開啟 FPU 功能。開啟 FPU
有兩種方法,第一種是直接在頭文件 STM32h743xx.h 中定義宏定義標識符__FPU_USED 的值為
1。也可以直接在 MDK 編譯器上面設置,我們在 MDK5 編譯器里面,點擊 按鈕,然后在 Target
選項卡里面,設置 Floating Point Hardware 為 Use Double Precision

經過這個設置,編譯器會自動加入標識符__FPU_USED 為 1。這樣遇到浮點運算就會使用
硬件 FPU 相關指令,執行浮點運算,從而大大減少計算時間。

?

通過實驗對比發現,使用硬件 FPU 和不使用硬件 FPU 對比,同樣的條件下,硬件 FPU 快了近
16 倍,充分體現了 STM32H743 硬件 FPU 的優勢

?

總結

以上是生活随笔為你收集整理的stm32h743单片机嵌入式学习笔记7-FPU的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。