DS18B20温度CRC校验 STM32代码
时间: 2023-07-03 14:31:13 浏览: 137
以下是使用STM32的OneWire协议读取DS18B20温度,同时进行CRC校验的示例代码:
```c
#include "stm32f4xx.h"
#include "delay.h"
#include "onewire.h" //OneWire库头文件
int main(void)
{
uint8_t buffer[9];
uint16_t temp;
OneWire_Init(GPIOB, GPIO_Pin_12); //初始化OneWire引脚
while(1)
{
OneWire_Reset(); //复位DS18B20
OneWire_WriteByte(0xCC); //跳过ROM操作
OneWire_WriteByte(0x44); //启动温度转换
delay_us(750); //等待转换完成
OneWire_Reset(); //复位DS18B20
OneWire_WriteByte(0xCC); //跳过ROM操作
OneWire_WriteByte(0xBE); //读取温度寄存器
for(int i=0; i<9; i++) //读取温度寄存器数据
{
buffer[i] = OneWire_ReadByte();
}
//进行CRC校验
if(OneWire_CRC8(buffer, 8) == buffer[8])
{
temp = buffer[1];
temp <<= 8;
temp |= buffer[0];
float temperature = (float)temp / 16.0; //计算温度值
//在此处将温度值进行处理或显示
}
}
}
```
需要注意的是,进行CRC校验需要使用到OneWire_CRC8函数,其参数为要校验的数据和数据长度,返回值为计算出的CRC校验值。详细的CRC校验计算方法可以参考DS18B20的数据手册。
阅读全文