OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2703|回复: 1

I2C通信,返回全是FF

[复制链接]

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2016-7-9
在线时间
8 小时
发表于 2016-7-9 15:03:56 | 显示全部楼层 |阅读模式
3金钱
[mw_shl_code=applescript,true]#include "uart_protocol.h"
#include "drv_parameter.h"
#include "Drv_Uart.h"
#include "stm8s_it.h"
#include "macro_bits_define.h"

extern u8 UART_RX_Buffer[3];
extern u8 Buffer_W;
extern u8 Buffer_Time;
extern u8 Buffer_Count;

SysUartMsgPackageType   SysUartMsgPackage;

void sys_uart_msg_process(void)
{
          u8 Cmd = 0, Msg = 0;
       
        if(Buffer_Count == 3)
        {
                Buffer_W = 0;
                Buffer_Count = 0;
                if((UART_RX_Buffer[0] == g_Boardpara.List.DeviceAddress)
                        || (UART_RX_Buffer[0] == 0x00))
                {
                        Cmd = UART_RX_Buffer[1];
                        Msg = UART_RX_Buffer[2];
                        sys_uart_protocol_parse(Cmd, &Msg);
                }
        }
        if(Buffer_Time == 0)
        {
                  Buffer_W = 0;
                Buffer_Count = 0;
                for(u8 i=0; i<3; i++)
                {
                          UART_RX_Buffer = 0;
                }
        }
}

//============================================================================
// 名称:SysUartMsgParse
// 功能:系统串口协议解析
// 参数:Cmd:命令码
//      liv_Msg:数据
// 返回:0为成功,1为数据包太短,校验出错
// 说明:无
//============================================================================
u8 sys_uart_protocol_parse(u8 Cmd, u8* Msg)
{
        u8 res[10];  
        switch (Cmd)
        {   
                case UARTCMD_SetAddr:                //设置设备地址
                {
                        SysUartMsgPackage.Address = *Msg;
                        g_Boardpara.List.CheckNum = Def_CheckNum;
                        g_Boardpara.List.DeviceAddress=*Msg;
                        res[0] = para_save(PARA_ADDRESS_FACT); //保存出厂参数,返回FLASH操作状态:错误或者正确  
                        sys_uart_send_msg(UARTCMD_SetAddr, 1, res);        //返回FLASH操作状态   

                }
                break;
                case UARTCMD_GetAddr:                //读取设备地址
                {
                        res[0] = *Msg;
                        if(res[0]==0xAA)
                        {
                                res[0]=g_Boardpara.List.DeviceAddress;      //设备地址
                                sys_uart_send_msg(UARTCMD_GetAddr, 1, res); //返回设备地址
                        }
                }
                break;   
                case UARTCMD_GetSampleResult:                   //读取一次采样数据
                {                       
                        res[0] = *Msg;      
                        if(res[0]==0xBC)
                        {
                                Start_Measures();
                        }      
                }
                break;

                default:
                {
                        return 1;
                }
        }
        return 0;
}


//============================================================================
// 名称:SysUartMsgSend
// 功能:串口1消息发送函数
// 参数:Address:从机地址
//      DeviceId:从机设备代号
//      Cmd:数据包命令码
//      Len:有效数据长度,1个字节
//                Dat:有效数据
// 返回:无
// 说明:无
//============================================================================
void sys_uart_send_msg(u8 Cmd, u8 Len, u8 *Dat)
{
        u8         SendBuffer[10];
        u8         i = 0, j;
        SendBuffer[i++] = g_Boardpara.List.DeviceAddress;
        SendBuffer[i++] = Cmd;
        for (j = 0; j < Len; j++)
        {
                SendBuffer[i++] = Dat[j];
        }
       
        Uart1_SendString(SendBuffer,i);
}




[/mw_shl_code]



这是一个超声波模块I2C发送数据的i2c协议函数,苦恼的是不知道这个的器件地址,资料上说的默认是0XE8,但是之前测试UART串口通信的时候,地址是0X00。I2C通信的时候试了00地址也没用,一直都是返回FF,求大神帮帮忙,搞了几天了,很苦恼啊。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-7-9 20:27:55 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 01:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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