专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
关于I2C发送
2019-03-24 12:59
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
14086
4
1572
我用lm3s6432的i2c给从机发送三个字节的数据,为什么从机接收到四个字节的数据,而且第一个字节和第四个字节的值相同,哪位大侠知道原因,能不能告诉一下,这个问题纠结了一天了
谢谢谢谢!! 此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
Study_Stellaris
1楼-- · 2019-03-24 15:31
精彩回答 2 元偷偷看……
加载中...
微笑的不倒翁
2楼-- · 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);
}
}
}
加载中...
微笑的不倒翁
3楼-- · 2019-03-24 21:40
这是i2c读写函数的源代码,但是读的数据不正确
加载中...
Study_Stellaris
4楼-- · 2019-03-25 03:07
精彩回答 2 元偷偷看……
加载中...
一周热门
更多
>
相关问题
相关文章
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#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);
}
}
}
一周热门 更多>