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);
}
(https://i.hizliresim.com/9ag4gr.png)
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().