威望0
积分7946
贡献0
在线时间763 小时
UID1
注册时间2021-4-14
最后登录2024-11-21
管理员
- UID
- 1
- 威望
- 0
- 积分
- 7946
- 贡献
- 0
- 注册时间
- 2021-4-14
- 最后登录
- 2024-11-21
- 在线时间
- 763 小时
|
[mw_shl_code=c,true]/****************************************Copyright (c)**********************************
========================================================================================
文件描述
========================================================================================
编写:
日期:
***************************************************************************************/
#include "includes.h"
#include "bsp.h"
static GPIO_InitTypeDef GPIO_InitStructure_i2c;
/***************************************************************************************
函数名称: void i2c_sda_in(void)
函数功能: 设置i2c的数据线为输入
输入参数:
返 回 值:
***************************************************************************************/
void i2c_initial(void)
{
GPIO_InitStructure_i2c.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure_i2c.GPIO_Pin = (GPIO_Pin_TypeDef)(GPIO_Pin_5 | GPIO_Pin_6);
GPIO_Init(GPIOC,&GPIO_InitStructure_i2c);
_io_i2c_scl_on();
_io_i2c_sda_on();
}
/***************************************************************************************
函数名称: void i2c_sda_in(void)
函数功能: 设置i2c的数据线为输入
输入参数:
返 回 值:
***************************************************************************************/
void i2c_delay(void)
{
unsigned int i = 100;
while (i--);
// Delay_ms(1);
}
/***************************************************************************************
函数名称: void i2c_sda_in(void)
函数功能: 设置i2c的数据线为输入
输入参数:
返 回 值:
***************************************************************************************/
void i2c_sda_in(void)
{
GPIO_InitStructure_i2c.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure_i2c.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOC, &GPIO_InitStructure_i2c);
}
/***************************************************************************************
函数名称: void i2c_sda_out(void)
函数功能: 设置i2c的数据线为输出
输入参数:
返 回 值:
***************************************************************************************/
void i2c_sda_out(void)
{
GPIO_InitStructure_i2c.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure_i2c.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure_i2c);
}
/***************************************************************************************
函数名称: void i2c_start(void)
函数功能: 开始信号后,scl和sda为低状态
输入参数:
返 回 值:
***************************************************************************************/
void i2c_start(void)
{
_io_i2c_scl_on();
_io_i2c_sda_on();
i2c_delay();
_io_i2c_sda_off();
i2c_delay();
_io_i2c_scl_off();
i2c_delay();
}
/***************************************************************************************
函数名称: void i2c_stop(void)
函数功能: 停止信号后,scl和sda都为高状态
输入参数:
返 回 值:
***************************************************************************************/
void i2c_send_byte(unsigned char data)
{
unsigned char i;
for (i=0; i<8; i++)
{
if (data & (0x80>>i))
_io_i2c_sda_on();
else
_io_i2c_sda_off();
i2c_delay();
_io_i2c_scl_on();
i2c_delay();
_io_i2c_scl_off();
i2c_delay();
}
}
/***************************************************************************************
函数名称: void i2c_stop(void)
函数功能: 停止信号后,scl和sda都为高状态
输入参数:
返 回 值:
***************************************************************************************/
unsigned char i2c_read_byte(void)
{
unsigned char i;
unsigned char data = 0;
i2c_sda_in();
for (i=0; i<8; i++)
{
_io_i2c_scl_on();
i2c_delay();
data <<= 1;
if (_io_i2c_sda())
data |= 1;
_io_i2c_scl_off();
i2c_delay();
}
i2c_sda_out();
return data;
}
/***************************************************************************************
函数名称: void i2c_stop(void)
函数功能: 停止信号后,scl和sda都为高状态
输入参数:
返 回 值:
***************************************************************************************/
void i2c_send_ack(unsigned char ack)
{
if (ack == 0)
_io_i2c_sda_on();
else
_io_i2c_sda_off();
_io_i2c_scl_on();
i2c_delay();
_io_i2c_scl_off();
i2c_delay();
}
/***************************************************************************************
函数名称: void i2c_stop(void)
函数功能: 停止信号后,scl和sda都为高状态
输入参数:
返 回 值: 1 -- 有ack
0 -- 无ack
***************************************************************************************/
unsigned char i2c_wait_ack(void)
{
unsigned char err = 0;
i2c_sda_in();
i2c_delay();
_io_i2c_scl_on();
i2c_delay();
if (_io_i2c_sda() == 0)
err = 1;
_io_i2c_scl_off();
i2c_delay();
i2c_sda_out();
return err;
}
/***************************************************************************************
函数名称: void i2c_stop(void)
函数功能: 停止信号后,scl和sda都为高状态
输入参数:
返 回 值:
***************************************************************************************/
void i2c_stop(void)
{
_io_i2c_scl_off();
_io_i2c_sda_off();
i2c_delay();
_io_i2c_scl_on();
i2c_delay();
_io_i2c_sda_on();
i2c_delay();
}
/***************************************************************************************
end of file
***************************************************************************************/
[/mw_shl_code] |
|