xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

資源簡(jiǎn)介

模擬I2C從機(jī)代碼 主機(jī)代碼 以及相對(duì)應(yīng)的波形 時(shí)序要求 I2C最高時(shí)鐘頻率需要根據(jù)MCU性能調(diào)整 主頻 指令執(zhí)行時(shí)間 中斷響應(yīng)速度等

資源截圖

代碼片段和文件信息

#include?“myiic.h“
#include?“delay.h“
////////////////////////////////////////////////////////////////////////////////// ?
//本程序只供學(xué)習(xí)使用,未經(jīng)作者許可,不得用于其它任何用途
//Mini?STM32開發(fā)板
//IIC?驅(qū)動(dòng)函數(shù) ???
//正點(diǎn)原子@ALIENTEK
//技術(shù)論壇:www.openedv.com
//修改日期:2010/6/10?
//版本:V1.0
//版權(quán)所有,盜版必究。
//Copyright(C)?正點(diǎn)原子?2009-2019
//All?rights?reserved
//////////////////////////////////////////////////////////////////////////////////? ??

//初始化IIC
void?IIC_Init(void)
{
//RCC->APB1ENR|=1<<22;//先使能外設(shè)iic2時(shí)鐘?
? RCC->APB2ENR|=1<<3;//先使能外設(shè)IO?PORTB時(shí)鐘? ?
GPIOB->CRL&=0XFFFFFF00;//PB0/1?推挽輸出
GPIOB->CRL|=0X00000033; ???
//GPIOB->ODR|=3;
//GPIOB->ODR&=0xfffffffc;
?
}
//產(chǎn)生IIC起始信號(hào)
void?IIC_Start(void)
{
IIC_SDA=1; ?? ??
IIC_SCL=1;
delay_us(5);
? IIC_SDA=0;//START:when?CLK?is?highDATA?change?form?high?to?low?
delay_us(5);
IIC_SCL=0;//鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù)?
} ??
//產(chǎn)生IIC停止信號(hào)
void?IIC_Stop(void)
{
IIC_SCL=0;
IIC_SDA=0;//STOP:when?CLK?is?high?DATA?change?form?low?to?high
? delay_us(10);//12us
IIC_SCL=1;?
delay_us(20);//21us
IIC_SDA=1;//發(fā)送I2C總線結(jié)束信號(hào)
delay_us(10); ???
}
//等待應(yīng)答信號(hào)到來
//返回值:1,接收應(yīng)答失敗
//????????0,接收應(yīng)答成功
u8?IIC_Wait_Ack(void)
{
u8?tempbit=0;

IIC_SCL=0;
IIC_SDA=1;
SDA_IN();????????//SDA設(shè)置為輸入??
delay_us(15);//17us
tempbit?=?READ_SDA;
IIC_SCL=1;
??delay_us(10);//11us
IIC_SCL=0;
delay_us(5);
SDA_OUT();???????//SDA設(shè)置為輸出??
if(tempbit==1)
{
return?0;? //返回noACK
}
else
{
return?1;? //返回ACK
}
}?
//產(chǎn)生ACK應(yīng)答
void?IIC_Ack(void)
{
IIC_SCL=0;
IIC_SDA=0;
delay_us(8);//10us
IIC_SCL=1;
delay_us(8);//10us
IIC_SCL=0;
}
//不產(chǎn)生ACK應(yīng)答 ????
void?IIC_NAck(void)
{
IIC_SCL=0;
IIC_SDA=1;
delay_us(8);//10us
IIC_SCL=1;
delay_us(8);//10us
IIC_SCL=0;
} ? ?????
//IIC發(fā)送一個(gè)字節(jié)
//返回從機(jī)有無應(yīng)答
//1,有應(yīng)答
//0,無應(yīng)答 ??
void?IIC_Send_Byte(u8?txd)
{????????????????????????
u8?t;??????
for(t=0;t<8;t++)
{???
IIC_SCL=0;
delay_us(5);//6.25us
if(txd&0x80)
IIC_SDA=1;
else
IIC_SDA=0;
//delay_us(1);???
IIC_SCL=1;
delay_us(7);//8us
txd<<=1;? ??
}
}? ????
//讀1個(gè)字節(jié),ack=1時(shí),發(fā)送ACK,ack=0,發(fā)送nACK???
u8?IIC_Read_Byte(void)
{
unsigned?char?ireceive=0;
IIC_SDA=1;//釋放SDA,開始接收數(shù)據(jù)
SDA_IN();?//SDA設(shè)置為輸入
??for(i=0;i<8;i++)
{
????IIC_SCL=0;?
????delay_us(8);//9us
IIC_SCL=1;
????receive<<=1;
????if(READ_SDA)receive++;???
delay_us(3);//4.5us?
??}
?IIC_SCL=0;?
???SDA_OUT();//SDA設(shè)置為輸出??
???return?receive;
}

void?IIC_M_BufWrite(u8?*pBuffer)
{
u8?i;
// IIC_Start();?????? ?
// IIC_Send_Byte(0xA0); ??
// IIC_Wait_Ack();
// while(NumToWrite--)
// {
// IIC_Send_Byte(*pBuffer);?????// ???
// IIC_Wait_Ack();?
// pBuffer++;
// }
// IIC_Stop();//
// delay_ms(1);

IIC_Start();
??IIC_Send_Byte(0xa0);
IIC_Wait_Ack();
for(i=0;i<*pBuffer;i++)
{
IIC_Send_Byte(*(pBuffer+i));
IIC_Wait_Ack();
}
IIC_Stop();
}

void?IIC_M_BufRead(u8?*pBuffer)
{
u8?ilen?=?0;
// IIC_Start();?? ? ???
// IIC_Send_Byt

?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????3843??2015-02-11?17:32??模擬I2C?從機(jī)\I2C?Master.c
?????文件????????4440??2015-03-01?14:06??模擬I2C?從機(jī)\I2C?Slave.c
?????文件?????2622554??2015-01-21?10:58??模擬I2C?從機(jī)\I2C?時(shí)間.bmp
?????文件??????424482??2015-03-01?14:29??模擬I2C?從機(jī)\波形.bmp
?????目錄???????????0??2015-03-01?14:01??模擬I2C?從機(jī)\

評(píng)論

共有 條評(píng)論