私はstm32f4-discoveryキットを持っており、hd44870 LCD用のI/Oエクスパンダを試してみたいと思います。私はPCF8574AT link to io example like mine hi2c3ハードウェア上でi2cアドレスが0x3f(i2cスキャナでチェックされている)である8ビットエクスパンダを持っています。 c/C++では、Eclipse環境でHALライブラリを使用します。コードを見てみましょう。stm32f4xx HAL lib&PCF8457AT - 書き込みする応答がありません
まず私はi2c3を初期化 - SCL上のデータシート100kHzのように:
static void MX_I2C3_Init(void)
{
hi2c3.Instance = I2C3;
hi2c3.Init.ClockSpeed = 100000;
hi2c3.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c3.Init.OwnAddress1 = 0;
hi2c3.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c3.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c3.Init.OwnAddress2 = 0;
hi2c3.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c3.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
if (HAL_I2C_Init(&hi2c3) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
}
そして、I/Oエキスパンダにデータを送信してみてください。しかし、その前に私は/ oが使用する準備ができていることを確認します:
result = HAL_I2C_IsDeviceReady(&hi2c3,0x3f , 2, 2);
if (result == HAL_BUSY)
{
HD44780_Puts(6, 1, "busy");
}else{
HD44780_Puts(6, 1, "ready");
uint8_t data_io = 0xff;
HAL_I2C_Master_Transmit(&hi2c3, 0x3f, data_io, 1, 100);
}
同じエキスパンダーでは何も変わりません。どのアイデアが間違っているのか、おそらくi/0のエクスパンダが壊れていますか?
あなたはどのようなスキャナーを使用しましたか? Arduinoベース? – Bulkin
Arduinoを使用してI2Cをスキャンすると、それが正しくありません。 I2CアドレスはHIGH 7ビットで、READ/WRITEフラグは1ビットです。 Arduino libはアドレス自体をシフトし、フラグビットも入れます。しかし、STM32では、手動で行う必要があります。 I2Cに書き込む場合、アドレスは '0x3F << 1 |でなければなりません。 0x01 = 7F' – Bulkin