#include "iic.h"
void IIC_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_11); //PG10,PG11输出高
}
//产生i2c起始信号
void IIC_Start(void)
{
SDA_OUT(); //sda线输出
IIC_SDA = 1;
IIC_SCL=1;
delay_us(8);
IIC_SDA=0;//START:when CLK is high,DATA change form high to low
delay_us(8);
IIC_SCL=0;//钳住i2c总线,准备发送或接收
}
//产生i2c停止信号
void IIC_Stop(void)
{
SDA_OUT();
IIC_SCL=0;
IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
delay_us(8);
IIC_SCL=1;
IIC_SDA=1;//结束信号
delay_us(4);
}
//应答信号
//0--成功
u8 IIC_Wait_Ack(void)
{
u8 ucErrTime=0;
SDA_IN(); //SDA设置为输入
// IIC_SDA=1;
delay_us(1);
IIC_SCL=1;
delay_us(1);
while(READ_SDA)
{
ucErrTime++;
if(ucErrTime>250)
{
IIC_Stop();
return 1;
}
}
IIC_SCL=0;//时钟输出为0
return 0;
}
//产生ack应答
void IIC_Ack(void) //IIC_Ack();
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=0;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
}
//不产生应答
void IIC_NAck(void)
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=1;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
}
//IIC发送一个字节
//返回从机有无应答
//1,有
//0,无
u8 IIC_Send_Byte(u8 txd)
{
u8 t;
SDA_OUT();
for(t=0;t<8;t++)
{
if((txd&0x80)>>7)
IIC_SDA=1;
else
IIC_SDA=0;
txd<<=1;
delay_us(2);
IIC_SCL=1;
delay_us(4);
IIC_SCL=0;
}
//注意ds1302的时序,接收完8位需要接收一个应答位
SDA_IN();
delay_us(4);
IIC_SDA=1;
//delay_us(2);
IIC_SCL=1;
delay_us(2);
if (READ_SDA==1)
{
IIC_SCL=0;
return 1;
}
else
{
IIC_SCL=0;
return 0;
}
}
u8 IIC_Read_Byte()
{
unsigned char i,receive=0;
SDA_IN();
for(i=0;i<7;i++) //不是循环8次,只要读7次就可以了,因为最高位已经receive<<1了一次了,这应该是计算了一次
{
IIC_SCL=0;
delay_us(2);
IIC_SCL=1;
receive = receive<<1;
if(READ_SDA){
receive++;
}
delay_us(1);
}
return (receive);
}
void delay_us(u8 us)
{
while(us--)
{
__NOP();
}
}
stm32 ds1307驱动程序
![star](https://csdnimg.cn/release/downloadcmsfe/public/img/star.98a08eaa.png)
![avatar](https://profile-avatar.csdnimg.cn/2f9afd6517284e05843f27586604c731_u012062785.jpg!1)
某某璀
- 粉丝: 3
- 资源: 11
最新资源
- 探索时间的奥秘:Matlab中的时间序列分析仿真
- TC233A SOT23-6封装 单键触摸感应触发芯片 深圳市可芯电子有限公司 (2).PDF
- 大数据之数据资源规划流程及其配置相关活动概览
- CUUG 冉乃钢 oracle OCP 学习资料 word 超详细
- 基于python的图书管理系统(高分课程设计作业)
- NER命名实体识别任务:Boson 数据集
- 原生 javascript 弹层弹窗弹幕web应用解决方案xtiper-master.zip
- 编码艺术的典范:深入PEP 8 Python编码规范
- sql语句生成sql 脚本export-sql-master.zip
- mqttx-cli-win-x64.exe
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
- 1
- 2
前往页