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

查看: 4631|回复: 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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版