打印

STM32F103模拟IIC 写问题香主来帮忙看看

[复制链接]
4854|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kgsz|  楼主 | 2009-11-16 18:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 kgsz 于 2009-11-17 17:45 编辑

不知道是我哪里搞错了,我用STM32F103VBT6模拟的IIC 只能读 不能写,我找不出原因啦!请大侠们帮帮忙看看那里错了。我的分数不多,就只有这么点...... 工程文件.存储器的WP引脚已经接地啦!存储器是24C16 工程文件中看AT24的标记就可以啦!AT88是另外一块。SDA .SCL 都接4.7k 上拉到3.3V

IIC.rar

1.99 MB

沙发
草履虫| | 2009-11-16 22:27 | 只看该作者
个人觉得你这段代码有点问题: while((SDA_AT24_DATA_IN==0x0800)&&(delay_count<1000)) //等待应答信号,delay_count为延时退出
{  
  delay_count++;
}
if((SDA_AT24_DATA_IN==0x0000))
//这应该是判断ACK是否成功的条件?
//如果是那么条件判断有问题,应该判断delay_count是否为1000;如果是,那么没有ACK,
{
  CLK_AT24(0);
  bytecounter++;
  temp=mid_sdata[bytecounter];
  SDA_AT24_DIR_OUT;
  if(temp==0xa1) //判断第二次启动条件
  {
    SMSTART(GROUP_AT24);
  }
}

使用特权

评论回复
板凳
machunshui| | 2009-11-17 00:08 | 只看该作者
stm32带I2C模块,
用I2C模块占用的cpu资源比模拟少多了,
为啥还要模拟呢?

使用特权

评论回复
地板
草履虫| | 2009-11-17 08:40 | 只看该作者
我也想不明白LZ为什么用模拟的。是不是不会用硬件的。

使用特权

评论回复
5
kgsz|  楼主 | 2009-11-17 08:46 | 只看该作者
3# machunshui
板子上其他存储器的需要,嘿嘿

使用特权

评论回复
6
kgsz|  楼主 | 2009-11-17 08:52 | 只看该作者
2# 草履虫 [
这里的判断条件没什么问题吧! 在进入这个ACK的判断前 SDA 和SCL 都已经拉高;存储器相应会给一个低电平信号。你给的建议我已经测试过了! 一样的效果还是写不进去。

使用特权

评论回复
7
kgsz|  楼主 | 2009-11-17 09:07 | 只看该作者
4# 草履虫
STM32的硬件IIC 我现在还没有搞过!我也明白模拟IIC的效率是比较低的啦!另外一块IC 的通讯也是模拟IIC为基础滴。还是得做模拟

使用特权

评论回复
8
xwj| | 2009-11-17 09:53 | 只看该作者
LZ,你读IO之前忘了切换方向了哦~
这是read()里的:
                send_iic_data(temp,GROUP_AT88);
                SDA_DIR_IN;                       
                while((SDA_DATA_IN==0x0080)&&(delay_count<10000))


这是write()里的:
                SDA_DIR_OUT;
                   send_iic_data(temp,GROUP_AT88);
                while((SDA_DATA_IN==0x0080)&&(delay_count<10000))                //等待应答信号,delay_count为延时退出
                {       
                        delay_count++;
                }


while((SDA_DATA_IN==0x0080)&&(delay_count<10000))        时IO还处于输出状态哦,怎么读???

使用特权

评论回复
9
kgsz|  楼主 | 2009-11-17 09:59 | 只看该作者
8# xwj

这个是我没有交待清楚,AT88是另外一个块。在工程文件里面 只要看AT24的标记就可以 了!现在做的24C16。XWJ说的这个问题在AT24中我已经改过来了。

使用特权

评论回复
10
kgsz|  楼主 | 2009-11-17 11:40 | 只看该作者
:sleepy:  用逻辑分析仪看,ACK也应答了 停止信号也有了! 24C16怎么就不写呢?:dizzy:

使用特权

评论回复
11
静默| | 2009-11-17 15:58 | 只看该作者
本帖最后由 静默 于 2009-11-17 16:00 编辑

1.0 路过, 顺问一下, 写控制线置低了吗?
2.0 写控制线已经接地了..... 没看到啊.......

使用特权

评论回复
12
kgsz|  楼主 | 2009-11-17 16:09 | 只看该作者
11# 静默

静默 是指的读写保护么 ?

使用特权

评论回复
13
kgsz|  楼主 | 2009-11-18 08:46 | 只看该作者
:(好冷清

使用特权

评论回复
14
香水城| | 2009-11-18 13:49 | 只看该作者
一般人很难看懂别人的程序,尤其是高手写的程序,要想纠错就更难了。

使用特权

评论回复
15
kgsz|  楼主 | 2009-11-18 14:09 | 只看该作者
:sleepy: 香主这话 叫我如何回答!!

使用特权

评论回复
16
香水城| | 2009-11-18 14:28 | 只看该作者
对不起,也许我没有说清楚。

我的意思是因为每个程序都有作者的编程思想在里面,在不了解作者的编程思想、不了解程序所涉及的应用流程时,一般人很难看懂别人的程序,即使是高手也不是一件容易的事情,何况还要找出错误并改正。

使用特权

评论回复
17
kgsz|  楼主 | 2009-11-18 15:03 | 只看该作者
谢谢香主啦  看来这个问题还得自己啃掉:hug:

使用特权

评论回复
18
wangzb186| | 2009-11-18 15:45 | 只看该作者
;P;P;P继续加油吧

使用特权

评论回复
19
f2k5| | 2010-1-7 20:58 | 只看该作者
:lol 强大!

使用特权

评论回复
20
pkat| | 2010-1-8 09:56 | 只看该作者
是的,看别人程序是很困难,除非写的程序非常有条理,而且注释也非常清楚

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

217

帖子

0

粉丝