DS18B20温度校验 STM32代码
时间: 2023-07-03 18:31:03 浏览: 159
STM32+DS18B20 实现温度测试量
DS18B20温度传感器有内置的CRC校验机制,可以用来检测数据是否正确。以下是在STM32上使用DS18B20进行温度测量并进行CRC校验的代码示例:
```c
#include "stm32f1xx_hal.h"
#define DS18B20_PORT GPIOB
#define DS18B20_PIN GPIO_PIN_12
void delay_us(uint32_t us)
{
us *= (SystemCoreClock / 1000000) / 9;
while (us--) {
__NOP();
}
}
void ds18b20_init(void)
{
HAL_GPIO_WritePin(DS18B20_PORT, DS18B20_PIN, GPIO_PIN_RESET);
delay_us(500);
HAL_GPIO_WritePin(DS18B20_PORT, DS18B20_PIN, GPIO_PIN_SET);
delay_us(80);
}
void ds18b20_write_bit(uint8_t bit)
{
HAL_GPIO_WritePin(DS18B20_PORT, DS18B20_PIN, GPIO_PIN_RESET);
delay_us(2);
if (bit) {
HAL_GPIO_WritePin(DS18B20_PORT, DS18B20_PIN, GPIO_PIN_SET);
}
delay_us(60);
HAL_GPIO_WritePin(DS18B20_PORT, DS18B20_PIN, GPIO_PIN_SET);
delay_us(2);
}
uint8_t ds18b20_read_bit(void)
{
uint8_t bit = 0;
HAL_GPIO_WritePin(DS18B20_PORT, DS18B20_PIN, GPIO_PIN_RESET);
delay_us(2);
HAL_GPIO_WritePin(DS18B20_PORT, DS18B20_PIN, GPIO_PIN_SET);
delay_us(10);
bit = HAL_GPIO_ReadPin(DS18B20_PORT, DS18B20_PIN);
delay_us(50);
HAL_GPIO_WritePin(DS18B20_PORT, DS18B20_PIN, GPIO_PIN_SET);
return bit;
}
void ds18b20_write_byte(uint8_t byte)
{
uint8_t i;
for (i = 0; i < 8; i++) {
ds18b20_write_bit(byte & 0x01);
byte >>= 1;
}
}
uint8_t ds18b20_read_byte(void)
{
uint8_t byte = 0;
uint8_t i;
for (i = 0; i < 8; i++) {
byte |= ds18b20_read_bit() << i;
}
return byte;
}
void ds18b20_convert_temp(void)
{
ds18b20_init();
ds18b20_write_byte(0xCC);
ds18b20_write_byte(0x44);
}
float ds18b20_read_temp(void)
{
uint8_t data[9];
uint8_t crc = 0;
uint16_t temp = 0;
float t = 0;
uint8_t i;
ds18b20_init();
ds18b20_write_byte(0xCC);
ds18b20_write_byte(0xBE);
for (i = 0; i < 9; i++) {
data[i] = ds18b20_read_byte();
}
crc = HAL_CRC_Calculate(&hcrc, (uint32_t *)data, 8);
if (crc == data[8]) {
temp = (data[1] << 8) | data[0];
if (temp & 0x8000) {
temp = ~(temp - 1);
t = -1 * (float)temp / 16;
} else {
t = (float)temp / 16;
}
}
return t;
}
```
在读取温度之后,从DS18B20读取的9个字节数据将被存储在data数组中。对这些数据进行CRC校验,如果校验通过,则从读取的数据中提取温度值。在此示例中,使用了STM32的硬件CRC计算器进行校验。需要根据实际情况初始化硬件CRC计算器。
阅读全文