久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> STM32 >> 瀏覽文章

對Rainbow板載I2C EEPROM AT24C08進行讀寫

作者:huqin   來源:本站原創   點擊數:  更新時間:2014年04月20日   【字體:

  Rainbow板載一顆型號為AT24C08的I2C EEPROM,可以用于存儲1KB的數據。Rainbow經過封裝后對AT24C08操作的函數如下:
   
    1、sEE_Init() 初始化I2C以及EEPROM,要對EEPROM進行操作,必須首先調用這個函數進行初始化
   
    2、sEE_DeInit() 釋放硬件資源,在完成對EEPROM中數據讀寫后,必須調用這個函數釋放相應的硬件資源

    3、uint8_t sEE_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t NumByteToRead)
       功能:從EEPROM指定的地址開始,讀取指定個數的數據
       參數:
           pBuffer 保存數據的緩沖
           ReadAddr EEPROM起始地址
           NumByteToRead 需要讀取的數據個數
       返回值:
           sEE_OK表示操作成功,其他值表示操作失敗(超時)

    4、uint8_t sEE_WriteBuffer(uint8_t* pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite)
       功能:向EEPROM中指定地址寫入指定數量數據
       參數:
           pBuffer 需要寫入數據的起始地址
           WriteAddr EEPROM寫入數據的地址
           NumByteToWrite 需要寫入的數據個數
       返回值:
           sEE_OK表示操作成功,其他值表示操作失敗(超時)

    在軟件包的“Projects\AT24C08”文件夾包含了本文的完整工程,可以直接編譯、燒寫和調試。這個程序主要展示如何在Rainbow中對EEPROM進行讀寫,看看main.cpp的代碼:
#include "WProgram.h"
#include "stm32_i2c_ee.h"

typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus;

#define countof(a) (sizeof(a) / sizeof(*(a)))

#define sEE_WRITE_ADDRESS1        0x00
#define sEE_READ_ADDRESS1         0x00
#define BUFFER_SIZE1             (countof(Tx1_Buffer)-1)

#define BUFFER_SIZE2             (countof(Tx2_Buffer)-1)
#define sEE_WRITE_ADDRESS2       (sEE_WRITE_ADDRESS1 + BUFFER_SIZE1)
#define sEE_READ_ADDRESS2        (sEE_READ_ADDRESS1 + BUFFER_SIZE1)

uint8_t Tx1_Buffer[] = "STM32F10xx I2C Tx1_Buffer";
uint8_t Tx2_Buffer[] = "STM32F10xx I2C Tx2_Buffer";


uint8_t Rx1_Buffer[BUFFER_SIZE1], Rx2_Buffer[BUFFER_SIZE2];
__IO TestStatus TransferStatus1 = FAILED, TransferStatus2 = FAILED;
__IO uint16_t NumDataRead = 0;

//比較兩個數組的數據是否相等的函數原型
TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength);

int main()
{
  boardInit();
  Serial.begin();
  Serial.println("I2C EE start...");
  //初始化I2C EEPROM
  sEE_Init(); 

  //向第一個地址寫入Tx1_Buffer數據
  sEE_WriteBuffer(Tx1_Buffer, sEE_WRITE_ADDRESS1, BUFFER_SIZE1);

  //需要讀取的數據量
  NumDataRead = BUFFER_SIZE1;
 
  //讀取剛才寫入的數據
  sEE_ReadBuffer(Rx1_Buffer, sEE_READ_ADDRESS1, NumDataRead);
 
  //比較讀出的數據和寫入的數據,看是否相等
  TransferStatus1 = Buffercmp(Tx1_Buffer, Rx1_Buffer, BUFFER_SIZE1);
  //數據相等,寫入成功
  if (TransferStatus1 == PASSED)
  {
    Serial.println(" Transfer 1 PASSED  ");
  }
  //向第二個地址寫入Tx2_Buffer數據
  sEE_WriteBuffer(Tx2_Buffer, sEE_WRITE_ADDRESS2, BUFFER_SIZE2);

  //需要讀取的數據量
  NumDataRead = BUFFER_SIZE2; 
 
  //讀取剛才寫入的數據
  sEE_ReadBuffer(Rx2_Buffer, sEE_READ_ADDRESS2, NumDataRead);

  //比較讀出的數據和寫入的數據,看是否相等
  TransferStatus2 = Buffercmp(Tx2_Buffer, Rx2_Buffer, BUFFER_SIZE2);
  //數據相等,寫入成功
  if (TransferStatus2 == PASSED)
  {
    Serial.println(" Transfer 2 PASSED  ");
  }

  sEE_DeInit();
  Serial.println("I2C EE end...");
}

//判斷兩個uint8_t數組的數據否相等,如果相等返回PASSED
TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength)
{
  while(BufferLength--)
  {
    if(*pBuffer1 != *pBuffer2)
    {
      return FAILED;
    }
   
    pBuffer1++;
    pBuffer2++;
  }

  return PASSED; 
}

    上面的程序編譯無誤后,將程序燒寫到Rainbow中,然后在電腦上運行串口調試工具并和Rainbow連接成功,可以在串口調試工具中看到兩次對EEPROM讀寫和比較的日志。
 

關閉窗口

相關文章

主站蜘蛛池模板: 欧美中文字幕一区二区三区亚洲 | 亚洲精品国产一区 | 国产欧美精品区一区二区三区 | 久久精品视频在线观看 | 狠狠的日| 欧美一区二区三区在线 | www.狠狠操 | 久久在线看 | 日韩欧美成人精品 | 99精品网| 国产精品99免费视频 | 久久精品视频在线观看 | 久久久久久久久国产成人免费 | 久久爱一区| 91社区在线观看 | 日韩欧美视频免费在线观看 | 99视频免费在线观看 | 国产精品99久久久久久动医院 | 久久99国产精一区二区三区 | 国产精品久久久久久吹潮 | 日韩中文字幕在线不卡 | 日韩国产在线观看 | 免费观看www | 日日草夜夜草 | 中文字幕第三页 | 中文字幕视频在线观看 | 欧美精品在欧美一区二区少妇 | 91视频免费观看 | 欧美久久久久久久久中文字幕 | 日韩美香港a一级毛片免费 国产综合av | 成人三级影院 | 一区二区国产精品 | 在线一区视频 | 欧美久久精品一级黑人c片 91免费在线视频 | 日韩成人精品在线 | 成人在线一区二区 | 欧美v免费 | 国产超碰人人爽人人做人人爱 | 四虎影音 | 免费不卡视频 | 国产成人精品一区二三区在线观看 |