#include"iostm8s105k4.h"
void I2C_Init(void)//初始化IIC
{
CLK_PCKENR1 |= 0x01; // 打开f(MASTER)与外设I2C的连接
I2C_CR1_PE = 0;
I2C_FREQR = 8; // input clock to I2C - 16MHz
I2C_CCRH = 0x00; // standard mode, duty 1/1 bus speed 100kHz
I2C_CCRL = 0xA0; // CCR= 40 - (SCLhi must be at least 4000+1000=5000ns!)
I2C_TRISER = 5; // 1000ns/(125ns) + 1 (maximum 1000ns)
I2C_OARH |= 0x40;
I2C_OARL = 0xA0; // own address A0;
I2C_ITR = 7; // enable Event & error interrupts
I2C_CR2 |= 0x04; // ACK=1, Ack enable
I2C_CR1 &= ~0x80; // Stretch enable
I2C_CR1_PE = 1;
}
int main(void)
{
PE_DDR_DDR5=1;
PE_CR1_C15=1;
PE_CR2_C25=0;
PE_ODR_ODR5=1;
CLK_CKDIVR = 0x00;
/*I2C初始化*/
I2C_Init();
/*起始条件*/
I2C_CR2 &=~ 0x04; //不返回应答
while((I2C_SR3&0x02)==1);//I2C准备就绪?
I2C_CR2|=0x01;//起始位产生
while((I2C_SR1&0x01)==0);//等待条件发送完成,这一步不行
PE_ODR_ODR5 = 0; // 表示起始条件已经发送
while(1);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>