资源简介
目前网上能找到的最完美的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
相关资源
- STM32掌机代码完成
- STM32掌机驱动OLED屏幕
- stm32库开发实战指南 PDF和光盘源码
- stm32 软件I2C 实验
- STM32实现printf和scanf源代码,保证能运
- AD7793 c程序
- STM32F4XX固件库之DSP库的说明
- STM32上串口与CAN的完整程序,全中断方
- STM32使用GPIO_F的0-7口的4*4矩阵按键
- 基于STM32的三轴加速度传感器代码
- 使用stm32控制彩色级联led WS2818B源程序
- STM32_PID算法源码
- STM32F103 ucLinux 开发BOOT源码
- stm32驱动ov7670 数据转BMP格式再转JPEG存
- EEProm存储器AT24C02读写程序
- Audio_Test for STM32F4Discovery
- stm32f407+FFT浮点运算例程
- 读写I2C FLASH的Verilog程序
- max31856官方驱动例程STM32
- 基于STM32的MFRC522射频识别源程序
- AD5422_STM32驱动程序
- CANOPEN在STM32F103ZET6单片机上的实现
- STM32F103ZET6原理图及pcb.rar
- 基于STM32的LTC2634驱动程序;
- stm32 高级定时器1的互补输出死区设置
- 正点原子STM32F407 AD封装库
- I2C 控制器的 Verilog源程序
- stm32编写的25lc512驱动文件
- STM32F103ZET6单片机CAN总线通信程序例程
- stm32射频卡RC522测试程序亲测可用
评论
共有 条评论