stm32f407ig開啟fpu,做開方運算
mdk keil中使用stm32f4xx晶元硬體浮點單元fpu
步驟如下:
1 . 建立工程,新增相關必要的檔案到工程中。
2. 開啟 option for target 選擇 target 標籤,在code generatio中,將floating point hardware 選擇 use fpu。
3. 編譯你的工程,保證通過。當然也不一定需要編譯通過,先做編譯是為了後面新增浮點庫做準備,這樣發現問題和知道**出問題。
4. 開啟 option for target 選擇 c/c++ 標籤, 在define中新增:use_hal_driver,stm32f407xx,__target_fpu_vfp,arm_math_matrix_check,arm_math_rounding,arm_math_cm4,__cc_arm,由於我的是hal的庫,所以前面有use_hal_driver的全域性巨集定義,如果你用的不是hal庫,而是使用韌體庫的話,一般會有韌體庫的乙個全域性巨集定義use_stdperiph_driver和stm32f4***x在裡面,這在韌體庫中的例子工程中都會有這個的。所以,我這裡只需要新增
__target_fpu_vfp,
arm_math_matrix_check,
arm_math_rounding,
arm_math_cm4,
__cc_arm
注意中間用英文逗號分開。其中arm_math_matrix_check是庫函式的引數檢查開關,這裡新增後,就開啟。arm_math_rounding這個是庫函式在運算是是否開啟四捨五入的功能,我這裡新增,可以根據自己的需要進行配置。arm_math_cm4這個就非常重要,必須要配置進去,否則在編譯之後,會預設使用math.h的庫函式,而不會用到硬體的fpu的。__cc_arm是不同編譯器的編譯配置巨集定義,__cc_arm就是代表mdk開發環境。
5. 開啟工程中的 stm32f407xx.h 檔案,注意不是 stm32f4xx.h 檔案,是和你的晶元型號對應的標頭檔案,比如我用的是stm32f407,所以我這裡就選擇開啟stm32f407xx.h檔案,找到
#define __fpu_present 0 /*!< fpu present 這一句,將設定為 1 找到
#include "core_cm4.h" /* cortex-m4 processor and core peripherals */
#include "system_stm32f4xx.h"
#include
這個地方,然後在下面新增
#include "arm_math.h"
然後儲存。
6. 新增浮點庫檔案到工程。
如果用的是 uv4,開啟 c:\keil\arm\cmsis\lib\arm 目錄,複製「arm_cortexm4lf_math.lib」檔案到你的工程下,並加入工程。
如果用的是 uv5,開啟 c:\keil_v5\arm\pack\arm\cmsis\4.2.0\cmsis\lib\arm 目錄,複製「arm_cortexm4lf_math.lib」檔案到你的工程下,並加入工程。
這是新增lib庫檔案,也可以新增原始碼庫檔案, \stm32f4xx_dsp_stdperiph_lib\libraries\cmsis\dsp_lib\source
lib檔案,不參與編譯,只參與鏈結定位,所以編譯速度快,但是有點佔空間。根據自己的情況而定。
7. 準備工作完成了,進行編譯,如果不出錯,則基本上沒有什麼問題了,自己可以寫一段測試**試一試。
8. 浮點庫的函式用法和說明,可以看看 stm32f4xx_dsp_stdperiph_lib_um.chm 檔案。 或者直接開啟
c:\keil_v5\arm\pack\arm\cmsis\4.2.0\cmsis\documentation\dsp\html下面的 index.html 檔案,通過瀏覽器看幫助檔案。
stm32F407 開啟 FPU 浮點運算處理器
沒有開浮點處理器時 開了處理器時 開fpu主要分兩步 1.編譯器開啟浮點數產生指令 2.在初始化函式中開啟fpu system stm32f4xx.c void systeminit void fpu present 在 stm32f4xx.h定義 fpu used 在 cortex m4.h定義 ...
基於stm32f407建立stm32F427工程
分為三個部分 1.啟動檔案 2.fwilib 包含兩個資料夾inc和src。src裡面是stm32資源的c檔案,inc則是32資源的h檔案 3.user這也是我不太理解的部分 ddbugconfig只包含了用於debug的初始化,則是f4的系統檔案。我是在f407的基礎上改的 總的來說 1.改了晶元...
STM32F407上除錯freeRTOS問題
是在正點原子的阿波羅stm32f429開發板上的例子改來的,他們的編譯沒有問題,我編譯時出現如下問題 定位到出錯的地方,是 再追 configmax syscall interrupt priority 的定義是 define configmax syscall interrupt priority...