×
单片机 > 单片机程序设计 > 详情

移植ds18b20到stm32f103遇到的问题

发布时间:2020-08-27 发布时间:
|
    之前在AVR单片机上用过DS18B20温度传感器,现在需要在STM32F103平台下使用,就直接在原先的代码基础上做了相应修改,调试时遇到的问题是测量值总是显示127.9375(读取的温度数据为0x7fff),用示波器看波形也没有发现问题,以为是18B20出问题了,又回到AVR下测试,结果正常。后来发现,不同之处在于供电:AVR用的5V,而STM32是3.3V。把18B20的供电电压换成5V就能正常工作了。又测试了18B20用3.3V供电,DQ脚5V上拉,测量数据还是不对,而且与上拉电阻值无关。数据手册上明明写的供电电压3~5.5V,难道是管子的问题?

    总结一下STM32与AVR单片机在使用DS18B20的区别。

    18B20使用一线值,单片机控制DQ引脚既需要输出电平,同时需要读取引脚电平。AVR单片机是通过设置DDRx寄存器来控制引脚的输入/输出状态。读引脚时,读取PIN,输出的时候写PORT。STM32的引脚可以配置为开漏输出模式,读输入数据寄存器就可得到引脚状态,省去来回切换输入输出模式,需要加上拉电阻。并且按照18B20数据手册,DQ引脚需要4.7k上拉电阻。

/*
*********************************************************************************************************
*    函 数 名: DS18B20_GPIOConfiguration
*    功能说明: 18b20端口配置为开漏输出
*    形    参:无
*    返 回 值: 无
*********************************************************************************************************
*/
void DS18B20_GPIOConfiguration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;  

    RCC_APB2PeriphClockCmd(DQ_GPIORCC, ENABLE);  

    DQ_1;        // 需要先写输出寄存器为1,否则初始化后默认输出0
    GPIO_InitStructure.GPIO_Pin = Pin18B20;  
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出  
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
    GPIO_Init(GPIO18B20, &GPIO_InitStructure);
}
uint8_t BUSY(void)     //读温度传感器数据引脚

    return GPIO_ReadInputDataBit(GPIO18B20, Pin18B20);
}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR熔丝位操作时的要点和需要注意的相关事项