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

查看: 4623|回复: 6

STM8S105K4的I2C主模式BUSY位始终为1故障求助

[复制链接]

1

主题

0

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2013-10-23 11:20:21 | 显示全部楼层 |阅读模式
 这几天调试STM8S105K4芯片的I2C主模式,始终无法调通,最大的问题出在SR3的BUSY为始终为1,以下是我的代码:
#include "iostm8s105k4.h"
 
uchar unsigned STATE;
 
int main( void )
{
  uchar unsigned itx = 0;  
  
  CLK_CKDIVR_HSIDIV = 0x00;         // 16M内部RC经2分频后系统时钟为8M
  CLK_CKDIVR_CPUDIV = 0x00;
  
  CLK_PCKENR1 |= 0x01;               // 打开f(MASTER)与外设I2C的连接
  
  I2C_FREQR |= 0x08; //输入外设时钟频率为8MHz
  I2C_CR1    = 0x00; //禁止I2C外设
  
  I2C_TRISER = 0x0C;
  I2C_CCRL   = 0x40;
  I2C_CCRH   = 0x00;
  
  PB_DDR_DDR4 = 0;                // 设置为输入
  PB_CR1_C14 = 0;                 // 设置为开漏
  PB_CR2_C24 = 0;
  
  PB_DDR_DDR5 = 0;                
  PB_CR1_C15 = 0;                 
  PB_CR2_C25 = 0;  
 
  itx = I2C_SR3;                  //此处itx为0x02,即BUSY位为1
  STATE = itx;
  
  I2C_CR1   |= 0x01; //开启I2C外设
 
  I2C_CR2   |= 0x04; //应答使能
  
  I2C_OARL   = 0xfe;                  //自身地址
  I2C_OARH   = 0x40;
 
  itx = I2C_SR3;                     //此处itx还是为0x02,即BUSY位为1
  STATE = itx;
  
  I2C_CR2_SWRST = 1;                // I2C系统复位
  itx = I2C_SR3;                    //此处itx为0x00,但I2C系统在复位
  STATE = itx;
  I2C_CR2_SWRST = 0;                // I2C系统完成复位
  itx = I2C_SR3;                   //此处itx依然为0x02,即BUSY位为1
  STATE = itx;  
  
  while (1)
  {
 
  }
  return 0;
}
 
说明:
1、电路中SCL和SDA都有上拉电阻,始终都是高电平,系统尝试过连接过DS1307(其在别的型号芯片的I2C主系统中测试正常)、也尝试过不连任何外设;
2、I2C电路的端口,试过上拉、开漏、输入、输出、高速、普通,还试过放到设置Fmaster前、后的位置,或根本不设置;
3、该段程序在仿真器上BUSY位为0,但一但到机子上就不行了;
4、当忽略掉BUSY位后,无论发出START或STOP,无论设不设ACK,线路上都没有反应;
5、系统使用内部高速时钟产生16MHz;
6、该代码仅为I2C测试代码,其余部分UART、ADC、TIME都能够正常工作;
7、该问题在2个样机上都出现,导致没法进行下去了;
8、该代码在IAR for STM8系统下编译,使用的是ST_Link做为仿真及写入工具,Device选择为:STM8S105K4,其余设置为默认设置;
由于线路BUSY位无法清除,系统就无法工作,有无那位高手能够给点指点!
回复

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2013-10-24 10:24:00 | 显示全部楼层

RE:STM8S105K4的I2C主模式BUSY位始终为1故障求助

这个问题解决的办法,最好是拿示波器测试一下总线上的数据波形进行数据分析.
回复 支持 反对

使用道具 举报

0

主题

1

回帖

0

蝴蝶豆

新手上路

最后登录
2017-10-5
发表于 2017-9-16 17:01:51 | 显示全部楼层
你好,我也遇到同样的问题,当置位SWRST时,发现BUSY位归0了。但一复位SWRST时,BUSY位又置位了!请问你解决了吗?
回复 支持 反对

使用道具 举报

0

主题

3

回帖

0

蝴蝶豆

新手上路

最后登录
2018-6-2
发表于 2018-6-2 21:11:49 | 显示全部楼层
JasonWu-1348897 发表于 2017-9-16 17:01
你好,我也遇到同样的问题,当置位SWRST时,发现BUSY位归0了。但一复位SWRST时,BUSY位又置位了!请问你解 ...

兄弟,解决了吗?
回复 支持 反对

使用道具 举报

0

主题

21

回帖

0

蝴蝶豆

中级会员

最后登录
2020-9-15
发表于 2019-4-9 16:33:02 | 显示全部楼层
大神们,这个问题难道解决不了嘛?
回复 支持 反对

使用道具 举报

5

主题

231

回帖

172

蝴蝶豆

金牌会员

最后登录
2020-12-9
发表于 2019-4-9 16:55:33 | 显示全部楼层
本帖最后由 edmundlee 于 2019-4-9 16:57 编辑

如果说你确认过总线都为高, 那就是IO配置的问题了
这个标志为只有检测到任一线为0的时候才会为1的

看你一楼所说的, 你不会是没加外部上拉吧?

回复 支持 反对

使用道具 举报

0

主题

3

回帖

0

蝴蝶豆

新手上路

最后登录
2019-4-10
发表于 2019-4-9 17:26:16 | 显示全部楼层
dodoey邀请您访问论坛-意法半导体STM32/STM8技术社区
https://www.stmcu.org.cn/module/forum/?fromuid=3552542
回复 支持 反对

使用道具 举报

关于 意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
st-img 微信公众号
st-img 手机版