您的位置 首页 资料

移植ds18b20到stm32f103遇到的问题

之前在AVR单片机上用过DS18B20温度传感器,现在需要在STM32F103平台下使用,就直接在原先的代码基础上做了相应修改,调试时遇到的问题是…

之前在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);
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/254969.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部