资源简介
目前网上能找到的最完美的STM32读写EEPROM驱动,硬件I2C中断加DMA方式!用24C16测试通过!

代码片段和文件信息
/**************************************************************************
* i2c_ee_dma.c
* 2010-12-01 lj2505
***************************************************************************/
#include “i2c_ee_dma.h“
#include “stm32f10x_rcc.h“
#include “stm32f10x_i2c.h“
/* specified by user ----------------------------------------------------*/
#define I2C_REMAP
//#define SLAVE_10BIT_ADDRESS
/* Private define --------------------------------------------------------*/
#define ADDRESS_MAX (1024*AT24Cxx/8)
#if (AT24Cxx<4) //AT24C02
#define I2C_PageSize 8
#elif (AT24Cxx<=16)//AT24C04 AT24C08 AT24C16
#define I2C_PageSize 16
#elif (AT24Cxx<=512) //AT24C32 AT24C64 AT24C512
#define I2C_PageSize 32
#define EE_ADDRESS_NUM 2
#else
#error “unsupport eeprom“
#endif
#define I2C1_DR_Address 0x40005410
#define I2C2_DR_Address 0x40005810
#define Transmitter 0x00
#define Receiver 0x01
/* Local variables -------------------------------------------------------*/
static vu8 MasterDirection = Transmitter;
static u16 SlaveADDR;
static u16 DeviceOffset=0x0;
static bool check_begin = FALSE;
static bool OffsetDone = FALSE;
vu8 MasterReceptionComplete = 0;
vu8 MasterTransitionComplete = 0; // to indicat master‘s send process
vu8 WriteComplete = 0; // to indicat target‘s internal write process
int I2C_NumByteToWrite = 0;
u8 I2C_NumByteWritingNow = 0;
u8* I2C_pBuffer = 0;
u16 I2C_WriteAddr = 0;
u8 EE_Addr_Count = 0;//地址字节数
/*P-V operation on I2C1 */
static vu8 PV_flag_1;
volatile I2C_STATE i2c_comm_state;
/*******************************************************************************
* Function Name : I2C_EE_Init
* Description : Initializes peripherals used by the I2C EEPROM driver.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void I2C_EE_Init(void)
{
/******* GPIO configuration and clock enable *********/
GPIO_InitTypeDef GPIO_InitStructure;
I2C_InitTypeDef I2C_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB ENABLE);
#ifdef I2C_REMAP
GPIO_PinRemapConfig(GPIO_Remap_I2C1 ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
#else
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
#endif
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1 ENABLE);
I2C_DeInit(I2C1);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
GPIO_Init(GPIOB &GPIO_InitStructure);
/*********** I2C periphral configuration **********/
I2C_DeInit(I2C1);
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; // fixed
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; // fixed
I2C_InitStructure.I2C_OwnAddress1 = I2C1_ADDRESS7; // user parameter
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; //
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 20928 2011-01-21 11:05 最完美的STM32读写EEPROM驱动,硬件I2C中断加DMA方式\i2c_ee_dma.c
文件 1208 2010-12-05 10:56 最完美的STM32读写EEPROM驱动,硬件I2C中断加DMA方式\i2c_ee_dma.h
目录 0 2011-08-13 15:28 最完美的STM32读写EEPROM驱动,硬件I2C中断加DMA方式
----------- --------- ---------- ----- ----
22136 3
相关资源
- STM32F103RC+ADC+DMA多通道采样LCD显示
- I2C读写AT24C02 基于STM32F103 cube116540
- 基于stm32f103ve的程序——跑马灯实验
- 基于STM32RCT6的步进电机驱动程序
- stm32f407上的两个can发送和接收例程
- STM32 led 时钟
- STM32 2.4G通信例程
- 直流无刷电机方波驱动 stm32 例程代码
- STM32中文资料
- STM32蓝牙和串口程序
- STM32f103超声波模块例程
- stm32f103c8t6 4 oled.rar
- stm32f030 IAP Demo(原创)
- STM32基于rt_thread操作系统的SDHC卡文件
- 用DIO 做的I2C程式
- NRF24L01实现51与STM32双向通讯
- STM32F103 串口程序(完整版)
- stm32 ds18b20 温度传感器 测试通过
- stm32官方例程
- STM32F103定时器中断程序
- [免费]基于stm32f103ze 的OLED驱动代码
- STM32F103RBT6驱动UC1698控制芯片的160160黑
- proteus_24C08—有注释(proteus里面使用的
- STM32F103 DS18B20 V3.5.0固件库驱动程序工
- STM32定时器使用入门。看了这个程序会
- SIM908 SDIO FSMC STM32 FIFO
- STM32F103 CC2500完整驱动(模拟SPI)
- I2C总线接口设计
- AD7606采集程序
- 课程设计蔬菜大棚自动控制系统,包
评论
共有 条评论