TXE bit won't clear UART ARM M0
When USARTx_TDR register is empty USART_ISR_TXE flag is set to 1.
When USARTx_CR1_TXEIE (TXE Interrupt Enable flag) is enabled and TXE=1 it will pend interrupt.

So you code sample with disabling interrupt after completed transmission is good solution.

When starting transmission periodically just write first byte (it will clear TXE) and enable interrupt.

Or if possible use DMA - a bit more code, but after you calculate strlen and configure it, it is rather fire and forget ;)