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 - 쓰기 위해 응답 없음
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 확장기에 데이터를 보내려고 : SCL에 데이터 시트는 100kHz 같은 -
먼저 나는 i2c3를 초기화합니다. 그러나 그 전에 I/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