在网上搜索了很久,始终没有找到实现了搜索ROM算法的库,所以在别人写的库的基础上,成功移植并验证了DS18B20搜索ROM算法,可以一次性将总线上所有设备的ROM读取并保存。
-
stm32f103c8t6 bluepill 开发板
-
使用IO口 GPIOB8
-
HAL库
如果继续使用stm32单片机并使用HAL库,直接修改 CPU_FREQUENCY_MHZ 即可。其他单片机自行实现。
function_name | brief |
---|---|
DS18B20_Init | 初始化 |
DS18B20_GetTemp_SkipRom | 读取温度,适用于只有一个器件 |
DS18B20_Search_AllID | 获取总线上所有设备的ROM |
DS18B20_GetTemp_MatchRom | 在匹配 ROM 情况下读取 DS18B20 温度值 |
/***********************单个ds18b20测试**********************************/
printf("TEMP: %f\r\n",DS18B20_GetTemp_SkipRom());
/***********************单个ds18b20测试**********************************/
/***********************多个ds18b20测试**********************************/
unsigned long long Ds18b20_ID[6]={0}; //64bit 用来存放 DS18B20 ID
uint8_t Device_num=0;
Device_num = DS18B20_Search_AllID(Ds18b20_ID);
printf("find device:%d\r\n",Device_num); //搜索所有设备,并把设备id存入Ds18b20_ID数组
for(i=0;i<Device_num;i++)
{
printf("Device %d 0x%llx\r\n",i,Ds18b20_ID[i]);
}
for(i=0;i<Device_num;i++)
{
printf("Device %d Temp: %f\r\n",i,DS18B20_GetTemp_MatchRom((uint8_t *)&Ds18b20_ID[i]));
}
/***********************多个ds18b20测试**********************************/
https://github.com/imuncle/Embedded_Peripheral_Libs
https://github.com/Mculover666/HAL_Driver_Lib
以下两个文件存放在Document目录
DS18B20.pdf
1-Wire搜索算法.pdf