7766|10

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

两块STM32F103C8开发板i2c通讯 [复制链接]

下面是我主发送和主接收的程序,都是根据传输时序图来编写的,觉得应该没问题吧?
从接收和从发送的我不想用DMA方式,有人能提供一个吗?


void I2C1_ReceiveBytes(u8* pBuffer, u16 Module_ADDRESS, u8 Num)
{  

    I2C_GenerateSTART(I2C1, ENABLE);  // Send STRAT condition
     
    while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); // Test on EV5 and clear it
      
    I2C_Send7bitAddress(I2C1, Module_ADDRESS, I2C_Direction_Receiver); // Send  Module_address for read
     
    while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)); // Test on EV6 and clear it

    while(Num)  // Receive  data
    {
        if(Num == 1)
        {         
            I2C_AcknowledgeConfig(I2C1, DISABLE);      // Disable Acknowledgement
            
            I2C_GenerateSTOP(I2C1, ENABLE);      // Send STOP Condition
        }              
        if(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED))  // Test on EV7 and clear it
        {      
            // Read bytes from the module
            *pBuffer = I2C_ReceiveData(I2C1);
            pBuffer++ ;
            Num-- ;        
        }   
    }  
    I2C_AcknowledgeConfig(I2C1, ENABLE);  // Enable Acknowledgement to be ready for another reception
}
此帖出自stm32/stm8论坛

最新回复

请问楼主可以把程序工程贴出来吗?最近也在做这个,没有调通  详情 回复 发表于 2012-10-26 14:44

点评

请问楼主可以把程序工程贴出来吗?最近也在做这个,没有调通  详情 回复 发表于 2012-10-26 14:44
点赞 关注
 

回复
举报

67

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

主发送程序

void I2C1_SendBytes(u8* pBuffer, u16 Module_ADDRESS, u8 Num)
{
    u8 i;
   
    I2C_GenerateSTART(I2C1, ENABLE);  //  Send STRAT condition
   
    while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));  //Test on EV5 and clear it
   
    I2C_Send7bitAddress(I2C1, Module_ADDRESS, I2C_Direction_Transmitter);  // Send module address for write
  
    while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); // Test on EV6 and clear it
    for(i=0;i<Num;i++)   // Send data
{      
        I2C_SendData(I2C1, *pBuffer); // Send the current byte
  pBuffer++;   
        while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); // Test on EV8 and clear it
    }   
    I2C_GenerateSTOP(I2C1, ENABLE);   // Send STOP condition
}
此帖出自stm32/stm8论坛
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 这个……
此帖出自stm32/stm8论坛
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 程序写的很有条理,可惜我看的不是很懂
此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

5
 
这里怎么就没人知道吗?
太冷清了吧?
版主呢?
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

6
 
I2C的通讯比较复杂,如果你不是非常地熟悉I2C的协议,还是不要自己直接操作它了,使用已做好的函数为好:STM32 I2C 封装库(查询方式+29楼中断方式+32楼DMA方式)
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

7
 
                                 就选择SPI进行通信啊,呵呵,简单些
此帖出自stm32/stm8论坛
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

8
 
板上的5个串口和2个SPI都用完了,还有两路通讯只有都用I2C了

我就是吧STM32封装库的函数直接拿来用,但是总是在I2C2 EV1 ,即
    while(! I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED);

就是在这里死循环。但是固件库和参考手册里面的资料就那些,直接用库函数就是一直调不通。以前用别的单片机直接模拟I2C的工作还稳定一些。
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

9
 
                                 哇塞,你也太大手大脚了,估计给你再多串口都不够用
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

10
 
                                 没办法啊,产品需要
此帖出自stm32/stm8论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

11
 

回复 楼主 罗马后裔 的帖子

请问楼主可以把程序工程贴出来吗?最近也在做这个,没有调通
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表