打印
[应用相关]

STM 32 I2C 加电后 一直是BUSY

[复制链接]
5584|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hawk05|  楼主 | 2009-3-7 08:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
I2c, STM, rc, se, ip
我用万利的板子(STM32F103),和我自己做的板子(STM32F101C6T6)!测试 I2C 读写铁电FM24CL64。

只要硬件连上 FM24,程序执行完 RCC 时钟初始化后,STM32 的 I2C 就一直处在 BUSY 状态下!只有 1,2次没有BUSY!

可是我仅仅就打开了I2C1 的时钟,别的都没做! 怀疑是FM24的问题,我换过,还是老样子! SDA和 SCL都 10K 上拉到VCC了!

但是只要 断开 FM24的连接,STM32 I2C 啥也不接 就不 BUSY了!

谁知道是啥问题呀?

RCC配置如下:

void RCC_Conf(void)            
{
  ErrorStatus  HSEStartUpStatus;
 
  RCC_DeInit();                                     /* RCC system reset(for debug purpose) */
  RCC_HSEConfig(RCC_HSE_ON);                     //设置系统时钟为HSE   /* Enable HSE */
  HSEStartUpStatus = RCC_WaitForHSEStartUp();     /* Wait till HSE is ready */

  if(HSEStartUpStatus == SUCCESS)
    {
      FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);       //enable flash Prefetch Buffer
      FLASH_SetLatency(FLASH_Latency_0);                       //set flash wait latency   according to system clock
      RCC_HCLKConfig(RCC_SYSCLK_Div1);                         //set AHB Clock prescaler
      RCC_PCLK2Config(RCC_HCLK_Div1);                          //set APB hi speed Clock prescaler
      RCC_PCLK1Config(RCC_HCLK_Div1);                           //set APB lo speed Clock prescaler    
      //RCC_ADCCLKConfig(RCC_PCLK2_Div2);                        //set ADC Clock prescaler
      RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);                   //select system clock  source 

      while(RCC_GetSYSCLKSource() != 0x04)      //wait system clock OK
        {      
        }
    }

  /* Enable peripheral clocks --------------------------------------------------*/
  //RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);                                                                                                                             /* Enable DMA1 clock */
   
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_I2C1 | RCC_APB1Periph_USART2 | RCC_APB1Periph_TIM2 , ENABLE);                                                         /* Enable ADC1 and GPIOC clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 |RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1  | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC , ENABLE);         /* Enable ADC1 and GPIOC clock */

}

沙发
hawk05|  楼主 | 2009-3-7 10:02 | 只看该作者

我Debug ,执行完RCC 后 ,I2C 就一直 Busy
https://bbs.21ic.com/upfiles/img/20093/2009379561990.jpg

使用特权

评论回复
板凳
hawk05|  楼主 | 2009-3-7 10:08 | 只看该作者

把掉跳线,就不 busy

我把万利板子上的 I2C 两个跳线拔掉!再测试,就不BUSY了!
难道 STM32  不能接 铁电?

会不会是因为 万利板子上的 STM32F103 ,是A 版本的问题呀?

使用特权

评论回复
地板
hawk05|  楼主 | 2009-3-7 13:32 | 只看该作者

问题找到了!

是因为读铁电的时候,在发送停止前,没有把ACK关掉!

使用特权

评论回复
5
mei5150| | 2009-4-12 15:41 | 只看该作者

我也遇到相同问题

兄弟,谢谢你!我被这个问题困扰了好长时间,豁然开朗啊!!!

使用特权

评论回复
6
SkyCode| | 2009-4-13 19:37 | 只看该作者

兄台你说是的这句话吗 I2C_AcknowledgeConfig(I2C1, DISABLE);

兄台你说是的这句话吗 I2C_AcknowledgeConfig(I2C1, DISABLE); 

您的意思是不是在执行 I2C_GenerateSTOP(I2C1,ENABLE);之前 把I2C_AcknowledgeConfig(I2C1, DISABLE); 这句加上呢,虽然我跟你的CPU不一样,但都是st的,呵呵  我这句加不加都一样,在读完数据后i2c就busy ,一直busy 

使用特权

评论回复
7
lut1lut| | 2009-4-14 09:28 | 只看该作者

关于I2C总线上电平的问题

使用特权

评论回复
8
liulangmao| | 2013-4-17 17:10 | 只看该作者
lut1lut 发表于 2009-4-14 09:28

这位DX,能这是看的什么资料可否共享之。谢谢、

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

28

帖子

0

粉丝