SPI (STM32)

(2014.9.6 作成)

(2015.11.25 更新)

 DMAを使用せず通信を行います。また本来はSS(Slave Select)を自動制御させることも出来ますが、あえてこのクラスではSSピンを使用していません。

関数リファレンス

コンストラクタ

プロトタイプ

SPI(

    SPI_TypeDef *SPIx,

    const uint8_t &PinSCK,

    const uint8_t &PinMISO,

    const uint8_t &PinMOSI);

戻り値

なし

引数

SPIx

SPI1, SPI2, または SPI3

PinSCK

PinMISO

PinMOSI

使用するピンを指定します。

詳細は後述。

備考

 

クロックの変更

プロトタイプ

void setClockDivider(const uint16_t &Divider);

戻り値

なし

引数

Divider

SPI_BaudRatePrescaler_2

SPI_BaudRatePrescaler_4

SPI_BaudRatePrescaler_8

SPI_BaudRatePrescaler_16

SPI_BaudRatePrescaler_32

SPI_BaudRatePrescaler_64

SPI_BaudRatePrescaler_128

SPI_BaudRatePrescaler_256

のどれか

備考

 システムクロックを変更していなければSPI1は72MHz, SPI2と3は36MHz基準です。

ピン設定

PinSCK,MISO,MOSIの設定値と実際のピンの関係は以下の通りとなります。この中で灰色に塗りつぶされたセルはSTM32F3Discovery基板では既に何かが取り付けられているものになります。

PinSCK

  1 2 3
SPI1  PA5 PB3  
SPI2 PB13 PF9 PF10
SPI3 PB3 PC10  

PinMISO

  1 2
SPI1 PA6 PB4
SPI2 PB14  
SPI3 PB4 PC11

PinMOSI

  1 2
SPI1 PA7 PB5
SPI2 PB15  
SPI3 PB5 PC12

クロック設定

 setClock関数にて設定される周波数は以下の通りになります。

 

F303xC

(F3Discovery)

F103xB

F401xE

(F401Nucleo)

SPI_Speed_100kHz 288 kHz  336 kHz
SPI_Speed_500kHz 576 kHz 672 kHz
SPI_Speed_1MHz 1152 kHz 1344 kHz
SPI_Speed_5MHz 4.5 MHz 5.25 MHz
SPI_Speed_10MHz 9 MHz 10.5 MHz
SPI_Speed_20MHz 18 MHz 21 MHz

 実際のライブラリはこちらからダウンロードしていただけます。またサンプルコードはこちらにあります。