新手入门
- 积分
- 7
- 金钱
- 7
- 注册时间
- 2022-10-26
- 在线时间
- 0 小时
|
1金钱
IIC连续写函数u8 MPU_Write_Len(u8 addr,u8 reg,u8 len,u8 *buf)定义缓冲区的变量类型为u8 *buf,是指针数组变量,而IIC的写数据函数void MPU_IIC_Send_Byte(u8 txd)的参数类型为u8无符号数,那为什么MPU_Write_Len汉书中发送数据可以直接MPU_IIC_Send_Byte(buf[i])????buf[i]的数据类型应该是指针吧,为什么能作为MPU_IIC_Send_Byte的参数?这里怎么理解呢?小白困扰了很久的问题,求大佬悉心解答!!!!!!谢谢了!!!!
具体函数代码如下:
函数名称:MPU_Write_Len
函数功能:IIC连续写(写器件地址、寄存器地址、数据)
函数参数:addr:器件地址 reg:寄存器地址
len:写入数据的长度 buf:数据区
函数返回值:0,写入成功 其他,写入失败
**********************************************/
u8 MPU_Write_Len(u8 addr,u8 reg,u8 len,u8 *buf)
{
u8 i;
MPU_IIC_Start();
MPU_IIC_Send_Byte((addr<<1)|0); //发送器件地址+写命令(0为写,1为读)
if(MPU_IIC_Wait_Ack()) //等待应答
{
MPU_IIC_Stop();
return 1;
}
MPU_IIC_Send_Byte(reg); //写寄存器地址
MPU_IIC_Wait_Ack(); //等待应答
for(i=0;i<len;i++)
{
MPU_IIC_Send_Byte(buf[i]); //发送数据
if(MPU_IIC_Wait_Ack()) //等待ACK
{
MPU_IIC_Stop();
return 1;
}
}
MPU_IIC_Stop();
return 0;
}
函数名称:MPU_IIC_Send_Byte
函数功能:MPU IIC发送一个字节
函数参数:txd:要发送的数据
函数返回值:无
注意:IIC发送字节是一个一个位发送的,发送一个字节需要发送八次
**********************************************/
void MPU_IIC_Send_Byte(u8 txd)
{
u8 t;
MPU_SDA_OUT();
MPU_IIC_SCL=0; //拉低时钟开始数据传输
for(t=0;t<8;t++)
{
MPU_IIC_SDA=(txd&0x80)>>7;
txd<<=1;
MPU_IIC_SCL=1;
MPU_IIC_Delay();
MPU_IIC_SCL=0;
MPU_IIC_Delay();
}
}
|
最佳答案
查看完整内容[请看2#楼]
.....不用了,自己突然懂了。脑子一蒙圈,傻逼了。 就是数组和指针的关系,数组传输数据的时候要间接传输,buf就是指针数组中的第i个地址,是指针,所以在传输过程中其实不是把指针传过去,而是找到这个地址,然后以把这个地址的第i个偏移量传过去,就相当于buf数组中的第i个数据。 只是形式上两个参数类型不一样,被误导了,一时间没反应过来蒙圈了。
|