The coroutine will only run as many times as you tell it to run with StartCoroutine.
WaitForFixedUpdate will make it wait to resume until after the next physics simulation frame. If you do a loop with WaitForFixedUpdate in it, that will essentially make that code inside the loop run at a cadence with FixedUpdate (50 times per second by default.
I did a quick test to make sure by adding counters to FixedUpdate and the Coroutine and lowering the fps with Application.targetFramerate and yes, using yield return new WaitForFixedUpdate() in while loop inside coroutine makes the coroutine run multiple times per frame if fps is low enough, as many times as the fixed update
Iām doing custom animations with the coroutines and the purpose was to essentially do this functionality from the animator: