st32f030 pin pozisyonunu değiştirmek 12uS zamana neden oluyor. Yanlış nerede?

Başlatan boreas, 14 Ocak 2019, 15:09:51

boreas

CubeMX ile HAL kitaplığını kullanarak kod yazıyorum. DS18B20 kullanacağım. Yalnız çıkış olan pini girişe çevirip tekrar çıkış yapmam 12uS ye neden oluyor. Ararda hiç bekleme olmamasına rağmen.
while (1){
 ONEWIRE_LOW(OneWireStruct);
 ONEWIRE_OUTPUT(OneWireStruct);
 delay_65us();  // Pin çıkış pozisyonunda 
 ONEWIRE_INPUT(OneWireStruct); // giriş oldu
                // döngü bitti 1. satıra döndü ve 12uS geçti.
}

// ONEWIRE İnput'un içeriği

void ONEWIRE_INPUT(OneWire_t *gp)
{
 GPIO_InitTypeDef gpinit;
 gpinit.Mode = GPIO_MODE_INPUT;
 gpinit.Pull = GPIO_NOPULL;
 gpinit.Speed = GPIO_SPEED_FREQ_HIGH;
 gpinit.Pin = gp->GPIO_Pin; 
 HAL_GPIO_Init(gp->GPIOx,&gpinit);
}


superconductor

One-wire için sürekli giriş çıkış ayarlamana gerek yok. Çıkış yapıp open-drain moda al, pin durumu pin output ayarlı iken de okunabiliyor. Stnd. Perip. için fonksiyon GPIO_ReadOutputDataBit().