Перейти к содержанию

работа с eeprom M24M01-R на HAL

Здравствуйте.
Прошу помочь найти (или дать) функции для работы с eeprom по I2C M24M01 с использованием HAL.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Открываем документ от 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

И... всё.
Изменено пользователем serglg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
M24M02-DRMN6

CODE
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 );

}
Изменено пользователем IgorKossak
[codebox] для длинного кода, [code] - для короткого!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация