标题: stm8s105k6 寄存器配置IIC问题 [打印本页]

作者: 宮梓萱    时间: 2018-1-18 14:17
标题: stm8s105k6 寄存器配置IIC问题
代码一直卡在发送开始位等待总线空闲的循环里了,我都崩溃了。大哥大姐们帮帮我
void IIC_Init(void)
{
  CLK_PCKENR1 |= 0x01;               //使能IIC外设时钟  


  I2C_CR2|=0x80;       //复位总线空闲
  I2C_CR2&=0x7f;       //恢复总线

  I2C_CR1 =0x00;       //禁止iic  

  I2C_FREQR = 0x10;    //输入时钟频率16MHz  
  I2C_TRISER= 0x11;    //0x10 + 1        
  I2C_CCRL  = 0x50;     //16M / 100K / 2                         //  
  I2C_CCRH  = 0x00;                      //标准模式

  I2C_CR1 |= 0x01;                      //使能iic外设  
// I2C_CR2   |= 0x04; //应答使能  

  I2C_OARH = 0x40;                      //七位地址模式  
  I2C_OARL = 0xa0;                      //自身地址0xa0  

}

void IIC_Write_Byte(u8 DeviceAddress,  u8 Data)  //器件地址,和发送的指令
{  
  u8 temp = 0;   
  while((I2C_SR3 & 0x02) != 0);     //等待IIC总线空闲  

  I2C_CR2|=0x01; //开始信号
  while((I2C_SR1 & 0x01) == 0);     //起始信号已经发送  

  I2C_DR = (DeviceAddress);  // 发送iic从器件物理地址,最低位0,写操作  
  while((I2C_SR1 & 0x02) == 0);     //地址已经被发送  
  temp = I2C_SR1;                   //清除ADDR标志位  
  temp = I2C_SR3;
  while((I2C_SR1 & 0x80) == 0);     //等待发送寄存器为空  

  I2C_DR = Data;                      //发送要写入的数据  
  while((I2C_SR1 & 0x04) == 0);       //等待发送完成  
  temp = I2C_SR1;                     //清零BTF标志位  
  temp = I2C_DR;  
  I2C_CR2|=0x02; //停止信号  
}  







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1