打印

STM32 IIC 从机通信问题

[复制链接]
6741|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
adce|  楼主 | 2012-6-19 19:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求一个从机通信程序...
功能是 主接收 从发送模式...
现在问题是主能接收一次  第二次就接收不到了...会卡在RECIVED_BYTE那里
不知什么原因...很可能是程序写错了...望指教...


void TRANSFER_Slave(void)
{
     while(!I2C_CheckEvent(I2C1,  I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED));   
     I2C_SendData(I2C1, 0x01);
     while(!I2C_CheckEvent(I2C1, I2C_EVENT_SLAVE_BYTE_TRANSMITTED));  
     I2C_SendData(I2C1, 0x02);
     while(!I2C_CheckEvent(I2C1, I2C_EVENT_SLAVE_BYTE_TRANSMITTED));  
     I2C_SendData(I2C1, 0x03);
     while(!I2C_CheckEvent(I2C1, I2C_EVENT_SLAVE_BYTE_TRANSMITTED));  
     I2C_SendData(I2C1, 0x04);
     while(!I2C_CheckEvent(I2C1, I2C_EVENT_SLAVE_BYTE_TRANSMITTED));  
     // while(!I2C_CheckEvent(I2C1, I2C_EVENT_SLAVE_STOP_DETECTED));  //有这句卡这句
    //Clear I2C2 STOPF flag: read operation to I2C_SR1 followed by a write operation to I2C_CR1
    (void)(I2C_GetFlagStatus(I2C1, I2C_FLAG_STOPF));
    I2C_Cmd(I2C1, ENABLE);
}
沙发
adce|  楼主 | 2012-6-19 19:16 | 只看该作者
这是主机端
void TRANSFER_Master(void)
{
     char res1;
     char res2;
     char res3;
     char res4;
     //while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)); //有这句卡这句
     //I2C_AcknowledgeConfig(I2C1, ENABLE);         
     I2C_GenerateSTART(I2C1,ENABLE);
     while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));
     I2C_Send7bitAddress(I2C1,ADDR_SLAVE1,I2C_Direction_Receiver);
     while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));

     while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED));
     res1 = I2C_ReceiveData (I2C1);
     while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED));
     res2 = I2C_ReceiveData (I2C1);
     while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED));
     res3 = I2C_ReceiveData (I2C1);

     I2C_AcknowledgeConfig(I2C1, DISABLE);
     I2C_GenerateSTOP(I2C1,ENABLE);       
                                       
     while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED));
     res4 = I2C_ReceiveData (I2C1);
     I2C_AcknowledgeConfig(I2C1, ENABLE);
}

使用特权

评论回复
板凳
adce|  楼主 | 2012-6-19 22:39 | 只看该作者
自解 资料看多了 被误解了....
不用再倒数第二个数据收到之后关闭ACK后STOP...
直接在最后一个数据收完后关掉就行了

使用特权

评论回复
地板
yefei1994| | 2015-8-10 00:10 | 只看该作者
硬件IIC中断只能中断一次楼主知道什么原因么

使用特权

评论回复
5
sf116| | 2015-8-10 09:29 | 只看该作者

使用特权

评论回复
6
sf116| | 2015-8-10 09:45 | 只看该作者
7
jiangzhe8525| | 2016-2-29 10:20 | 只看该作者
sf116 发表于 2015-8-10 09:45
http://www.amobbs.com/thread-5580487-1-5.html


你好,你发的AM的帖子信息能复制下来么,那个网站看不了,需要会员呢,谢谢啦

使用特权

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

本版积分规则

0

主题

68

帖子

1

粉丝