STM32資料 応用編 1

STM32でI2C通信をやってみよう

なるべく簡単な説明でセンサーとの通信ができるようにしていきます!

I2C通信とは

センサーなどと通信するときによく使う!

配線も少なく、(比較的)簡単に実装できるのでおすすめ

いくつか特徴があるので、3つだけ紹介してみる

I2C通信の特徴

I2C通信をするために

I2C通信の細かい説明をすると、結構難しくなってしまうので

ここでは、プログラムを書く上な要素を4つ紹介しておきます

I2C通信で使う4要素

STM32でI2C通信をする方法

ピン設定について

SCL(クロック)とSDA(データ)用の2つのピンを設定しよう

設定項目が色々出てくるけど、基本はそのままで大丈夫!

プログラムについて

センサーとの通信で使う関数はこの2つになる

HAL_I2C_Mem_Read(&hi2c2, I2C_ADDR, REGISTER, 1, &receive_data, 1, 10);

この関数の引数について

細かいお話

サンプルコード

それっぽいセンサーの値を用意をしてみました。実際の値は、センサーのデータシートなどに記載があるのでそちらを見てね。

名前
使うピン i2c2
I2Cアドレス 0x68
REGISTER 0x01
送信データ 0x15

コードの中身としては、あらかじめ決めたレジスタに値を書き込んでその値が保存されているかを実際に読み取ってチェックするものです。


uint8_t I2C_ADDR = 0x68 << 1;
uint8_t TEST_REGISTER = 0x01;
uint8_t send_data = 0x15;
uint8_t receive_data = 0;

//値の書き込み
HAL_I2C_Mem_Write(&hi2c2, I2C_ADDR, TEST_REGISTER, 1, &send_data, 1, 10);

//値の読み取り
HAL_I2C_Mem_Read(&hi2c2, I2C_ADDR, TEST_REGISTER, 1,&receive_data, 1, 10);

//データの判定
if(send_data == receive_data){
  //成功した時の処理
}  
        

終わりに

今回はセンサーとの通信で使うI2C通信について説明しました

次回は、実際のセンサーから値を取ってみます!