Can you try to remove the Serial.println() from void tx_lora_periodic_handler(void) and try?
void tx_lora_periodic_handler(void)
{
appTimer.attach(tx_lora_periodic_handler, (std::chrono::microseconds)(LORAWAN_APP_INTERVAL * 1000));
// Serial.println("Sending frame now...");
// This is a timer interrupt, do not do lengthy things here. Signal the loop() instead
send_now = true;
}
Seems the use of Serial in the timer interrupt is causing the problem.