找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 937|回复: 12
打印 上一主题 下一主题
收起左侧

我用51单片机与STM32进行IIC通信为啥会失败呀,设置的地址没有问题的

[复制链接]
回帖奖励 1 黑币 回复本帖可获得 1 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
请大神帮我看看吧 单片机源程序如下:
/**
*********************************************** *****************************
* @file main.h
* @author   
* @version V1.0
* @date 2019/11 /30
* @brief IIC 从模式测试
***************************************** *********************************** *********************************************** ****************************** **/
#include "RX8F103.h"
#define STCON MSCON
#define SRXBUF MSRXBUF
#define STXBUF MSTXBUF
#define SSTAT0 MSSTAT0
#define SSTAT1 MSSTAT1
#define SIEN0 MSIEN0
#define SIEN1 MSIEN1
#define SSADDR MSADDR

#define NULL 0x00
#define ADCTriming 0xF1
#define HRCTriming 0xF2
#define ACK 0x8F

// ------------SSTAT0----------------//
#define GC 40 //一般调用
#define SUNE 04 //传输不足
#define SOVF 02 //接收溢出
#define SNE 01 //正常结束

/------------SSTAT1--------------//#define
STBE 2 // 传输是空的
#define 08 // 传输
EEPROM 是空的
#define SRBE 04_SLA // 接受任务是空的#define 010 // 任务是空的#define

0x60 / /AT24C02
易失性位 I2CCompleteFlag;

//从发送一个发送
字符 void EUart0_SendOneChar(char c)
{
        ES0=0; //发送数据时关中断
        TI0=0; //清TI位
        S0BUF = c; //将待发送连接访问数据缓冲,并开始传输。
        while(!TI0);
                                                                TI0
        =0; //等待结束。//软件清TI位,然后在中断处理函数中清0
        ES0 = 1; // 开启串口中断
}

void EUart0_SendString(*st)
{
        while(*st)
        {
                EUart0_SendOneChar(*st++);
        }
}

void main(void)
{         
        CLKCON |= 0x1F; //默认所有打开
        时钟RSTPORTEN = 1; //使能重建功能

        UART0PORTEN = 1;//
        ; 串口端口使能S0CON = 0x50 //SCON: Mode 1, 8-bit UART, Enable Rcvr
        S0RELH = 0x03; //S0RELH + S0RELL 构成波特率设置 S0REL[9:0]
        S0RELL = 0xF7; //波特率 = SYSCK/(16×(1024-S0REL)) SYSCK跟CLKDIV向波特率115200
        ES0 = 1; // 允许浏览位
        EUart0_SendString("RX8F103 IIC Slave Init!V28.0\r\n");
        
        I2CPORTEN = 1;//IIC PORT口使能
        TOPCON = 0x00; //使能IIC Slave         
        SSADDR = 0x50; //IIC从机地址
        SIEN0 = 0x01;//使能正常结束中断
        SIEN1 = 0x01; //使能中断
        STCON = 0x60; //                                产生启动条件
        I2CCompleteFlag = 0; //IIC完成标志位
        EI2CFIFO = 1; //开IIC FIFO中断
        EI2CRXTX = 1; //开IIC TXRX中断
        EA = 1; //使能总结束
        
        while(1) //主循环
        {         
                if(I2CCompleteFlag)
                {
                        I2CCompleteFlag = 0;
                }
        }
}

void I2C_Slave_TRX_ISR(void) 中断 EI2CRXTX_VECTOR //TRX中断
{
        unsigned char i2c_rcv_data;
        if(SSTAT0 & 0x01)         
        {
                i2c_rcv_data = SRXBUF;
                EUart0_SendOneChar(0x11);
                EUart0_SendOneChar(i2c_rcv_data);
                EUart0_SendOneChar(0xdd);
                I2CCompleteFlag = 1;
                SSTAT0 &= 0xFE;//清标志结束位
        }         
} //传输传输

void I2C_Slave_FIFO_ISR(void) 中断 EI2CFIFO_VECTOR //FIFO中断
{
        unsigned char i2c_rcv_addr;        
        if(SSTAT1 & 0x01) //接收数据
        {
                i2c_rcv_addr = SRXBUF;
                EUart0_SendOneChar(0x00);
                EUart0_SendOneChar(i2c_rcv_addr);
                EUart0_SendOneChar(0xdd);
        }
}

/*---------------------------------EUART0 ISR---------- ---------------------------------*/
void EUART0ISR(void) 中断 EUART0_VECTOR //使用 2
{
        if(S0CON & RI0) //接收中断
        {
                ;
        }
        RI0 = 0; //清标志位
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1043477 发表于 2022-9-8 16:02 | 显示全部楼层
工作电压2.5V-5V都是可以的
回复

使用道具 举报

板凳
ID:1043477 发表于 2022-9-12 08:40 | 显示全部楼层
15706794215 发表于 2022-9-9 18:51
通讯电压不匹配,加电压转换

IIC通信电压转换,是用硬件来实现还是用软件来实现
回复

使用道具 举报

地板
ID:1043477 发表于 2022-9-16 15:58 | 显示全部楼层
XCYYLX 发表于 2022-9-8 19:35
这里应该有问题

这个问题,可以具体一下不,看好几天了,没有头绪
回复

使用道具 举报

5#
ID:1043477 发表于 2022-9-16 15:59 | 显示全部楼层
陈润源home 发表于 2022-9-8 15:28
应该是电平不一样吧  51是5V   32是3.3V

都用3.3v供电了,应该阈值都是一样的
回复

使用道具 举报

6#
ID:1043477 发表于 2022-9-16 16:00 | 显示全部楼层
15706794215 发表于 2022-9-9 18:51
通讯电压不匹配,加电压转换

都用的3.3v供电,通信电压应该是一样的吧
回复

使用道具 举报

7#
ID:1043477 发表于 2022-9-16 16:01 | 显示全部楼层
工工1999 发表于 2022-9-12 16:06
让2个单片机都工作在3.3V,能通讯就是电平匹配问题,还是不能通讯就找软件问题了。电平匹配问题要改硬件了 ...

电压应该是一样的,大佬帮忙看一下软件上面有上什么问题
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表