Лучше таймер. Если STM32 - два TIMx_OCx на одном таймере решат ситуацию. А пустой оператор <- конвейер, число тактов чтения, наличие кэша, выранивание/отсутвие, ... Может
здесь поможет. Для STM8 делал, но у него тоже конвейер есть (вроде на 3 стадии). Довольно стабильно получилось, 1-Wire нормально пашет. Но я там прерывания запрещал на промежуток чтения бита.