7442|17

59

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM32的I2C [复制链接]

STM32的I2C的状态寄存器SR2总是提示“总线忙”,SR2的bit1总是为“1”,是怎么回事呢?
端口时钟、I2C时钟都打开了;端口配置为AF+OD输出;SDA和SCL端口初始化为高电平
此帖出自stm32/stm8论坛

最新回复

                                 对eeprom读写完一个数据包之后,加20us左右的延时,就可以连续读或写了   详情 回复 发表于 2008-6-16 17:49
点赞 关注
 

回复
举报

78

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

做过什么操作?

                                  
此帖出自stm32/stm8论坛
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

还没有进行什么操作

                                 还没有进行什么操作,在这些初始化后,设置了一个断点,就发现SR2的寄存器的bit1被置1了。
此帖出自stm32/stm8论坛
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

4
 

加外部上拉了吗?什么外部I2C器件?

                                 对应的I/0口是否配置成AF_OD模式?
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

5
 

加了上拉

加了上拉,器件是AT24C256,IO配置为了AF_OD模式
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

6
 

初始化的代码?

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

7
 

代码

   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  /* I2C2 Periph clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);
  
  /* Configure I2C2 pins: SCL and SDA */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_10 | GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  I2C_Cmd(I2C2, ENABLE);

  /* Apply I2C configuration after enabling it */
  I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
  I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
  I2C_InitStructure.I2C_OwnAddress1 = 0xA0;
  I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
  I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
  I2C_InitStructure.I2C_ClockSpeed = 400000;  /* 100000也不行,PCLK1为18000000Hz */

  I2C_Init(I2C2, &I2C_InitStructure);

这里设置断点,SR2的bit1为“1”

此帖出自stm32/stm8论坛
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

8
 

你在配置以前 先初始化一下 看看

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

9
 

感觉跟初始化没多大关系!


下面事NXP 和 ATMEL的 ARM7 I2C(TWI)的初始代码。
//==========================================================================//
void LPC_I2C0_Configure(void){
    
    LPC_BASE_PCON->P_CONP |= PCI2C0; //turn on power to I2    
    LPC_BASE_PINSEL->PIN_SEL0  |=(PA2_AS_SCL0  + PA3_AS_SDA0);
    LPC_BASE_I2C0->I2C_SCLH =14;
    LPC_BASE_I2C0->I2C_SCLL =14;
    LPC_BASE_I2C0->I2C_CONCLR = I2C_STAC | I2C_SIC | I2C_AAC |I2C_STO| I2C_ENC;//0x6c
    LPC_BASE_I2C0->I2C_CONSET = I2C_EN| I2C_STO;
    
}//end


void InitTwi(void) 
{
    AT91F_TWI_CfgPIO();          //配置TWI的TWD和TWCK管脚 AT91F_PIO_CfgOpendrain(AT91C_BASE_PIOA,(unsigned int)AT91C_PA3_TWD);  
    AT91F_TWI_CfgPMC ();                      // 使能TWI外围时钟 
    AT91F_TWI_Configure (AT91C_BASE_TWI);      // 将TWI设置成主模式 
    AT91F_SetTwiClock();                       // 计算、设置时钟发生寄存器 
    //AT91F_TWI_DisableIt(AT91C_BASE_TWI,0xffff);
}  
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

10
 

请参考ST提供的例子:I2C/Example5

                                 这是一个操作I2C EEPROM的例子。
此帖出自stm32/stm8论坛
 
 
 

回复

92

帖子

0

TA的资源

一粒金砂(初级)

11
 

碰到过同样问题,无解

   前段时间参考I2C/Example5,在103C8T6芯片上操作AT24C02芯片,用硬件I2C接口库函数,经常发现死机现象,一直无法解决,最后只好改用模拟I2C。
   个人认为ST提供的I2C操作库函数,很多地方采用死等状态的方式可能有问题,容易导致死在I2C程序中
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

12
 

已参考Example5

之前一直用模拟I2C,后来想用硬件I2C。

本来就参考了Example5

昨天又试了一下,初始化I2C2会有这个问题,但是初始化I2C1没有这个问题。但是由于目前我们板上的I2C1的端口用做其他用途,没有割断走线去试I2C1
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

13
 

例子中是在初始化之后使能相应模块,而你是在初始化之前

                                 改一下试试。
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

14
 

I2C很简单的,楼主对STM32的 I2C没摸透。

                                 贴一下 I2C的程序吧!分析一下。
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

15
 

单步运行OK,全速运行不OK

程序单步运行,读写都OK,一旦全速运行就不OK了
以前有高手讨论过该问题,但是现在好像搜索不到以前的帖子了...
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

16
 

OK是什么意思?不OK是什么意思?

你的读写流程是什么?读几个字节?写几个字节?

OK是什么意思?操作多少字节?

不OK是什么意思?什么时候有问题?
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

17
 

难道是传说中的速度问题?

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

18
 

应该是外设响应速度跟不上

                                 对eeprom读写完一个数据包之后,加20us左右的延时,就可以连续读或写了
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表