1.支持热插拔,动态获取slave地址
2.更高的数据传输速率
3.连接方式
===============================
IIC DMA 与IIC 传输的速率对比
1. 加入DMA
2.未加DMA
结论:看起来小批量的数据传输 无论是否加入DMA 对结果没有很大影响
模拟IIC 再写入多页的的设备时需要注意
void IIC_Write_Multi_Reg(uint8_t SlaveAddress,uint8_t RegAddress,uint8_t *Data,int num)
{
IIC_Start();
IIC_Send_Byte(SlaveAddress); //发送器件地址,写数据
IIC_Wait_Ack();
IIC_Send_Byte(RegAddress); //发送低地址
IIC_Wait_Ack();
IIC_Send_Byte(RegAddress%256); //发送低地址
IIC_Wait_Ack();
for(int count =0;count<num;count++)
{
IIC_Send_Byte(*Data);
IIC_Wait_Ack();
printf("%02x ,",*Data);
if((count+1)%12==0 ) printf("\r\n");
Data++;
//满页操作
if((count+1)%8==0) /* Note :每页写完之后要等该页数据存储完毕之后再进行下页的存储*/
{
IIC_Stop();
HAL_Delay(10);
IIC_Start();
IIC_Send_Byte(RegAddress); //发送地址
IIC_Wait_Ack();
IIC_Send_Byte(RegAddress%256); //发送低地址
IIC_Wait_Ack();
}
}
IIC_Stop();
HAL_Delay(10);
}
1.注意发送的高地址和低地址,需要加入发送地址的两位来确认
2.注意再一页数据写完之后 要等数据完成存储,即结束一个IIC ,使之存储起来,再重新发送数据,此时的地址不用发生偏移
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_43519774/article/details/144829135
|