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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

STM32F4 FPU浮点运算单元

發布時間:2023/12/8 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32F4 FPU浮点运算单元 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

FPU 即浮點運算單元(Float Point Unit)。浮點運算,對于定點 CPU(沒有 FPU 的 CPU)

來說必須要按照 IEEE-754 標準的算法來完成運算,是相當耗費時間的。而對于有 FPU 的 CPU

來說,浮點運算則只是幾條指令的事情,速度相當快。

STM32F4 屬于 Cortex M4F 架構,帶有 32 位單精度硬件 FPU,支持浮點指令集,相對于

Cortex M0 和 Cortex M3 等,高出數十倍甚至上百倍的運算性能。

STM32F4 硬件上要開啟 FPU 是很簡單的,通過一個叫:協處理器控制寄存器(CPACR)

的寄存器設置即可開啟 STM32F4 的硬件 FPU,該寄存器各位描述如圖 51.1.1.1 所示:

? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 51.1.1.1 協處理器控制寄存器(CPACR)各位描述

這里我們就是要設置 CP11 和 CP10 這 4 個位,復位后,這 4 個位的值都為 0,此時禁止訪

問協處理器(禁止了硬件 FPU),我們將這 4 個位都設置為 1,即可完全訪問協處理器(開啟

硬件 FPU),此時便可以使用 STM32F4 內置的硬件 FPU 了。CPACR 寄存器這 4 個位的設置,

我們在 system_stm32f4xx_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,

以開啟 STM32F4 的硬件 FPU 功能。從程序可以看出,只要我們定義了全局宏定義標識符

__FPU_PRESENT 以及__FPU_USED 為 1,那么就可以開啟硬件 FPU。其中宏定義標識符

__FPU_PRESENT 用來確定處理器是否帶 FPU 功能,標識符__FPU_USED 用來確定是否開啟FPU 功能。

實際上,因為 F4 是帶 FPU 功能的,所以在我們的 stm32f4xx.h 頭文件里面,我們默認是定

義了__FPU_PRESENT 為 1。大家可以打開文件搜索即可找到下面一行代碼:

#define __FPU_PRESENT 1

但是,僅僅只是說明處理器有 FPU 是不夠的,我們還需要開啟 FPU 功能。開啟 FPU 有兩

種方法,第一種是直接在頭文件 STM32f4xx.h 中定義宏定義標識符__FPU_USED 的值為 1。也

可以直接在 MDK 編譯器上面設置,我們在 MDK5 編譯器里面,點擊

按鈕,然后在 Target

選項卡里面,設置 Floating Point Hardware 為 Use Single Precision,如圖 51.1.1.2 所示:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 51.1.1.2 編譯器開啟硬件 FPU 選型

經過這個設置,編譯器會自動加入標識符__FPU_USED 為 1。這樣遇到浮點運算就會使用

硬件 FPU 相關指令,執行浮點運算,從而大大減少計算時間。

最后,總結下 STM32F4 硬件 FPU 使用的要點:

1, 設置 CPACR 寄存器 bit20~23 為 1,使能硬件 FPU。

2, MDK 編譯器 Code Generation 里面設置:Use FPU。

經過這兩步設置,我們的編寫的浮點運算代碼,即可使用 STM32F4 的硬件 FPU 了,可以

大大加快浮點運算速度。

轉了等于我會了~真是個小機靈鬼呢~

附:UCOSIII移植過程中,似乎是低版本的不支持FPU,在移植到STM32F4系列時,有浮點計算時任務不執行,在PendSv_Handle中,并未對浮點處理寄存器做進出棧的操作。最新的ucosIII好似更新到了V3.09版本呢,官網的Release文檔也有相關FPU的更新說明,但是我依然選擇在UCOSIIIde V3.0.4版本上更新,借助網絡上前輩的蔭,成功解鎖了UCOSIII移植到STM32F4系列的FPU使用

總結

以上是生活随笔為你收集整理的STM32F4 FPU浮点运算单元的全部內容,希望文章能夠幫你解決所遇到的問題。

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