STM32F4. Урок 19 - Робота з EEprom M24C02 по I2C
Ця бібліотека необхідна для роботи з мікросхемою 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 бібліотеки M24C02 // Hinweis : Ці два файли мають бути на 8MHz // "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 Кб)