关于I2C发送

2019-03-24 12:59发布

我用lm3s6432的i2c给从机发送三个字节的数据,为什么从机接收到四个字节的数据,而且第一个字节和第四个字节的值相同,哪位大侠知道原因,能不能告诉一下,这个问题纠结了一天了
谢谢谢谢!! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
微笑的不倒翁
2019-03-24 16:45
< :TI_MSP430_内容页_SA7 --> #include "hw_ints.h"
#include "hw_memmap.h"
#include "hw_types.h"
#include "debug.h"
#include "gpio.h"
#include "i2c.h"
#include "interrupt.h"
#include "sysctl.h"
#include"timer.h"



unsigned char I2C_sla;
void init_i2c(void)
{
         SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);

  GPIOPinTypeI2C(GPIO_PORTB_BASE, GPIO_PIN_2 | GPIO_PIN_3);
        I2CMasterEnable(I2C0_MASTER_BASE);
    I2CMasterInitExpClk(I2C0_MASTER_BASE, SysCtlClockGet(), false);//false
}

void I2CWrite(unsigned char sla,char* pBuffer, unsigned long ulCount)
{
     I2C_sla = sla >> 1;
     while(I2CMasterBusy(I2C0_MASTER_BASE));  //如果i2c忙,则等待
     I2CMasterSlaveAddrSet(I2C0_MASTER_BASE,I2C_sla, false); //设置主机从地址
     I2CMasterControl(I2C0_MASTER_BASE, I2C_MASTER_CMD_BURST_SEND_START);//开始发送地址,后面进行第一个字节发送
         while (ulCount)
     {
             while(I2CMasterBusy(I2C0_MASTER_BASE));        //等空闲时
        I2CMasterDataPut(I2C0_MASTER_BASE, *pBuffer);
        pBuffer++;
                ulCount--;
                I2CMasterControl(I2C0_MASTER_BASE, I2C_MASTER_CMD_BURST_SEND_CONT);          //发送数据
                if(ulCount==1)
                {
               while(I2CMasterBusy(I2C0_MASTER_BASE));        //等空闲时
                   I2CMasterDataPut(I2C0_MASTER_BASE, *pBuffer);
          // pBuffer++;                  
           I2CMasterControl(I2C0_MASTER_BASE,I2C_MASTER_CMD_BURST_SEND_FINISH);        //发送最后一个数据 后发送停止位
                   ulCount--;
                }             
     }
}
void I2CRead(char sla,char* pBuffer, unsigned long ulCount)
{
      I2C_sla=sla>>1;
     while(I2CMasterBusy(I2C0_MASTER_BASE));  //如果i2c忙,则等待
      I2CMasterSlaveAddrSet(I2C0_MASTER_BASE,I2C_sla, true);
          I2CMasterControl(I2C0_MASTER_BASE, I2C_MASTER_CMD_BURST_RECEIVE_START);
     while(I2CMasterBusy(I2C0_MASTER_BASE));  //如果i2c忙,则等待
         I2CMasterDataGet(I2C0_MASTER_BASE);
          I2CMasterControl(I2C0_MASTER_BASE, I2C_MASTER_CMD_BURST_RECEIVE_CONT);
          while(ulCount)
          {
                if(ulCount!=1)
                {
          while(I2CMasterBusy(I2C0_MASTER_BASE));  //如果i2c忙,则等待
                  *pBuffer++ = I2CMasterDataGet(I2C0_MASTER_BASE);
               ulCount--;
               I2CMasterControl(I2C0_MASTER_BASE, I2C_MASTER_CMD_BURST_RECEIVE_CONT);
                     if(ulCount==1)
                   {                           
                            *pBuffer++ = I2CMasterDataGet(I2C0_MASTER_BASE);
                    ulCount--;
                                I2CMasterControl(I2C0_MASTER_BASE, I2C_MASTER_CMD_BURST_RECEIVE_FINISH);
                          
                   }
                 }                                                                                                                                                               
                 else
                 {
                  *pBuffer++ = I2CMasterDataGet(I2C0_MASTER_BASE);
               ulCount--;
                   I2CMasterControl(I2C0_MASTER_BASE, I2C_MASTER_CMD_BURST_RECEIVE_FINISH);
                 }
          }
}

一周热门 更多>

相关问题

    相关文章