Alex_Golubev 0 28 января, 2018 Опубликовано 28 января, 2018 · Жалоба Здравствуйте. Прошу помочь найти (или дать) функции для работы с eeprom по I2C M24M01 с использованием HAL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serglg 0 28 января, 2018 Опубликовано 28 января, 2018 (изменено) · Жалоба Открываем документ от ST под названием UM1884. Description of STM32L4 HAL and Low-layer drivers http://www.st.com/content/ccc/resource/tec....DM00173145.pdf Думаю, что для других камней есть то же самое (по крайней мере эти функции у меня работали и с F446). Находим там две функции: HAL_I2C_Mem_Write HAL_I2C_Mem_Read И... всё. Изменено 28 января, 2018 пользователем serglg Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
0men 2 9 февраля, 2018 Опубликовано 9 февраля, 2018 (изменено) · Жалоба M24M02-DRMN6 I2C_HandleTypeDef I2cHandle; void I2C_init( void ) { I2cHandle.Instance = I2C3; I2cHandle.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; I2cHandle.Init.ClockSpeed = 400000; I2cHandle.Init.DualAddressMode = I2C_DUALADDRESS_DISABLED; I2cHandle.Init.DutyCycle = I2C_DUTYCYCLE_16_9; I2cHandle.Init.GeneralCallMode = I2C_GENERALCALL_DISABLED; I2cHandle.Init.NoStretchMode = I2C_NOSTRETCH_DISABLED; I2cHandle.Init.OwnAddress1 = 0xa0; // I2cHandle.Init.OwnAddress2 = 0xFE; __I2C3_CLK_ENABLE(); /* I2C SCL GPIO pin configuration */ GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = GPIO_PIN_8; GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FAST; GPIO_InitStruct.Alternate = GPIO_AF4_I2C3; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* I2C SDA GPIO pin configuration */ GPIO_InitStruct.Pin = GPIO_PIN_9; GPIO_InitStruct.Alternate = GPIO_AF4_I2C3; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); HAL_I2C_Init(&I2cHandle); } unsigned char EEPROM_write_byte ( uint32_t adr, uint8_t data ) { uint8_t i2c_adr = 0xa0; // set slave address for write if ((adr&0x10000) != 0) i2c_adr = 0xa2; if ((adr&0x20000) != 0) i2c_adr |= 0x04; while(HAL_I2C_Mem_Write(&I2cHandle, (uint16_t)i2c_adr, uint16_t(adr&0xffff), 2, &data, 1, 1000)!= HAL_OK); return( 0 ); } unsigned char EEPROM_write_page ( uint32_t adr, uint8_t * refdata ) { uint8_t i2c_adr = 0xa0; // set slave address for write if ((adr&0x10000) != 0) i2c_adr = 0xa2; if ((adr&0x20000) != 0) i2c_adr |= 0x04; while(HAL_I2C_Mem_Write(&I2cHandle, (uint16_t)i2c_adr, uint16_t(adr&0xffff), 2, refdata, 256, 1000) != HAL_OK); HAL_Delay( 6 ); return( 0 ); } unsigned char EEPROM_read_byte ( uint32_t adr, uint8_t * refdata ) { uint8_t i2c_adr = 0xa1; // set slave address for read if ((adr&0x10000) != 0) i2c_adr = 0xa3; if ((adr&0x20000) != 0) i2c_adr |= 0x04; while(HAL_I2C_Mem_Read(&I2cHandle, (uint16_t)i2c_adr, uint16_t(adr&0xffff), 2, refdata, 1, 1000)!= HAL_OK); return( 0 ); } Изменено 10 февраля, 2018 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться