Данная библиотека необходима для работы с микросхемой M24C02 (256Byte EEPROM) на внешнем модуле, подключенном через интерфейс I2C к STM32F4. К линиям SCL и SDA необходимо подключить подтягивающие вверх резисторы по 4,7кОм, иначе интерфейс работать не будет. Возможно подключение до 8 микросхем M24C02, но тогда необходимо использование третьего адресного вывода. Для работы библиотеки необходимо также подключить низкоуровневую библиотеку для работы с I2C.
Демонстрация работы:
Используемые выводы:
SCL к PB6
SDA к PB7
Требования:
Подключаемые модули CooCox-IDE: отсутствуют.
Поддерживаемые библиотеки: STM32_UB_I2C1.
Перечисления:
typedef enum {
M24C02_0 = 0xA0, // A2=0, A1=0, A0=0
M24C02_1 = 0xA2, // A2=0, A1=0, A0=1
M24C02_2 = 0xA4, // A2=0, A1=1, A0=0
M24C02_3 = 0xA6, // A2=0, A1=1, A0=1
M24C02_4 = 0xA8, // A2=1, A1=0, A0=0
M24C02_5 = 0xAA, // A2=1, A1=0, A0=1
M24C02_6 = 0xAC, // A2=1, A1=1, A0=0
M24C02_7 = 0xAE // A2=1, A1=1, A0=1
}I2C_ADR_M24C02_t;
Функции:
ErrorStatus UB_M24C02_Init(I2C_ADR_M24C02_t slave); // Инициализация EEProm
int16_t UB_M24C02_ReadByte(I2C_ADR_M24C02_t slave, uint8_t adr); // читать байт из памяти EEPROM
int16_t UB_M24C02_WriteByte(I2C_ADR_M24C02_t slave, uint8_t adr, uint8_t wert); // писать байт в память EEPROM
Пример использования:
//—————————————————————
// File : main.c
// Datum : 07.03.2013
// Version : 1.0
// Autor : UB
// EMail : mc-4u(@)t-online.de
// Web : www.mikrocontroller-4u.de
// CPU : STM32F4
// IDE : CooCox CoIDE 1.7.0
// Module : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der M24C02 Library
// Hinweis : Diese zwei Files muessen auf 8MHz stehen
// «cmsis_boot/stm32f4xx.h»
// «cmsis_boot/system_stm32f4xx.c»
//—————————————————————
#include «main.h»
#include «stm32_ub_m24c02.h»
#include «stm32_ub_led.h»
int main(void)
{
ErrorStatus check;
int16_t wert;
SystemInit(); // инициализация настроек кварца
UB_Led_Init(); // инициализация светодиодов
// инициализация EEprom через I2C-1 с адресом 0xA2
check=UB_M24C02_Init(M24C02_1);
if(check==SUCCESS) {
UB_Led_On(LED_GREEN);
// записать значение 0x12 по адресу 0x03
UB_M24C02_WriteByte(M24C02_1,0x03,0x12);
// зачитать новое значение
wert=UB_M24C02_ReadByte(M24C02_1,0x03);
// проверка, все ли в порядке
if(wert==0x12) {
UB_Led_On(LED_BLUE);
}
else {
UB_Led_On(LED_ORANGE);
}
}
else {
UB_Led_On(LED_RED);
}
while(1)
{
}
}
В приложении проект CooCox и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.
Прикрепленные файлы:
- ub_stm32f4_i2c_m24c02_v100_rus.rar (8 Кб)
- Demo_19_I2C_M24C02_rus.rar (197 Кб)