Bootstrap

IIC通信协议--软件实现源码《可移植》

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

;