你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 3630|回复: 1

STM8 I2C仿真上遇到的問題

[复制链接]

3

主题

8

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
发表于 2012-10-23 19:46:03 | 显示全部楼层 |阅读模式
請問各位高手,以下的程式是針對STM8-128-EVAL demonstration firmware去修改的
環境是使用stvd 4.3.2
在仿真過程中,只有第一次剛送電仿真的時,程式可以順利執行過紅字的部分
但是如果chip reset之後,程式執行都會停在紅字的部分,請問該如何解決??
另外有哪些暫存器會影響I2C_SR1的START BIT的變化,由於是參考原廠提供的LIBRARY修改的
沒道理START bit不會enable阿 疑問....
 
 void Read_HAF(void)
{
  
        uint8_t i = 0x00;
        uint8_t j = 0x00;
        I2C_Cmd( ENABLE);
  /* Re-send start & wait event detection */
  I2C_GenerateSTART(ENABLE);
        j=I2C->SR1;
        while(!(I2C->SR1 & 0x01));
       
        while (!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));
 
  /* Send slave Address in read direction & wait event */
  I2C_Send7bitAddress(0x92, I2C_DIRECTION_RX);
  while (!I2C_CheckEvent(I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
  //I2C_ClearFlag(I2C_FLAG_ADDRESSSENTMATCHED);
 
        I2C_AcknowledgeConfig(I2C_ACK_NEXT);
       
        while(I2C_GetFlagStatus( I2C_FLAG_ADDRESSSENTMATCHED) == RESET);
  
        I2C_ClearFlag(I2C_FLAG_ADDRESSSENTMATCHED);  
  (void)I2C->SR3;
        I2C_AcknowledgeConfig(I2C_ACK_NONE);
       
        I2C_GenerateSTOP(ENABLE);
  
  EEPBuffer = (uint8_t)(I2C_ReceiveData());
       
        //while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_RECEIVED));
  
        i++;
       
        EEPBuffer = (uint8_t)(I2C_ReceiveData());       
  /* Send STOP Condition to end transmission */
  
}
<
回复

使用道具 举报

3

主题

8

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
 楼主| 发表于 2012-10-31 15:48:21 | 显示全部楼层

回复:STM8 I2C仿真上遇到的問題

請教各位先進,經由連日的修改 ,i2c已可以正常通訊
程式如下,但是遇到個問題
經由示波器顯示的波形與認知的不同
依程式來看位址後接兩個byte date就應該要stop
但是實際狀況是兩個byte date接續出現0xff 之後才stop.
可是i2c_DR的內容兩個byte date又都有接收到
所以是哪邊有遺漏需改正
請指教
 void main(void)
{
  Init_Application();
  EEPBuffer[0] = 0x00;
do
{
    int NumByteToRead=2;
    int        i=0;
    I2C_GenerateSTART(ENABLE);
  
  /* Test on EV5 and clear it */
  while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));
  
  /* Send EEPROM address for read */
  I2C_Send7bitAddress(0x92,I2C_DIRECTION_RX);
  
  /* Test on EV6 and clear it */
  while(!I2C_CheckEvent(I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
  
  /* While there is data to be read */
  while(NumByteToRead)  
  {
        if(I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_RECEIVED))  
    { 
    if(NumByteToRead == 2)
            {
            I2C_AcknowledgeConfig(I2C_ACK_NONE);
                        //I2C_AcknowledgeConfig(DISABLE);
            }
     if(NumByteToRead == 1)
             {
                        //I2C_AcknowledgeConfig(I2C_ACK_NONE);
              I2C_GenerateSTOP(ENABLE);
             }
      /* Read a byte from the EEPROM */
      EEPBuffer = I2C_ReceiveData();
 
      /* Point to the next location where the byte read will be saved */
      i++; 
      
      /* Decrement the read bytes counter */
      NumByteToRead--;        
    }   
  }
 
  /* Enable Acknowledgement to be ready for another reception */
  I2C_AcknowledgeConfig(I2C_ACK_CURR);
  }while(1);
 
}
 
 
stm8 I2C.jpg
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版