MyIIC.c
#include "stm32f10x.h" // Device header
#include "MyIIC.h"
#include "Delay.h"
void MyIIC_SCL_W(uint8_t Bit)
{
GPIO_WriteBit(GPIOB,GPIO_Pin_10,(BitAction)Bit);
Delay_us(10);
}
void MyIIC_SDA_W(uint8_t Bit)
{
GPIO_WriteBit(GPIOB,GPIO_Pin_11,(BitAction)Bit);
Delay_us(10);
}
uint8_t MyIIC_SDA_R(void)
{
uint8_t Bit;
Bit = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11);
Delay_us(10);
return Bit;
}
void MyIIC_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_SetBits(GPIOB, GPIO_Pin_10 | GPIO_Pin_11);
}
void MyIIC_Start(void)
{
MyIIC_SDA_W(1);
MyIIC_SCL_W(1);
MyIIC_SDA_W(0);
MyIIC_SCL_W(0);
}
void MyIIC_Stop(void)
{
MyIIC_SDA_W(0);
MyIIC_SCL_W(1);
MyIIC_SDA_W(1);
}
void MyIIC_SendByte(uint8_t Byte)
{
uint8_t i;
for(i=0; i<8; i++)
{
MyIIC_SDA_W(Byte & (0x80>>i));
MyIIC_SCL_W(1);
MyIIC_SCL_W(0);
}
}
uint8_t MyIIC_ReveiveByte(void)
{
uint8_t i,Byte = 0x00;
MyIIC_SDA_W(1);
for(i=0; i<8; i++)
{
MyIIC_SCL_W(1);
if(MyIIC_SDA_R() == 1)
{
Byte |= (0X80>>i);
}
MyIIC_SCL_W(0);
}
return Byte;
}
void MyIIC_SendAck(uint8_t AckBit)
{
MyIIC_SDA_W(AckBit);
MyIIC_SCL_W(1);
MyIIC_SCL_W(0);
}
uint8_t MyIIC_ReceiveAck(void)
{
uint8_t AckBit;
MyIIC_SDA_W(1);
MyIIC_SCL_W(1);
AckBit = MyIIC_SDA_R();
MyIIC_SCL_W(0);
return AckBit;
}
MyIIC.h
#ifndef __MYIIC_H
#define __MYIIC_H
#include "stm32f10x.h" // Device header
void MyIIC_Init(void);
void MyIIC_Start(void);
void MyIIC_Stop(void);
void MyIIC_SendByte(uint8_t Byte);
uint8_t MyIIC_ReveiveByte(void);
void MyIIC_SendAck(uint8_t AckBit);
uint8_t MyIIC_ReceiveAck(void);
#endif