OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 4123|回复: 9

请教:i2c 调试--- while((I2C_SR1&0x01)==0);//等待条件发送完成,这一步不行

[复制链接]

  离线 

4

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2012-12-2
在线时间
11 小时
发表于 2014-5-1 10:37:05 | 显示全部楼层 |阅读模式

#include"iostm8s105k4.h"
void I2C_Init(void)//初始化IIC
{
 
  CLK_PCKENR1 |= 0x01;            // 打开f(MASTER)与外设I2C的连接
 I2C_CR1_PE = 0;
  I2C_FREQR = 8;                 // input clock to I2C - 16MHz
  I2C_CCRH = 0x00;                // standard mode, duty 1/1 bus speed 100kHz
  I2C_CCRL = 0xA0;                // CCR= 40 - (SCLhi must be at least 4000+1000=5000ns!)
  I2C_TRISER = 5;                // 1000ns/(125ns) + 1  (maximum 1000ns)
  I2C_OARH |= 0x40;
  I2C_OARL = 0xA0;               // own address A0;
  I2C_ITR = 7;                 // enable Event & error interrupts
  I2C_CR2 |= 0x04;               // ACK=1, Ack enable
  I2C_CR1 &= ~0x80;              // Stretch enable
 
  I2C_CR1_PE = 1;              
 

}
int main(void)
{
  PE_DDR_DDR5=1;
  PE_CR1_C15=1;
  PE_CR2_C25=0;
  PE_ODR_ODR5=1;
 
  CLK_CKDIVR = 0x00;

  /*I2C初始化*/
  I2C_Init();
  /*起始条件*/

  I2C_CR2 &=~ 0x04; //不返回应答
  while((I2C_SR3&0x02)==1);//I2C准备就绪?
 
  I2C_CR2|=0x01;//起始位产生

  while((I2C_SR1&0x01)==0);//等待条件发送完成,这一步不行

  PE_ODR_ODR5  = 0;  // 表示起始条件已经发送
  while(1);
}

生命在于运动
回复

使用道具 举报

  离线 

116

主题

7639

帖子

12

精华

资深版主

Rank: 8Rank: 8

积分
11200
金钱
11200
注册时间
2013-9-10
在线时间
368 小时
发表于 2014-5-1 13:29:17 | 显示全部楼层
硬件IIC呀?如果是建议你放弃,用软件模拟的吧
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

  离线 

1

主题

2

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2012-1-4
在线时间
4 小时
发表于 2014-5-2 12:27:48 | 显示全部楼层
我也是卡在这一步不知道怎么解决
s003测试通过的硬件IIC代码复制到s105上就不行了
就卡在这一步
回复 支持 反对

使用道具 举报

  离线 

4

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2012-12-2
在线时间
11 小时
 楼主| 发表于 2014-5-4 08:55:00 | 显示全部楼层
回复【3楼】a451993547:
---------------------------------
是不是配置的问题,这方面的资料真难找,
生命在于运动
回复 支持 反对

使用道具 举报

  离线 

2

主题

4

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2013-4-22
在线时间
4 小时
发表于 2016-4-27 20:26:29 | 显示全部楼层
不知道大家解决了没有,我也一直就是在while((I2C_SR1&0x01)==0);//等待条件发送完成,这一步不行
也是STM8S105系列的芯片
回复 支持 反对

使用道具 举报

  离线 

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2018-6-13
在线时间
12 小时
发表于 2018-9-5 15:59:35 | 显示全部楼层
a451993547 发表于 2014-5-2 12:27
我也是卡在这一步不知道怎么解决
s003测试通过的硬件IIC代码复制到s105上就不行了
就卡在这一步

S003 卡在这一步。。。层主是怎么调的啊,求回复,感谢
回复 支持 反对

使用道具 举报

  离线 

5

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
186
金钱
186
注册时间
2017-12-20
在线时间
22 小时
发表于 2018-9-23 21:32:45 | 显示全部楼层
八度空间 发表于 2014-5-1 13:29
硬件IIC呀?如果是建议你放弃,用软件模拟的吧

硬件IIC挺好用的,我最近调通了,不过我用的是库函数,寄存器操作没试过。
思路是一样的,库函数更方便一些。
回复 支持 反对

使用道具 举报

  离线 

5

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
186
金钱
186
注册时间
2017-12-20
在线时间
22 小时
发表于 2018-9-23 21:33:22 | 显示全部楼层
你是把单片机做主机用吗?
回复 支持 反对

使用道具 举报

  离线 

116

主题

7639

帖子

12

精华

资深版主

Rank: 8Rank: 8

积分
11200
金钱
11200
注册时间
2013-9-10
在线时间
368 小时
发表于 2018-9-29 21:27:40 | 显示全部楼层
595953427 发表于 2018-9-23 21:33
你是把单片机做主机用吗?

我用过F302硬件I2C做过主机,也做过从机,都可以,从机已经用到项目上了,主机没有
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

  离线 

5

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
186
金钱
186
注册时间
2017-12-20
在线时间
22 小时
发表于 2018-10-10 23:45:13 | 显示全部楼层
我用过STM8S207的IIC主机驱动AT24C02,STM8S207的晶振使用的是外部24M,把IIC速率设置为400K的时候有很大的概率会出错,把IIC速率设置为100K后好了很多。
不知道是STM8S207的问题还是AT24C02的问题。
我用的那片AT24C02有几个字节的坏块,不知道是不是质量不好的假货导致IIC速率高的时候出错。
回复 支持 反对

使用道具 举报

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

本版积分规则




关闭

正点原子双11大促销上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-11-13 15:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */