SBC側の 歩行脳NNストアが,MCU 側のモータストアに,I2C で目標電流値を送る。
この通信で,MCU は slave 側になり,slave 識別のアドレスをもつ。
- I2C slave の設定
アドレスの設定は,STM32 では CubeMX/CubeIDE を使って行う。
ここでは,I2C の使用回路を I2C1, アドレスを 0x10 に設定する。
すると,自動生成されるコードの中に,つぎのようなものが現れる:
hi2c1.Init.OwnAddress1 = 0x10;
意味は:
I2C1 の Own Address レジスタに
0x10 を書き込む
- I2C1, hi2c1
I2C1 は,STM32の中のハードウェア回路の1つ:
STM32の中
┌────┐
│ CPU │
├────┤
│ I2C1 │
├────┤
│ I2C2 │
├────┤
│ UART1 │
├────┤
│ ‥‥ │
└────┘
hi2c1 は,I2C1 の設定情報 (管理台帳)。
CubeMX がつぎのようにつくる:
typedef struct
{
‥‥
} I2C_HandleTypeDef;
I2C_HandleTypeDef hi2c1;
hi2c1 の中に入っているのは,
hi2c1.Instance = I2C1;
hi2c1.Init.OwnAddress1 = 0x10;
hi2c1.Init.ClockSpeed = 400000;
‥‥
「I2C1をどう使うか」 が保存されている。
そして,つぎが実現する:
SBC 側からの 0x10 への送信は,
STM32の I2C回路が
これを自分宛と判断する
備考 : I2C に hi2c* があるように,
UART → huart*
ADC → hadc*
TIM1 → htim*
|