ページへ戻る

− Links

 印刷 

STM32F3 EXTLIB :: Besttechnology

knowledge:STM32F3 EXTLIB

ページ内コンテンツ
    • 概要
    • API
      • FreeRTOS
      • ディレイ
        • delay_us
        • delay_ms
        • gettick_ms
        • delay_csw
      • CRCチェックサム
        • ushpfunc
        • CRC_Init
        • CRC_SetSeed
        • CRC_Write
        • CRC_Writes
        • CRC_Writes2
        • CRC_Writes3
        • CRC_Get

概要 anchor.png[1]

Digitus STM32F3[2]に搭載されたSTM32F373のペリフェラルを応用したライブラリ集です。
GCC Developer Liteにはほとんどの各マイコンボード用にGPIOやシリアル通信に関する簡単なライブラリが含まれていますが、それ以外のペリフェラル等を活用するとなるとゼロからプログラムしなくてはなりません。その場合、プログラムコードの大半がそれらの初期化ルーチンや制御ルーチンで埋め尽くされ、1つのソースコードの編集しか許容していないGCC Developer Liteでは大きな負担となります。
もちろんGCC Develoer Liteにこだわらなければ、その他の便利な開発環境を使用する事で、標準で提供されるペリフェラルライブラリが使えたり、複数ソースのコンパイルや編集が可能です。
とはいえ常時複数のソースプログラムを編集するのは大変ですし、最終的には改変を行うソースプログラムは集約されて行きますので、GCC Developer Liteとしてももう少しライブラリを拡充しようと言うことで用意しました。

なお、機能がかなり偏っていますが、

  • ソース上では抽象的に記述したいが、ペリフェラルを制御する上での解釈が面倒
  • コードサイズが肥大化しがちな処理ルーチン
  • 使われていないリソースを活用
  • Dynamixelの通信機能を活用

といった観点で選択しています。要望によっては拡充されたりる可能性もありますし、多勢に無勢なところで記述方法等が変わる事は十分ありますので、予めご了承ください。

Page Top

API anchor.png[3]

機能別にAPIの詳細を解説します。主なコンテンツを以下に紹介します。

  • FreeRTOS
    FreeRTOS関連。
  • ディレイ
    正確な時間待ちや経過時間計測。
  • CRCチェックサム
  • 内蔵フラッシュ
    マイコンに内蔵されたフラッシュメモリの書き換え。
  • I2C
    外部のI2C対応デバイスとの通信。
  • SPI
    外部のSPI対応デバイスとの通信。
  • Dynamixelクライアント
    マイコンボード自体をDynamixelシリーズの様にクライアントとして機能。要FreeRTOS。
  • Dynamixelホスト
    外部のDynamixelシリーズと通信。要FreeRTOS。

それ以外に処理系に依存しにくい体裁として、変数型の宣言の際は概ね以下を使用する事とします。

  • int8_t
  • uint8_t
  • int16_t
  • uint16_t
  • int32_t
  • uint32_t
Page Top

FreeRTOS anchor.png[4]

FreeRTOSをCortex-M4Fコア用としてコンパイル及びライブラリ化し「TARGET/FREERTOS_CM4F」フォルダに収録しています。必要に応じて同梱の「FreeRTOSConfig.h」を編集してライブラリを再構築する事もできます。
FreeRTOS自体は自信のプログラムの状態にかかわらず自由にリンクして使う事ができますので、OSが必要になった段階で適用の可否を判断したとしても影響が過大になることは少ないでしょう。
詳細はFreeRTOSのサイト[5]に委ねます。

Page Top

ディレイ anchor.png[6]

正確な時間を元に時間待ちや経過時間を計測します。元となるクロックはDWT[7]を使用しているため、各APIを定期的にコールする際は59秒以内(4294967295/72MHz)に行う必要があります。

Page Top
delay_us anchor.png[8]
extern void delay_us (uint32_t *mydelaybuf, uint32_t us);
Page Top
delay_ms anchor.png[9]
extern void delay_ms (uint32_t *mydelaybuf, uint32_t ms);
Page Top
gettick_ms anchor.png[10]
extern uint32_t gettick_ms (uint32_t *mytickbuf);
Page Top
delay_csw anchor.png[11]
extern void (*delay_csw) (void);
Page Top

CRCチェックサム anchor.png[12]

X^16+X^15+X^2+1の多項式に限定したチェックサムを算出します。DynamixelプロトコルV2に使用されるチェックサムを目的としているため、それ以外のCRCを算出する用途には使えません。
なお、内蔵ペリフェラルもしくはソフトウェアによるCRCの算出が選択できます。

Page Top
ushpfunc anchor.png[13]
typedef uint8_t (*ushpfunc) (uint8_t c);
Page Top
CRC_Init anchor.png[14]
extern void CRC_Init (void);
Page Top
CRC_SetSeed anchor.png[15]
extern void CRC_SetSeed (uint16_t *pCRC, uint16_t d);
Page Top
CRC_Write anchor.png[16]
extern void CRC_Write (uint16_t *pCRC, uint8_t d);
Page Top
CRC_Writes anchor.png[17]
extern void CRC_Writes (uint16_t *pCRC, uint8_t *src, uint16_t len);
Page Top
CRC_Writes2 anchor.png[18]
extern void CRC_Writes2 (uint16_t *pCRC, uint8_t *dest, uint8_t *src, uint16_t len);
Page Top
CRC_Writes3 anchor.png[19]
extern void CRC_Writes3 (uint16_t *pCRC, ushpfunc pf, uint8_t *src, uint16_t len);
Page Top
CRC_Get anchor.png[20]
extern uint16_t CRC_Get (uint16_t *pCRC);

Last-modified: 2016-03-30 (水) 18:09:51 (JST) (2956d) by takaboo