关于detect 函数的最后为什么不需要拉低电平有点疑问?

关于detect 函数的最后为什么不需要拉低电平有点疑问?

// =====> 疑问的标签是这个

#include "imx6ull.h"

#define DS18B20_HEIGHT_LEVEL 1
#define DS18B20_LOW_LEVEL 0

void ds18b20_pin_init(void)
{
    /*101 GPIO5_IO02*/
    IOMUXC_SW_MUX_CTL_PAD_GPIO5_IO02 &= ~(0xf << 0); // 位清零
    IOMUXC_SW_MUX_CTL_PAD_GPIO5_IO02 |= (0x5 << 0);

    return;
}

// read
void ds18b20_pin_input(void)
{
    GPIO5->GDIR &= ~(1 << 2);
    return;
}

// write
void ds18b20_pin_output(void)
{
   
    GPIO5->GDIR |= (1 << 2);
    return;
}

void ds18b20_write_level(int level)
{
    if (level){
        GPIO5->DR |= (1 << 2);
    }else{
        GPIO5->DR &= ~(1 << 2);
    }
    
    return;
}

int ds18b20_read_level(void)
{   
    int level;

    level = GPIO5->PSR & (1 << 2);

    return level ? 1 : 0;
}

int ds18b20_detect(void)
{
    int level;

    ds18b20_pin_output();
    ds18b20_write_level(DS18B20_HEIGHT_LEVEL);
    gpt_delay_us(10);

    /*
     *During the initialization sequence the bus master transmits (TX) 
     *the reset pulse by pulling the 1-Wire bus low for a minimum of 480us.
     */
    ds18b20_write_level(DS18B20_LOW_LEVEL);
    gpt_delay_us(550);

    /*releases the bus 通过状态转换来释放资源*/
    ds18b20_write_level(DS18B20_HEIGHT_LEVEL);
    ds18b20_pin_input();

    /*waits 15us to 60us */
    
    gpt_delay_us(70);
    level = ds18b20_read_level();

    /*presence pulse by pulling the 1-Wire bus low for 60us to 240us.*/

 //=====>  这里的不是说拉低1-write? 在经过wait15us-60us的等待上拉电阻会将它设计为高电平在这里不需要重新设计回低电平吗?    
    gpt_delay_us(200);

    if (level == DS18B20_HEIGHT_LEVEL){
        uart_printf("Detect ds18b20 failed.\r\n");
        return -1;
    }else {
        uart_printf("Detect ds18b20 succeessed.\r\n");
    }
    
    return 0;
}

正在回答

登陆购买课程后可参与讨论,去登陆

1回答
不需要了,管脚设为输入模式后,上拉电阻会把管脚自动拉高,接下来拉低是DS18b20给出的响应的信号,时间是这个信号的持续时间。
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师