Stm32のSPI送受信およびhalライブラリSPIブロッキングの問題

1.stm32のSPI送受信の原理

ここに画像の説明を挿入します
データレジスタは、書き込み用(送信バッファ)と読み取り用(受信バッファ)の2つのバッファに分割(分オープン)されます。データレジスタへの書き込みはTxバッファに書き込み、データレジスタからの読み取りはRxバッファに保持されている値を返します。
ここに画像の説明を挿入します

SPIレジスタには16ビットがあり、そのうち8ビットは読み取り操作に使用され、残りの8ビットは書き込み操作に使用されます。DRレジスタにデータを書き込むと、図に示すようにデータがTXバッファにロードされ、バッファ内のデータがMOSIピンを介して送信されます。逆に、DRレジスタが読み取られると、 RXバッファは処理のためにプログラマに返され、RXバッファのデータはMISOピンから取得されます。

2、halライブラリ関数SPIブロッキング

2.1関連する機能

HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size,uint32_t Timeout)

2.2説明

HAL_SPI_TransmitReceive(SPI_HandleTypeDef * hspi、uint8_t * pTxData、uint8_t * pRxData、uint16_t Size、uint32_t Timeout)関数は、サイズデータを送信し、終了するためにサイズデータを受信する必要があります。 |(hspi-> RxXferCount> 0U))この位置で、受信カウント値が0になるまで、SIZEデータを受信したことを意味します。それ以前は、後続のプログラムは実行できませんが、SPIの完了を待ちます。データ受信中。

おすすめ

転載: blog.csdn.net/weixin_43810563/article/details/111028826