|
大家好,我最近使用STM32进行DS18B20的数据采集,首先因为DS18B20的时序严格我并没有使用ST自带的驱动库,我的是定时器中断方式一次性同时读取4个DS18B20的数据,比如用GPIOB,用GPIOB_12,GPIOB_13,GPIOB_14,GPIOB_15同时进行数据的读取,所有的操作比如DS18B20的复位操作,读数据写数据等都是同时操作的,操作方式如下
/***************************************************************************************
函 数:void DS18B20_M_Config_DQ_Out(void)
输入量:无
返回值:无
备 注:当同时读取多个DS18B20时,该函数用于配置这些IO端口为输出模式
***************************************************************************************/
void DS18B20_M_Config_DQ_Out(void)
{
uint32 tempdata;
tempdata = _GPIOB_CRH;
tempdata &= 0x0000FFFF;
tempdata |= 0x33330000;
_GPIOB_CRH = tempdata; //这里对多个GPIO端口同时赋值
}
在现场因为存在干扰情况,所以又加了CRC校验,整个程序使用的是多任务操作系统,在某个时刻存在在其他任务中存在关中断时间长的情况(注意这里可能会打断DS18B20的数据采集),但是我想在DS18B20加了CRC校验,即使偶尔出现一次因关中断时间长导致数据读取错误也没有关系,最后只要CRC不合格我就抛弃这次采集的数据,然后重新采集。
现在的问题是,这四个温度探头中有2个数据不对,比如实际温度只有38度,但采集回来是50多度,并且一直是50多度,因为加了CRC所以排除了是干扰问题,如果说是关中断时间过长造成,不可能我每次采集的时候都会碰到长时间关中断这种情况啊(因为是多任务,并且采集DS18B20的任务如果采集不对还会做相应的时间延迟,理论上可以避免每次都会被打断的情况)
综上所述,想问大家有没有可能DS18B20存在CRC校验正确,但温度不正确的情况 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|