реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> работа с eeprom M24M01-R на HAL
Alex_Golubev
сообщение Jan 28 2018, 14:20
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 198
Регистрация: 18-03-17
Пользователь №: 95 877



Здравствуйте.
Прошу помочь найти (или дать) функции для работы с eeprom по I2C M24M01 с использованием HAL.
Go to the top of the page
 
+Quote Post
serglg
сообщение Jan 28 2018, 18:35
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 140
Регистрация: 19-07-16
Пользователь №: 92 603



Открываем документ от 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 - Jan 28 2018, 18:41
Go to the top of the page
 
+Quote Post
0men
сообщение Feb 9 2018, 13:18
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 7-05-05
Пользователь №: 4 819



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 - Feb 10 2018, 14:57
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th May 2018 - 13:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.00857 секунд с 7
ELECTRONIX ©2004-2016