这颗芯片不太容易焊接,不能长时间风枪吹,否则容易掉壳。
第一部分 硬件连接
电路很简单,没什么需要注意的。
第二部分 软件驱动
本来打算使用SPL06的,结果焊接掉壳了,更换成bmp280了。函数名没有变过来。。。
void SPL06_Init()
{
u8 uChipID = 0;
// wait stable
SPL06_WriteReg(SPL06_DEV,0xE0,0xB6);
delay_ms(300);
while(uChipID!= 0x58){
// 1.Device Reset & check Device
uChipID = SPL06_ReadReg(SPL06_DEV,0xd0); // Read ID
delay_ms(2000); // device check
delay_ms(2000); // device check
delay_ms(2000); // device check
}
printf("BMP280 check Pass!:deviceID = 0x%x \r\n",uChipID);
//2.Device Settings
}
u8 SPL06_ReadReg(u8 dAddr, u8 Reg)
{
u8 Value = 0;
//1.启动IIC
IIC_Start();
//2.写设备地址
IIC_Send_Byte((dAddr << 1)|0);
//3.wait
if(IIC_Wait_Ack())
{
IIC_Stop();
return 1;
}
//4.寄存器地址
IIC_Send_Byte(Reg);
//5.wait
if(IIC_Wait_Ack())
{
IIC_Stop();
return 1;
}
//6.启动IIC
IIC_Start();
//7.设备地址
IIC_Send_Byte((dAddr << 1)|1);
//8.wait read ack
if(IIC_Wait_Ack())
{
IIC_Stop();
return 1;
}
Value = IIC_Read_Byte(1);
//9.stop
IIC_Stop();
return Value;
}
void SPL06_WriteReg(u8 dAddr, u8 Reg, u8 Value)
{
//1.启动IIC
IIC_Start();
//2.写设备地址
IIC_Send_Byte((dAddr << 1)|0);
//3.wait
while(IIC_Wait_Ack());
//4.写寄存器地址
IIC_Send_Byte(Reg);
//5.wait
IIC_Wait_Ack();
//6.写value
IIC_Send_Byte(Value);
//7.wait
IIC_Wait_Ack();
//8.stop
IIC_Stop();
}