当向EEPROM写数据的时候,EEPROM会发送应答;
当向EEPROM读数据时,读到数据时要向EEPROM发送应答,这部分是我们写的
以下为模拟的IIC通信代码,好复杂
#include "sys.h"
#ifndef __IIC_H
#define __IIC_H
#include "sys.h"
// ÀûÓÃGPIOÄ£ÄâIICͨÐÅ
#define uchar unsigned char
#define SDA_IN() {GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=0<<9*2;}
#define SDA_OUT() {GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=1<<9*2;}
// the define of port
#define IIC_SCL PBout(8)
#define IIC_SDA PBout(9)
#define READ_SDA PBin(9)
//void Time_delay(); // use the sysTick ,Finished just a moment
void delay(void);
void start(void);
void stop(void);
void Write_Byte(uchar data); // the function of write byte(change the SDA)
uchar Read_Byte(uchar uch ); // the function of read byte(from SDA)
void Write_Add(uchar writeadd,uchar readdata);
uchar Read_Add(uchar readadd);
uchar respons(void);// get the acknowage or NO acknowage
void init(void); // two lines are high when bus is free
void IIC_init(void);
void led_init(void);
void ACK(void);
void NACK(void);
#endif
以上为.h文件
以下为.h文件
void IIC_init(){// PB8 PB9
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_InitStruct.GPIO_Speed=GPIO_Fast_Speed;
GPIO_Ini