A while back at work, I created a simple NTP server, using an STM32F407. This has one of the (I believe Synopsys synthesisable IP bloc) Ethernet MAC blocks in it.
One thing I discovered and enabled and re purposed is the fact that this MAC block supports the PPTP protocol as used e.g. at CERN for nanosecond level timing where the time of flight of Ethernet cables can be measured.
It contains a 63 bit timer (seconds with a 31 bit fraction) with an adjustable increment rate used to timestamp Ethernet frames, but it does have a compare register that allows triggering of other timers or an output pin - basically it allows you to create timing pulses which have an average period adjustable to sub-nanosecond level rate, but which have about 20nS jitter on each edge (the counter updates at some fraction of the core clock) with a 208MHz core clock.
Its pulse output can be for instance sampled by a 32 bit timer - on that device Timer 2 , while a GPS 1PPS signal can be also sampled on Timer 2, and some maths done to create a PLL.
You can turn on PPTP and use this timer without actually using the Ethernet MAC for data transfer - if you do use it, the Ethernet frames will contain PPTP timer data but by design, this gets ignored by all non-PPTP hardware.
Using this and a non-timing grade UBlox GPS (where the vendor deliberately ramps reported precision timing parameters because you did not pay 110 Euros for the module although the 1PPS output is in reality actually far more stable than the reported values ) , it was possible to measure the clock frequency of the microcontroller to 1Hz precision, and use that in a simple NTP server, so that "NTP" time could survive some GPS outages ..