STM32F103VB仿照I2C实验24C02,用PB6 PB7作为I2CSDA和I2CSCL,与串口扩展芯片SC16IS752进行通信,首先初始化SC16IS752寄存器(可以确定没问题),给SC16IS752的发送寄存器写内容,利用串口小助手读取发送内容,只给发送寄存器写了一次内容,串口小助手应收到一个字节才对,现在发现串口小助手不断的接收数据,请高手帮我看看是哪里出问题了
源码:
//初始化IIC
void IIC_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7); //PB6,PB7 输出高
}
void sc16is752_WriteOneByte(u8 sla,u8 chx,u8 WriteAddr,u8 DataToWrite)
{
u8 temp;
temp=WriteAddr<<3;
temp|=chx;
//temp&=0x7F;
IIC_Start();
IIC_Send_Byte(sla); //发送写命令
IIC_Wait_Ack();
IIC_Send_Byte(temp);//发送寄存器地址
IIC_Wait_Ack();
IIC_Send_Byte(DataToWrite); //发送字节
IIC_Wait_Ack();
IIC_Stop();//产生一个停止条件
delay_ms(10);
}
u8 sc16is752_ReadOneByte(u8 sla,u8 chx,u8 ReadAddr)
{
u8 temp;
u8 temp1=0;
temp=ReadAddr<<3;
temp|=chx;
IIC_Start();
IIC_Send_Byte(sla); //发送写命令
IIC_Wait_Ack();
IIC_Send_Byte(temp);//发送寄存器高地址
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(sla|(0x01)); //进入接收模式
IIC_Wait_Ack();
temp1=IIC_Read_Byte(0);
IIC_Stop();//产生一个停止条件
return temp1;
}
main 函数:
delay_init(); //延时函数初始化
sc16is752_Init();
sc16is752_WriteOneByte(0x92,0x00,IS752_LCR,0x03);
sc16is752_WriteOneByte(0x92,0x00,IS752_IER,0x02); //开发送中断
sc16is752_WriteOneByte(0x92,0x00,IS752_THR,0xFE);
key=sc16is752_ReadOneByte(0x92,0x00,IS752_THR);
key1=sc16is752_ReadOneByte(0x92,0x00,IS752_LCR);
key2=sc16is752_ReadOneByte(0x92,0x00,IS752_IER);
读取key ,key1,key2的值均为FF
|