STM32F4. Урок 19 - Робота з EEprom M24C02 по I2C

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

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

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

Оригінал статті

Прикреплені файли:

Top