我算是服了stm8硬件iic了

2019-03-23 17:30发布

大致说说吧,我现在主机软件模拟iic,从机是硬件iic中断

我实现的是主机发命令给从机,从机接收到命令后吧数据发给主机,
而且主机必须让从机休眠,休眠后,必须唤醒。

但是现在通讯都无法正常,

调试了半天,才发现I2C_SR1=0x10

停止位都监测到了,为什么前面地址匹配和数据缓冲非空没有检测到。好奇怪,下断点试了好几遍,现在吧代码贴出来,反正我是服了stm8,好多东西没有avr灵活,我调avr都已经跳成功了,但是stm8不知道怎么回事,好像很高贵的样子。调试了半天,烦了 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
yangganglone
1楼-- · 2019-03-24 02:38
/
  1. /* MAIN.C file
  2. *
  3. * Copyright (c) 2002-2005 STMicroelectronics
  4. */
  5. #include "208io.h"
  6. #include "iic.h"
  7. #include "type.h"


  8. #define N  8
  9. u8 buf[N];
  10. main()
  11. {
  12.        
  13.                 IIC_Init();
  14.                         while (1)
  15.                 {
  16.                                 AT24CXX_WriteOneByte(0x01);
  17.                                 delay_ms(100);       
  18.                         buf[0]=AT24CXX_ReadOneByte();
  19.                                         delay_ms(10);       
  20.                                 AT24CXX_WriteOneByte(0x02);
  21.                                         delay_ms(10);       
  22.                                 buf[1]=AT24CXX_ReadOneByte();
  23.                                                 delay_ms(100);       
  24.                 }

  25. }
复制代码
yangganglone
2楼-- · 2019-03-24 04:45

  1. u8 AT24CXX_ReadOneByte(void)
  2. {                                  
  3.                 u8 temp=0;                                                                                                                                                                  
  4.                 IIC_Start();                     
  5.                 IIC_Send_Byte(0XAB);           //进入接收模式                          
  6.                 IIC_Wait_Ack();         
  7.     temp=IIC_Read_Byte(0);                  
  8.     IIC_Stop();//产生一个停止条件            
  9.                 return temp;
  10. }
  11.   
  12.        
  13. void AT24CXX_WriteOneByte(u8 cmd)
  14. {                                                                                                                                                                                          
  15.     IIC_Start();  
  16.                 IIC_Send_Byte(0XAA);            //发送写命令
  17.                 IIC_Wait_Ack();                                                                       
  18.                 IIC_Send_Byte(cmd);     //发送字节                                                          
  19.                 IIC_Wait_Ack();                                
  20.     IIC_Stop();//产生一个停止条件
  21.                 delay_ms(10);         
  22. }
复制代码


/* MAIN.C file
*
* Copyright (c) 2002-2005 STMicroelectronics
*/
#include "208io.h"
#include "iic.h"
#include "type.h"


#define N  8
u8 buf[N];
main()
{
       
                IIC_Init();
                        while (1)
                {
                                AT24CXX_WriteOneByte(0x01);
                                delay_ms(100);       
                        buf[0]=AT24CXX_ReadOneByte();
                                        delay_ms(10);       
                                AT24CXX_WriteOneByte(0x02);
                                        delay_ms(10);       
                                buf[1]=AT24CXX_ReadOneByte();
                                                delay_ms(100);       
                }

}
yangganglone
3楼-- · 2019-03-24 06:59
 精彩回答 2  元偷偷看……
shower.xu
4楼-- · 2019-03-24 07:33
加上拉电阻,脚位是真开漏
yangganglone
5楼-- · 2019-03-24 07:54
stm8s003 的PB4和PB5是真开漏,哎呀,没看手册啊!
常见泽1
6楼-- · 2019-03-24 10:27
 精彩回答 2  元偷偷看……

一周热门 更多>