My public enum isn't functioning like I want it to

So in the code below, the state START will wait the 3 seconds until transitioning into PTURN, after that I have a button in Unity that corresponds to the Attack function at the bottom, when this button is pressed t transitions to PATTACK but only for a frame and then reverts back to PTURN, even after the 2 seconds have passed it transitions to ETURN but PTURN is still active. My main question is what makes the transition from START to PTURN any different from the transition from PTURN to PATTACK and then ETURN?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TBCController : MonoBehaviour {

    public enum BattleStates
    {
        START,
        PTURN,
        PATTACK,
        PSKILL,
        ETURN,
        DIE,
        WIN
    }

    private BattleStates CurrentState;
    public GameObject CombatUI;

	void Start ()
    {
        CombatUI.SetActive(false);          //Starts with a cutscene or somethin
        CurrentState = BattleStates.START;  //START has a delay for said cutscene
	}
	void Update ()
    {
        Debug.Log(CurrentState);
        switch (CurrentState)
        {
            //Battle sequence 
            case (BattleStates.START):
                StartCoroutine("TransitionFromStart");
                break;
            case (BattleStates.PTURN):
                CombatUI.SetActive(true);       //makes the UI show up
                break;
            case (BattleStates.PATTACK):
                StartCoroutine("TransitionToE");
                break;
            case (BattleStates.PSKILL):
                StartCoroutine("TransitionToE");
                break;
            case (BattleStates.ETURN):
                break;
            case (BattleStates.DIE):
                break;
            case (BattleStates.WIN):
                break;
        }  
    }

    IEnumerator TransitionFromStart()
    {
        while (true)
        {
            yield return new WaitForSeconds(3f);
            CurrentState = BattleStates.PTURN;
        }
    }
    IEnumerator TransitionToE()
    {
        while (true)
        {
            yield return new WaitForSeconds(2f);
            CurrentState = BattleStates.ETURN;
        }
    }

    public void Attack()
    {
        if(CurrentState == BattleStates.PTURN)
        {
            CurrentState = BattleStates.PATTACK;
        }
    }
    public void Skill()
    {
        if (CurrentState == BattleStates.PTURN)
        {
            CurrentState = BattleStates.PSKILL;
        }
    }
}

personally I don’t use Coroutines, I’m more of an int guy, lol. So I control my Application.TargetFrameRate = 60; and know that there are 60 frames per second, and set my code up via the calculations. So I can easily Debug.Log what I need and where, and make sure each frame is doing what it should be doing when it should be doing it. You can still debug that, but you’re gonna be scrolling a lot. But I suggest you Debug :) other than that, you can read up on these hieroglyphics Unity - Manual: Coroutines