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

работа с 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

 

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] - для короткого!

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...