STM32F4. Урок 19 — Работа с EEprom M24C02 по I2C

Данная библиотека необходима для работы с микросхемой M24C02 (256Byte EEPROM) на внешнем модуле, подключенном через интерфейс IC к STM32F4. К линиям SCL и SDA необходимо подключить подтягивающие вверх резисторы по 4,7кОм, иначе интерфейс работать не будет. Возможно подключение до 8 микросхем M24C02, но тогда необходимо использование третьего адресного вывода. Для работы библиотеки необходимо также подключить низкоуровневую библиотеку для работы с IC.

Демонстрация работы:

http://mikrocontroller.bplaced.net/wordpress/wp-content/uploads/2013/03/m24c02.jpg

Используемые выводы:

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 и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.