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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

STM32 进阶教程 19 - IQmath数学库的使用

發布時間:2025/4/5 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32 进阶教程 19 - IQmath数学库的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

STM32 M3 系列是不帶浮點運算單元的,小數運算都是采用定點轉浮點試式實現的,本節給大家介紹一個很好用的定點轉浮點數學運算庫,IQmath是德州儀器 (TI) 的一個高度優化的高精度數學函數集合,使 C/C++ 編程人員可以將浮點算法無縫植入定點代碼中。這些例程通常用于計算密集型實時應用,最佳執行速度和高精確度是這些應用的關鍵。通過使用這些例程,您可以獲得比使用標準 ANSIC 語言編寫的等效代碼更快的執行速度。 IQmath 庫還能通過定義可編程動態范圍和分辨率,解決定點數學的局限性。

IQmath 優勢:

· 用于定點處理器的數學函數庫加快了計算浮點值的速度

o 提供 Sin,cos,tan,arcsin,arccos,sqrt,fractional mpy,dv 等的計算

· 加快了對以下操作的處理速度:

o 電機控制

o 伺服控制

o 音頻/圖像編碼和解碼

o 定點 Q 數學

o 圖形旋轉

· 可根據應用要求調節分辨率

o 指定 GLOBAL_Q 24

· 可在定點和浮點器件之間實現代碼的無縫兼容性

?

IQmath 函數表

· 格式轉換實用程序

atoIQN, IQN, IQNfrac, IQNint, IQNtoa, IQNtoD, IQNtoF, IQNtoIQ,

IQtoIQN, IQtoQN, QNtoIQ

· 算術函數

IQdiv, IQmpy, IQNdiv, IQNmpy, IQNmpy, IQNmpyI32, IQNmpyI32frac,

IQNmpyI32int, IQNmpyIQX, IQNrmpy, IQNrsmpy

· 三角函數

IQNacos, IQNasin, IQNatan, IQNatan2, IQNatan2PU, IQNcos, IQNcosPU,

IQNsin, IQNsinPU

· 數學函數

IQNexp2, IQNisqrt, IQNmag, IQNsqrt

· 其它

IQNabs, IQNsat

?

本節將給大家展示一下如保在STM32f103系列MCU中如何使用IQmath數字庫,以及其與標準數學庫在效率上的對比。

示例詳解

基于硬件平臺: STM32F10C8T6最小系統板, MCU 的型號是?STM32F103c8t6, 使用stm32cubemx 工具自動產生的配置工程,使用KEIL5編譯代碼。

?

? ?

?

本示例所用的最小系統板原理圖:

? ?

?

  • 關于CUBEMX工具及KEIL工具的操作將不再細講,如果還有不熟悉的可以查看之前的教程文檔。下面直接介紹工程配置:
  • 系統時鐘樹
  • ??

  • 串口配置-用于打印數據
  • ??

  • 引腳配置
  • ?

    ??

    ? ?

  • 中斷配置(保持默認)
  • ??

  • 調整堆棧大:
  • ? ?

    ?

  • 工程代碼
  • ?

  • 加入IQmath數學庫,并加入頭文件所在路徑
  • 在main.c中加入如下代碼
  • ? ?

  • 編譯工程無錯誤后,調試程序,連接好串口1,并打開PC上的串口調試工具:
  • ? ?

    運行程序,結果如下:

    可以看到,用IQmath后,同樣做40000次運算,IQmath庫所用時間大大減小,只有標準庫的1/5多一點點,時間大大降低。不過需要注意的是在使用IQmath時需要多多注意數據范圍,比如本例中IQ變量采用默認的24位(可以在IQmathLib.h 中修改GLOBAL_Q 值來更改IQ數據格式 ),即long(32)位中,高8位且于表示整數,低24位用于表示小數,那個 _iq 定義的主量范圍是 -128~127.999999,這也是為什么本例代碼要寫成用i,j,z三個循環來操作,且z最大取40的原因,若將z最大值設為50,代碼及對應結果如下:

    IQmath中加和減可能直接用運算符 +/-,但乘除等其它運算需在用到專門的函數如本例中用到的乘法運算 _IQmpy,除法 _IQdiv ,當然不有提定格式乘除運德 ?_IQNmpy, _IQNdiv,N是IQ數據格式,如_IQ16mpy, _IQ12div等。下數提供一些常用函數列表:

    · 格式轉換實用程序

    atoIQN, IQN, IQNfrac, IQNint, IQNtoa, IQNtoD, IQNtoF, IQNtoIQ,

    IQtoIQN, IQtoQN, QNtoIQ

    · 算術函數

    IQdiv, IQmpy, IQNdiv, IQNmpy, IQNmpy, IQNmpyI32, IQNmpyI32frac,

    IQNmpyI32int, IQNmpyIQX, IQNrmpy, IQNrsmpy

    · 三角函數

    IQNacos, IQNasin, IQNatan, IQNatan2, IQNatan2PU, IQNcos, IQNcosPU,

    IQNsin, IQNsinPU

    · 數學函數

    IQNexp2, IQNisqrt, IQNmag, IQNsqrt

    · 其它

    IQNabs, IQNsat

    ?

    關于IQmath下載及接口函數使用介紹可以去TI官網下載安裝StellarisWare工具,在該工具中包含有各種不同處理器的IQmath庫,以及使用幫助文檔。在StellarisWare工具的安裝目錄 StellarisWare\IQmath 下包含了 IQmath 庫如下圖:

    簡要的iqmath說明文教程:https://blog.csdn.net/zhanglifu3601881/article/details/97617573

    OK,本期實驗完成!下期見!同時如果大家有什么疑問或是有想了解的其它內容,也歡迎大家留言!!最后喜歡這個公眾號的同學們記得加關注了,會有不定期技術干貨推出!!

    文中源碼資料下載,在公眾號里給十三發消息:

    下載|STM32進階教程 19

    ? ?

    ?

    關注十三公眾號

    ? ?

    ?

    ?

    ?

    總結

    以上是生活随笔為你收集整理的STM32 进阶教程 19 - IQmath数学库的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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