概述
MCU型号:
STM32L071KBU
SDK:HAL库
工具:CubeMX + MDK
1 IIC通信数据帧
温度传感器模块采用Sensirion STS3-DIS-B 温度传感器,I2C 接口,温度测量精度±0.2℃。
- STS3x-DIS支持I2C快速模式(频率最高可达
1000khz
) - 在向传感器发送命令后,传感器需要最小的
1ms
等待时间才能接收到另一个命令。 - 在写方向上,必须发送校验和,因为STS3x-DIS只接受后面跟着正确校验和的数据。在读取方向上,校验和的读取和处理由主机完成。
1.1 设备地址
当ADDR
引脚拉低时,设备地址为0x4A,LoRa竞赛板ADDR
引脚也是拉低的:
但是在IIC通信时,这7位设备地址要左移一位(0x4a<<1 = 0x94),因为LSB要用来表示R/W,因此通信时:
- 设备写地址(LSB=0):0x94
- 设备读地址(LSB=1):0x95
1.2 通信数据帧
选择测量条件:
-
Repeatability
可重复性测量精度:低、中、高(可重复性设置影响测量持续时间,从而影响传感器的总能耗) -
Clock stretching
时钟拉伸:使能/失能。(当发出带有时钟拉伸的命令时,传感器会用ACK响应读头,然后拉下SCL线。标准刻度线向下拉,直到测量完成。一旦测量完成,传感器释放SCL线并发送测量结果)
白框为主机控制(MCU),灰框为从机控制(温度传感器),SCL free
块表示最小等待时间为1ms。
1.2.1 使用时钟拉伸
- IIC主机发送数据
I2CStart2();
I2CSendByte2(0x94); // 设备写地址
I2CWaitAck2();
I2CSendByte2(0x2C); // 使用时钟拉伸
I2CWaitAck2();
I2CSendByte2(0x0D); // 中可重复性测量精度
I2CWaitAck2();
I2CStop2();
HAL_Delay(1); // 延时等待SCL free
- IIC主机接收数据
I2CStart2();
I2CSendByte2(0x95); // 设备读地址
I2CWaitAck2();
HAL_Delay(5); // 等待测量完成
data[0] = I2CReceiveByte2(); // 温度高8位
I2CSendAck2();
data[1] = I2CReceiveByte2(); // 温度低8位
I2CSendAck2();
data[2] = I2CReceiveByte2(); // CRC校验位
I2CSendNotAck2();
I2CStop2();
1.2.2 不使用时钟拉伸
- IIC主机发送数据
I2CStart2();
I2CSendByte2(0x94); // 设备写地址
I2CWaitAck2();
I2CSendByte2(0x24); // 不使用时钟拉伸
I2CWaitAck2();
I2CSendByte2(0x0B); // 中可重复性测量精度
I2CWaitAck2();
I2CStop2();
HAL_Delay(5); // 至少等待5ms
- IIC主机接收数据
I2CStart2();
I2CSendByte2(0x95); // 设备读地址
I2CWaitAck2();
data[0] = I2CReceiveByte2(); // 温度高8位
I2CSendAck2();
data[1] = I2CReceiveByte2(); // 温度低8位
I2CSendAck2();
data[2] = I2CReceiveByte2(); // CRC校验位
I2CSendNotAck2();
I2CStop2();
1.3 温度换算
(float)((data[0] << 8 | data[1]) * 175.0 / 65535 - 45);
2 HAL库硬件IIC编程
报警引脚Alert
一般用于连接MCU的中断引脚。引脚的输出取决于可编程限制的温度读数值。当满足报警条件时,引脚拉高,竞赛暂不使用。
2.1 CubeMX配置
使能IIC1默认使用PA9/10硬件,因此需要手动配置PB6/7为IIC1引脚,其他参数默认即可:
2.2 读取温度
float temp_read(void)
{
uint8_t data[3] = {0x24, 0x0B};
HAL_I2C_Master_Transmit(&hi2c1, 0x94, data, 2, 10);
HAL_Delay(5);
HAL_I2C_Master_Receive(&hi2c1, 0x95, data, 3, 10);
return (float)((data[0] << 8 | data[1]) * 175.0 / 65535 - 45);
}
END
最后
以上就是等待指甲油为你收集整理的[004] [蓝桥杯物联网] STS3x-DIS温度传感器IIC读取 1 IIC通信数据帧 2 HAL库硬件IIC编程 的全部内容,希望文章能够帮你解决[004] [蓝桥杯物联网] STS3x-DIS温度传感器IIC读取 1 IIC通信数据帧 2 HAL库硬件IIC编程 所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复