日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

秉火429笔记之十六 I2C--操作EEPROM

發布時間:2023/12/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 秉火429笔记之十六 I2C--操作EEPROM 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

1. I2C 概述

2. 硬件設計

3. 代碼實現


1. I2C 概述

參考該鏈接,不在贅述:https://blog.csdn.net/XieWinter/article/details/91903678

介于ST I2C接口相對不好用,在此直接采用模擬I2C方式操作設備

2. 硬件設計

?

特征:兼容400KHZ,百萬次寫入,詳見數據手冊

?

EEPROM的7位設備地址是:,A0/A1/A2均為0, 0x50

EEPROM芯片中還有一個WP引腳,具有寫保護功能,當該引腳電平為高時,禁止寫入數據,當引腳為低電平時,可寫入數據,直接接地,則禁用寫保護功能。

EEPROM操作圖

  • 字節寫

  • ?頁寫

  • 當前地址讀

  • 隨機讀

  • 順序讀

3. 代碼實現

模擬I2C源碼鏈接:https://download.csdn.net/download/xiewinter/11258552

/******************************************************************************Copyright(c) 2018-2020 Xanthium All rights reserved.******************************************************************************文 件 名 : bsp_i2c_gpio.h版 本 號 : 初稿作 者 : Xanthium生成日期 : 2019年6月25日最近修改 :功能描述 : I2C模擬總線驅動模塊H文件函數列表 :修改歷史 :1.日 期 : 2019年6月25日作 者 : Xanthium修改內容 : 創建文件******************************************************************************/#ifndef __BSP_I2C_GPIO_H__ #define __BSP_I2C_GPIO_H__#ifdef __cplusplusextern "C" { #endif#include "stm32f4xx.h"#define I2C_WR 0 /* 寫控制bit */ #define I2C_RD 1 /* 讀控制bit */void bsp_InitI2C(void); void i2c_Start(void); void i2c_Stop(void); void i2c_SendByte(uint8_t _ucByte); uint8_t i2c_ReadByte(void); uint8_t i2c_WaitAck(void); void i2c_Ack(void); void i2c_NAck(void); uint8_t i2c_CheckDevice(uint8_t _Address);#ifdef __cplusplus } #endif#endif // end of __BSP_I2C_GPIO_H__ /* -------------- 部分代碼---------完整代碼見個人資源庫*/ /*i2c總線GPIO:PB6/I2C1_SCLPB7/I2C1_SDA *//* 定義I2C總線連接的GPIO端口, 用戶只需要修改下面4行代碼即可任意改變SCL和SDA的引腳 */#define RCC_I2C_PORT RCC_AHB1Periph_GPIOB /* GPIO端口時鐘 */#define PORT_I2C_SCL GPIOB /* GPIO端口 */ #define PIN_I2C_SCL GPIO_Pin_6 /* GPIO引腳 */#define PORT_I2C_SDA GPIOB /* GPIO端口 */ #define PIN_I2C_SDA GPIO_Pin_7 /* GPIO引腳 */#define I2C_SCL_PIN GPIO_Pin_6 /* 連接到SCL時鐘線的GPIO */ #define I2C_SDA_PIN GPIO_Pin_7 /* 連接到SDA數據線的GPIO *//* 定義讀寫SCL和SDA的宏 */ #define I2C_SCL_1() GPIO_SetBits(PORT_I2C_SCL,I2C_SCL_PIN) /* SCL = 1 */ #define I2C_SCL_0() GPIO_ResetBits(PORT_I2C_SCL,I2C_SCL_PIN) /* SCL = 0 */#define I2C_SDA_1() GPIO_SetBits(PORT_I2C_SDA,I2C_SDA_PIN) /* SDA = 1 */ #define I2C_SDA_0() GPIO_ResetBits(PORT_I2C_SDA,I2C_SDA_PIN) /* SDA = 0 */#define I2C_SDA_READ() (GPIO_ReadInputDataBit(PORT_I2C_SDA,I2C_SDA_PIN)) /* 讀SDA口線狀態 */ #define I2C_SCL_READ() (GPIO_ReadInputDataBit(PORT_I2C_SCL,I2C_SCL_PIN)) /* 讀SCL口線狀態 *//* ********************************************************************************************************* * 函 數 名: bsp_InitI2C * 功能說明: 配置I2C總線的GPIO,采用模擬IO的方式實現 * 形 參: 無 * 返 回 值: 無 ********************************************************************************************************* */ void bsp_InitI2C(void) {GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_I2C_PORT, ENABLE); /* 打開GPIO時鐘 */GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; /* 開漏輸出模式 */GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_InitStructure.GPIO_Pin = PIN_I2C_SCL;GPIO_Init(PORT_I2C_SCL, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = PIN_I2C_SDA;GPIO_Init(PORT_I2C_SDA, &GPIO_InitStructure);/* 給一個停止信號, 復位I2C總線上的所有設備到待機模式 */i2c_Stop(); }/* ********************************************************************************************************* * 函 數 名: i2c_Start * 功能說明: CPU發起I2C總線啟動信號 * 形 參: 無 * 返 回 值: 無 ********************************************************************************************************* */ void i2c_Start(void) {/* 當SCL高電平時,SDA出現一個下跳沿表示I2C總線啟動信號 */I2C_SDA_1();I2C_SCL_1();i2c_Delay();I2C_SDA_0();i2c_Delay();I2C_SCL_0();i2c_Delay(); }/* ********************************************************************************************************* * 函 數 名: i2c_Start * 功能說明: CPU發起I2C總線停止信號 * 形 參: 無 * 返 回 值: 無 ********************************************************************************************************* */ void i2c_Stop(void) {/* 當SCL高電平時,SDA出現一個上跳沿表示I2C總線停止信號 */I2C_SDA_0();I2C_SCL_1();i2c_Delay();I2C_SDA_1();i2c_Delay(); }// .... /******************************************************************************Copyright(c) 2018-2020 Xanthium All rights reserved.******************************************************************************文 件 名 : bsp_eeprom_24xx.h版 本 號 : 初稿作 者 : Xanthium生成日期 : 2019年6月25日最近修改 :功能描述 : 串行EEPROM 24xx02驅動模塊H文件函數列表 :修改歷史 :1.日 期 : 2019年6月25日作 者 : Xanthium修改內容 : 創建文件******************************************************************************/#ifndef __BSP_EEPROM_24XX_H__ #define __BSP_EEPROM_24XX_H__#ifdef __cplusplusextern "C" { #endif#include <stdint.h>#define AT24C02 //#define AT24C128#ifdef AT24C02#define EE_MODEL_NAME "AT24C02"#define EE_DEV_ADDR 0xA0 /* 設備地址 */#define EE_PAGE_SIZE 8 /* 頁面大小(字節) */#define EE_SIZE 256 /* 總容量(字節) */#define EE_ADDR_BYTES 1 /* 地址字節個數 */ #endif#ifdef AT24C128#define EE_MODEL_NAME "AT24C128"#define EE_DEV_ADDR 0xA0 /* 設備地址 */#define EE_PAGE_SIZE 64 /* 頁面大小(字節) */#define EE_SIZE (16*1024) /* 總容量(字節) */#define EE_ADDR_BYTES 2 /* 地址字節個數 */ #endifuint8_t bsp_ee_CheckOk(void); uint8_t bsp_ee_ReadBytes(uint8_t *_pReadBuf, uint16_t _usAddress, uint16_t _usSize); uint8_t bsp_ee_WriteBytes(uint8_t *_pWriteBuf, uint16_t _usAddress, uint16_t _usSize);#ifdef __cplusplus } #endif#endif // end of __BSP_EEPROM_24XX_H__

?

總結

以上是生活随笔為你收集整理的秉火429笔记之十六 I2C--操作EEPROM的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。