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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

stm32f4c语言编程,如何使用STM32F4的DSP库

發布時間:2023/12/9 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stm32f4c语言编程,如何使用STM32F4的DSP库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們平常所使用的CPU為定點CPU,意思是進行整點數值運算的CPU。當遇到形如1.1+1.1的浮點數運算時,定點CPU就遇到大難題了。對于32位單片機,利用Q化處理能發揮他本身的性能,但是精度和速度仍然不會提高很多。

現在設計出了一個新的CPU,叫做FPU,這個芯片專門處理浮點數的運算,這樣處理器就將整點數和浮點數分開來處理,整點數交由定點CPU處理而浮點數交由FPU處理。我們見到過TI的DSP,還有STM32F4系列的帶有DSP功能的微控制器。前者筆者沒有用過,不作評論,而后者如果需要用到FPU的浮點運算功能,必須要進行一些必要的設置。

首先,由于浮點運算在FPU中進行,所以首先應該使能FPU運行。在system_init()中,定義__FPU_PRESENT和__FPU_USED

/* FPU setTIngs------------------------------------------------------------*/

#if (__FPU_PRESENT == 1)&& (__FPU_USED == 1)

SCB-》CPACR |= ((3UL《《 10*2)|(3UL 《《 11*2)); /*set CP10 and CP11 Full Access */

#endif

這樣就使能了FPU。

對于上述改變,當程序中出現這種簡單的加減乘除運算FPU就起作用了。但是對于復雜的如三角運算、開方運算等,我們就需要加入math.h頭文件。但是如果單純的加入他,那么Keil會自動調用內部的math.h,該頭文件是針對ARM處理器的,專門用于定點CPU和標準算法(IEEE-754)。對于使用了FPU的STM32F4是沒有任何作用的。所以,需要將math.h換成ST的庫,即arm_math.h。在該頭文件中,涉及到另一個文件core_cmx.h(x=0、3、4),當然了,如同STM32F1系列一樣,在工程中加入core_cm4.h即可。

到這里,算是全部設置完畢,之差最后一步,調用!但是別小看了這一步,因為如果調用的不正確,前面的設置就白費了。在使用三角函數如sin()、cos()時不要直接寫如上形式,因為他們函數的名字來自于math.h,所以你調用的仍舊是Keil庫中的標準math.h。要使用arm_math.h中的arm_sin_f32()函數(見Line.5780,原函數見DSP_Lib\Source\FastMathFuncTIons),可以看到他利用的是三次樣條插值法快速求值(見Line.263 /* Cubic interpolaTIon process */)。

注意一下例外函數,sqrt(),在arm_math.h中為arm_sqrt_f32()。使用他的時候需要同時開啟#if(__FPU_USED == 1) && defined ( __CC_ARM )才行,切記!還可以發現開方函數還有q15和q31之分,我想他們的區別就是精度的問題,但是他們沒有應用FPU來計算,說白了就是利用0x5f3759df這個數進行快速開方,大家如果對這個數很陌生,查閱http://en.wikipedia.org/wiki/Fast_inverse_square_root。不過他的處理可能有些不同。

另外還有很多DSP的函數都在DSP_Lib\Source中,有興趣的自己研究吧。

總結

以上是生活随笔為你收集整理的stm32f4c语言编程,如何使用STM32F4的DSP库的全部內容,希望文章能夠幫你解決所遇到的問題。

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