Can IEnumerator be called more than once?

I have an Enemy script setup that chases a player with a chase range of 4. I then coded it to make the enemy be more aggressive if attacked, this would double the chase range. Next I coded for the enemy to wait 15 seconds and then reset to chase range of 4. My issues is that the reset only works the first time. If I go attack them again then run they IEnumerator does not run a second time to reset the chase distance/remove the aggressive tag. This is my first time using IEnumerator code, can anyone help me out?

void Start()
{
    startPosition = transform.position;
    StartCoroutine(CoUpdate());
    dchaseRange = 4;
}

  void Update()
    {
        float playerDist = Vector2.Distance(transform.position, player.transform.position);

        if(playerDist <= attackRange)
        {
            // attack the player
            if(Time.time - lastAttackTime >= attackRate)
                Attack();


            rig.velocity = Vector2.zero;
        }

        else if(playerDist <= chaseRange)
        {
            // Chase player
            Chase();
        }
        
        else
        {
            rig.velocity = Vector2.zero;
            transform.position = Vector3.MoveTowards(transform.position, startPosition, moveSpeed * Time.deltaTime);
            if(aggressive == true)
            {    
                CoUpdate();
            }    
        }
    }

    IEnumerator CoUpdate()
    {
        if(chaseRange > dchaseRange)
        {
            yield return new WaitForSeconds(15f);
            chaseRange = dchaseRange;
            aggressive = false;
        }
    }

    void Chase ()
    {
        Vector2 dir = (player.transform.position - transform.position).normalized;
        
        rig.velocity = dir * moveSpeed;
    }

    
    public void TakeDamage (int damageTaken)
    {
        curHp -= damageTaken;
        aggressive = true;
        Agro();
        if(curHp <= 0)
            Die();
    }
    
    void Agro()
    {
        if(chaseRange == dchaseRange)
            chaseRange *= 2;
    } 

    void Die ()
    {
        // Give player xp
        player.AddXp(xpToGive);
        Destroy(gameObject);
    }

have a private Coroutine myRoutine or whatever, and if you want to call the routine again do something like

if (myRoutine != null) StopCoroutine(myRoutine);
myRoutine = StartCoroutine(WhateverRoutine());

the myRoutine variable will let you check on the status of the coroutine and stop it whenever you want.