STM32F103读写24C02程序,使用过肯定能用

上传人:xmg****18 文档编号:114656721 上传时间:2019-11-12 格式:DOC 页数:9 大小:64KB
返回 下载 相关 举报
STM32F103读写24C02程序,使用过肯定能用_第1页
第1页 / 共9页
STM32F103读写24C02程序,使用过肯定能用_第2页
第2页 / 共9页
STM32F103读写24C02程序,使用过肯定能用_第3页
第3页 / 共9页
STM32F103读写24C02程序,使用过肯定能用_第4页
第4页 / 共9页
STM32F103读写24C02程序,使用过肯定能用_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《STM32F103读写24C02程序,使用过肯定能用》由会员分享,可在线阅读,更多相关《STM32F103读写24C02程序,使用过肯定能用(9页珍藏版)》请在金锄头文库上搜索。

1、. . . . ./实验24C02连接在PF口/WP、A0、A1、A2都接地 #include stm32f10x_flash.h #include stm32f10x_gpio.h #include stm32f10x_rcc.h #define AT24C02 0xa0 /AT24C02 地址/* 变量定义 -*/GPIO_InitTypeDef GPIO_InitStructure; /GPIOErrorStatus HSEStartUpStatus;unsigned char Count1 , Count2;unsigned int USEC;static vu32 TimingDel

2、ay;unsigned char Readzfc;unsigned char pDat8 = 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55;unsigned char R_Dat8;/*声明函数 -*/void RCC_Configuration(void);void SysTick_Configuration(void);void Delay_us_24C02(u32 nTime);/*24C02硬件接口*/ #define SData GPIO_Pin_6 /I2C 时钟 #define SCLK GPIO_Pin_7 /I2C 数据 /*宏定义*/#de

3、fine SCL(x)x ? GPIO_SetBits(GPIOF , SCLK) : GPIO_ResetBits(GPIOF , SCLK)#defineSDA(x) x ? GPIO_SetBits(GPIOF , SData) : GPIO_ResetBits(GPIOF , SData) /*变量*/u8 ack;/* 起动总线函数 函数原型: void Start_I2c(); 功能: 启动I2C总线,即发送I2C起始条件. */void Start_I2c() SDA(1); /SDA=1; 发送起始条件的数据信号 Delay_us_24C02(1); SCL(1); /SCL=

4、1; Delay_us_24C02(5); /起始条件建立时间大于4.7us,延时 SDA(0); /SDA=0; /*发送起始信号*/ Delay_us_24C02(5); / 起始条件锁定时间大于4s SCL(0); /SCL=0; /*钳住I2C总线,准备发送或接收数据 */ Delay_us_24C02(2);/* 结束总线函数 函数原型: void Stop_I2c(); 功能: 结束I2C总线,即发送I2C结束条件. */void Stop_I2c() SDA(0); /SDA=0; /发送结束条件的数据信号 Delay_us_24C02(1); /发送结束条件的时钟信号 SCL(

5、1); /SCL=1; 结束条件建立时间大于4s Delay_us_24C02(5); SDA(0); /SDA=1; 发送I2C总线结束信号 Delay_us_24C02(4);/* 字节数据发送函数 函数原型: void SendByte(UCHAR c);功能: 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对 此状态位进行操作.(不应答或非应答都使ack=0) 发送数据正常,ack=1; ack=0表示被控器无应答或损坏。*/void SendByte(unsigned char c) unsigned char BitCnt; for(BitCnt=0;BitCnt8

6、;BitCnt+) /要传送的数据长度为8位 if(cBitCnt)&0x80) SDA(1); /SDA=1; 判断发送位 else SDA(0); / SDA=0 Delay_us_24C02(1); SCL(1); /SCL=1 置时钟线为高,通知被控器开始接收数据位 Delay_us_24C02(5); /保证时钟高电平周期大于4s SCL(0); /SCL = 0 Delay_us_24C02(2); SDA(1); /SDA=1 位发送完后释放数据线,准备接收应答位Delay_us_24C02(2); SCL(1); /SCL=1 Delay_us_24C02(3); if(GPI

7、O_ReadInputDataBit(GPIOF ,SData)=1)ack=0; else ack=1; /判断是否接收到应答信号 SCL(0); /SCL=0; Delay_us_24C02(3);/* 字节数据接收函数 函数原型: UCHAR RcvByte();功能: 用来接收从器件传来的数据,并判断总线错误(不发应答信号), 发完后请用应答函数应答从机。 */ unsigned char RcvByte() unsigned char retc; unsigned char BitCnt; retc=0; SDA(1); /SDA=1 置数据线为输入方式 for(BitCnt=0;B

8、itCnt8;BitCnt+) Delay_us_24C02(1); SCL(0); /SCL=0 置时钟线为低,准备接收数据位Delay_us_24C02(5); /时钟低电平周期大于4.7s SCL(1); /SCL=1 置时钟线为高使数据线上数据有效 Delay_us_24C02(2); retc=retc1; if(GPIO_ReadInputDataBit(GPIOF , SData)= 1)retc=retc+1; / SDA = 1读数据位,接收的数据位放入retc中 Delay_us_24C02(2); SCL(0); / SCL=0; Delay_us_24C02(2); r

9、eturn(retc);/* 应答子函数函数原型: void Ack_I2c(bit a);功能: 主控器进行应答信号(可以是应答或非应答信号,由位参数a决定)*/void Ack_I2c(u8 a) if(a=0) SDA(0); /SDA=0;在此发出应答或非应答信号 else SDA(1); /SDA=1; Delay_us_24C02(3); SCL(1); /SCL=1; Delay_us_24C02(4);/时钟低电平周期大于4s SCL(0); /SCL=0; 清时钟线,钳住I2C总线以便继续接收 Delay_us_24C02(2); /AT2402的功能函数/* 向有子地址器件发送多字节数据函数 函数原型: bit ISendStr(UCHAR sla,UCHAR suba,ucahr *s,UCHAR no); 功能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号