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

STM32F0的IIC通讯求助

[复制链接]
penger2 提问时间:2012-12-24 16:47 /
采用DISCOVERYF0调试IIC接口,对应24C02芯片。
在发送地址时,加了一个超时循环判断
//第一步发送START信号和器件固定地址 
 I2C_TransferHandling(I2C1,AT24C02_AD,1,I2C_Reload_Mode, I2C_Generate_Start_Write); //设置24C02地址,启动start信号传输
 IIC_Timeout=AT24C02_DELAY_TIME;
 while(I2C_GetFlagStatus(I2C1, I2C_FLAG_TXIS) == RESET)                  //等待TXIS标志位
  {
    if((IIC_Timeout--) == 0) return IIC_TIMEOUT_UserCallback();           //超出时间门限,仍未发送完毕,则进入回调函数
  }
在发送地址后,I2C_GetFlagStatus(I2C1, I2C_FLAG_TXIS)返回值始终为RESET,进入内部看I2Cx->ISR等于0x00008001,
其中BUSY和TXE位为1,而TXIS始终为0,
求助!
收藏 评论13 发布时间:2012-12-24 16:47

举报

13个回答
zykzyk-93033 回答时间:2012-12-24 21:13:50

RE:STM32F0的IIC通讯求助

基础配置检查一下,最好对着例程看看。
penger2 回答时间:2012-12-25 08:48:55

回复:STM32F0的IIC通讯求助

基础配置为:
GPIO_InitTypeDef GPIO_InitStructure;
 I2C_InitTypeDef I2C_InitStructure;
/*-------------------初始化PB8和PB9--------------------------------*/ 
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE); //使能I2C1时钟
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE);  //使能SDA、SCL时钟,PB8和PB9
 
 GPIO_PinAFConfig(GPIOB,GPIO_PinSource8,GPIO_AF_1);  //设定复用通道
 GPIO_PinAFConfig(GPIOB,GPIO_PinSource9,GPIO_AF_1);
 
 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;                      //GPB8-I2C1_SCL
 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;            //GPIO Alternate function Mode
 GPIO_InitStructure.GPIO_OType=GPIO_OType_OD;        //open drain mode
 GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;     //high speed模式
 GPIO_Init(GPIOB,&GPIO_InitStructure);
 
 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;             //GPB9-I2C1_SDA
 GPIO_Init(GPIOB,&GPIO_InitStructure);
 
/*--------------------IIC参数设置-----------------------------------*/ 
 I2C_InitStructure.I2C_Timing=AT24C02_IIC_TIMING;    //设置SCL和SDA时序关系 
 I2C_InitStructure.I2C_AnalogFilter=I2C_AnalogFilter_Enable; //使能模拟滤波
 I2C_InitStructure.I2C_DigitalFilter=0;
  I2C_InitStructure.I2C_Mode=I2C_Mode_I2C;            //配置IIC模式 
 I2C_InitStructure.I2C_OwnAddress1=0;
 I2C_InitStructure.I2C_Ack=I2C_Ack_Enable;           //ack设置
 I2C_InitStructure.I2C_AcknowledgedAddress=I2C_AcknowledgedAddress_7bit;
 
 I2C_Init(I2C1,&I2C_InitStructure);
 I2C_Cmd(I2C1,ENABLE);                               //使能I2C1
废鱼 回答时间:2012-12-25 09:02:57

RE:STM32F0的IIC通讯求助

一直用的是模拟I2C。
solo 回答时间:2014-3-26 15:43:17

回复:STM32F0的IIC通讯求助

我也出现跟楼主一模一样的问题I2Cx->ISR等于0x00008001,应该是等于0x00008003估计就是对的.但是一直不复位.请问现在楼主找到解决办法了么,或者其它大神能知道问题在哪? 求指导!!
danshi 回答时间:2016-7-29 11:40:42
楼主问题解决了吗?
木木鱼 回答时间:2016-7-29 13:19:39
不懂帮顶下!
迩后的闪烁 回答时间:2016-9-26 09:05:21
楼主,问题解决了吗?求程序
fafa1 回答时间:2017-6-5 16:39:14
我用硬件I2C也是遇到这样的问题,写入是正确的(我用模拟I2C读出来确认过),但是用硬件I2C读就是不行,不知道怎么回事了!
alisa123 回答时间:2017-6-6 12:50:59
sfd123-302670 发表于 2017-6-5 16:39
我用硬件I2C也是遇到这样的问题,写入是正确的(我用模拟I2C读出来确认过),但是用硬件I2C读就是不行,不 ...

参看这个可能会对你有帮助,https://www.stmcu.org.cn/module/forum/thread-604877-1-1.html
huochaosuma 回答时间:2017-7-29 18:24:16
我也遇到了这个问题,请问楼主能复活下,讲下你当时的解决办法吗
yanghaixia819 回答时间:2018-2-28 09:40:51
楼主解决了吗?和你遇到的问题一样
yanghaixia819 回答时间:2018-2-28 09:48:23
sfd123-302670 发表于 2017-6-5 16:39
我用硬件I2C也是遇到这样的问题,写入是正确的(我用模拟I2C读出来确认过),但是用硬件I2C读就是不行,不 ...

现在解决了吗
fafa1 回答时间:2018-3-1 15:00:47

没解决,后来就用模拟的了
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版