SPI (Base class)

(2014.9.8 作成)

(2015.11.25 更新)

 以下の関数が各マイコンで共通して使用可能です。ただしコンストラクタはマイコンごとに違っているため、それぞれのの実装は各サブページを参照してください。

STM32

Arduino

列挙型

BitOrder

LSBFirst LSB側からデータを送ります
MSBFirst MSB側からデータを送ります

SPI_Mode

 クロック線の通常状態がLowかHighか(CPOL), データ取得する位相(CPOL)を表します。詳細は右の図を見ていただくのが確実です。

  CPOL CPHA
Mode0 0 0
Mode1 0 1
Mode2 1 0
Mode3 1 1

よく言われることですが、使用するデバイスごとに仕様が異なりますので、デバイスにあわせて設定してください。


SPI_Clock

 setClock関数に対する引数です、およその狙いのクロックを指定します。

SPI_Speed_20MHz SPI_Speed_10MHz SPI_Speed_5MHz
SPI_Speed_1MHz SPI_Speed_500kHz SPI_Speed_100kHz

関数一覧

通信フォーマットを指定する

プロトタイプ void setFormat(const uint8_t &Bits, const SPI_Mode &Mode)const;
戻り値

なし

引数

Bits

1通信単位に含まれるビット数。通常8

Arduinoでは無視されます。

Mode

上記SPI_Mode

備考

Modeはデバイスごとに設定値が異なります。

通信のビットオーダーを指定する
プロトタイプ void setBitOrder(const BitOrder &order)const 
戻り値

なし

引数

order

LSBFirstまたはMSBFirst

備考

 

クロックを設定する
プロトタイプ void setClockDivider(const uint16_t &Divider);
戻り値

なし

引数

Divider

メインクロックからの分割数

備考

 実際の設定はマイコンに依存します。それぞれのページで確認してください。

クロックを設定する
プロトタイプ void setClock(const SPI_Clock &clk)
戻り値

なし

引数

clk

狙いクロック値
備考

およそここで示したクロック周波数になるように上記setClockDivider関数を呼び出しているだけです。

 実際に設定される周波数については各マイコンのページを見てください。

設定されているクロックを返す
プロトタイプ uint32_t getFrequency(void) const 
戻り値

設定されているクロック値を返す

引数

なし

備考

 単位は[Hz]

1バイト通信する
プロトタイプ uint8_t write(const uint8_t &WriteValue)const
戻り値

送信と同時にスレーブから戻ってくる値

引数

WriteValue

送信データ

備考

 

複数バイト通信する (送信のみ)
プロトタイプ

void write(const uint8_t *Buffer,

      const uint16_t &Length)const

戻り値 なし 
引数

Buffer

送信/受信データ

Length

通信データ数

備考

送信のみの関数です。同時に受信を行いたいときは別のwrite関数を使用してください。

複数バイト通信する (送受信)
プロトタイプ

void write( uint8_t *txBuff,

      uint8_t *rxBuff,

      const uint16_t &Length)const

戻り値 なし 
引数

txBuff

送信データ

rxBuff

受信データ

Length

通信データ数

備考

送受信を同時に行います。txBuffとrxBuffに同じ配列を指定することも可能です。