1: 2016-03-28 (月) 15:38:14 takaboo | 現: 2016-03-30 (水) 18:09:51 takaboo | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ** [#n4b0378c] | + | **概要 [#va21cbfb] |
- | ** [#v28073e9] | + | [[Digitus STM32F3>BTC097]]に搭載されたSTM32F373のペリフェラルを応用したライブラリ集です。~ |
- | ** [#b34c177f] | + | GCC Developer Liteにはほとんどの各マイコンボード用にGPIOやシリアル通信に関する簡単なライブラリが含まれていますが、それ以外のペリフェラル等を活用するとなるとゼロからプログラムしなくてはなりません。その場合、プログラムコードの大半がそれらの初期化ルーチンや制御ルーチンで埋め尽くされ、1つのソースコードの編集しか許容していないGCC Developer Liteでは大きな負担となります。~ |
+ | もちろんGCC Develoer Liteにこだわらなければ、その他の便利な開発環境を使用する事で、標準で提供されるペリフェラルライブラリが使えたり、複数ソースのコンパイルや編集が可能です。~ | ||
+ | とはいえ常時複数のソースプログラムを編集するのは大変ですし、最終的には改変を行うソースプログラムは集約されて行きますので、GCC Developer Liteとしてももう少しライブラリを拡充しようと言うことで用意しました。~ | ||
+ | |||
+ | なお、機能がかなり偏っていますが、 | ||
+ | -ソース上では抽象的に記述したいが、ペリフェラルを制御する上での解釈が面倒 | ||
+ | -コードサイズが肥大化しがちな処理ルーチン | ||
+ | -使われていないリソースを活用 | ||
+ | -Dynamixelの通信機能を活用 | ||
+ | |||
+ | といった観点で選択しています。要望によっては拡充されたりる可能性もありますし、多勢に無勢なところで記述方法等が変わる事は十分ありますので、予めご了承ください。 | ||
+ | |||
+ | **API [#ybae1454] | ||
+ | 機能別にAPIの詳細を解説します。主なコンテンツを以下に紹介します。 | ||
+ | -[[FreeRTOS>#uc14acff]]~ | ||
+ | FreeRTOS関連。 | ||
+ | -[[ディレイ>#zedbb449]]~ | ||
+ | 正確な時間待ちや経過時間計測。 | ||
+ | -[[CRCチェックサム>#]]~ | ||
+ | 。 | ||
+ | -[[内蔵フラッシュ>#]]~ | ||
+ | マイコンに内蔵されたフラッシュメモリの書き換え。 | ||
+ | -[[I2C>#]]~ | ||
+ | 外部のI2C対応デバイスとの通信。 | ||
+ | -[[SPI>#]]~ | ||
+ | 外部のSPI対応デバイスとの通信。 | ||
+ | -[[Dynamixelクライアント>#]]~ | ||
+ | マイコンボード自体をDynamixelシリーズの様にクライアントとして機能。要FreeRTOS。 | ||
+ | -[[Dynamixelホスト>#]]~ | ||
+ | 外部のDynamixelシリーズと通信。要FreeRTOS。 | ||
+ | |||
+ | それ以外に処理系に依存しにくい体裁として、変数型の宣言の際は概ね以下を使用する事とします。 | ||
+ | -int8_t | ||
+ | -uint8_t | ||
+ | -int16_t | ||
+ | -uint16_t | ||
+ | -int32_t | ||
+ | -uint32_t | ||
+ | |||
+ | ***FreeRTOS [#uc14acff] | ||
+ | FreeRTOSをCortex-M4Fコア用としてコンパイル及びライブラリ化し「TARGET/FREERTOS_CM4F」フォルダに収録しています。必要に応じて同梱の「FreeRTOSConfig.h」を編集してライブラリを再構築する事もできます。~ | ||
+ | FreeRTOS自体は自信のプログラムの状態にかかわらず自由にリンクして使う事ができますので、OSが必要になった段階で適用の可否を判断したとしても影響が過大になることは少ないでしょう。~ | ||
+ | 詳細は[[FreeRTOSのサイト>http://www.freertos.org/]]に委ねます。 | ||
+ | |||
+ | ***ディレイ [#zedbb449] | ||
+ | 正確な時間を元に時間待ちや経過時間を計測します。元となるクロックは[[DWT>http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.100166_0001_00_en/ric1417175910926.html]]を使用しているため、各APIを定期的にコールする際は59秒以内(4294967295/72MHz)に行う必要があります。 | ||
+ | |||
+ | ****delay_us [#o27b86b3] | ||
+ | extern void delay_us (uint32_t *mydelaybuf, uint32_t us); | ||
+ | ****delay_ms [#ye3400d5] | ||
+ | extern void delay_ms (uint32_t *mydelaybuf, uint32_t ms); | ||
+ | ****gettick_ms [#ta6cc319] | ||
+ | extern uint32_t gettick_ms (uint32_t *mytickbuf); | ||
+ | ****delay_csw [#rd28843e] | ||
+ | extern void (*delay_csw) (void); | ||
+ | ***CRCチェックサム [#i0bff965] | ||
+ | X^16+X^15+X^2+1の多項式に限定したチェックサムを算出します。DynamixelプロトコルV2に使用されるチェックサムを目的としているため、それ以外のCRCを算出する用途には使えません。~ | ||
+ | なお、内蔵ペリフェラルもしくはソフトウェアによるCRCの算出が選択できます。 | ||
+ | |||
+ | ****ushpfunc [#p84a9123] | ||
+ | typedef uint8_t (*ushpfunc) (uint8_t c); | ||
+ | ****CRC_Init [#le5c5ca8] | ||
+ | extern void CRC_Init (void); | ||
+ | ****CRC_SetSeed [#x02d7f5e] | ||
+ | extern void CRC_SetSeed (uint16_t *pCRC, uint16_t d); | ||
+ | ****CRC_Write [#o40f7223] | ||
+ | extern void CRC_Write (uint16_t *pCRC, uint8_t d); | ||
+ | ****CRC_Writes [#u4cb3db5] | ||
+ | extern void CRC_Writes (uint16_t *pCRC, uint8_t *src, uint16_t len); | ||
+ | ****CRC_Writes2 [#l6898efe] | ||
+ | extern void CRC_Writes2 (uint16_t *pCRC, uint8_t *dest, uint8_t *src, uint16_t len); | ||
+ | ****CRC_Writes3 [#sf65d945] | ||
+ | extern void CRC_Writes3 (uint16_t *pCRC, ushpfunc pf, uint8_t *src, uint16_t len); | ||
+ | ****CRC_Get [#qa44eba5] | ||
+ | extern uint16_t CRC_Get (uint16_t *pCRC); |