Tiled Neomatrix on different pins - only first defined works

I tried adding a Serial.end() in the setup and then again in the loop after printing numLEDs in the setup, but they didn't light up. Serial seems to kill the ability to light the LEDs. This makes no sense to me. Here's the Serial.end() in the setup:

#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>

#define matrixWidth 16
#define matrixHeight  16
#define tilesX  2
#define tilesY  1

Adafruit_NeoMatrix matrix2 =  Adafruit_NeoMatrix(matrixWidth,matrixHeight, tilesX, tilesY, 4,  
  NEO_MATRIX_TOP   + NEO_MATRIX_RIGHT   + NEO_MATRIX_ROWS   + NEO_MATRIX_ZIGZAG +
  NEO_TILE_TOP + NEO_TILE_RIGHT + NEO_TILE_ROWS,
  NEO_GRB + NEO_KHZ800);

Adafruit_NeoMatrix matrix1 =  Adafruit_NeoMatrix(matrixWidth,matrixHeight, tilesX, tilesY, 2,  
  NEO_MATRIX_TOP   + NEO_MATRIX_RIGHT   + NEO_MATRIX_ROWS   + NEO_MATRIX_ZIGZAG +
  NEO_TILE_TOP + NEO_TILE_RIGHT + NEO_TILE_ROWS,
  NEO_GRB + NEO_KHZ800);
  
void setup() {
  
  matrix1.begin();
  matrix1.setTextWrap(false);
  matrix1.setBrightness(5);

  matrix2.begin();
  matrix2.setTextWrap(false);
  matrix2.setBrightness(5);
  
  // Start the serial interface
  Serial.begin(57600);

  uint16_t numLEDs1 = matrix1.numPixels();
  Serial.print("Number of LEDs in matrix1: ");
  Serial.print(numLEDs1);
  
  uint16_t numLEDs2 = matrix2.numPixels();
  Serial.print(" Number of LEDs in matrix2: ");
  Serial.print(numLEDs2);
  Serial.end();
    
}
 
void loop() {
  
  showTop();
  showBottom();

}

void showTop() {
  
  matrix1.fillScreen(matrix1.Color(0,128,0));
  matrix1.show();

}

void showBottom() {
  
  matrix2.fillScreen(matrix2.Color(0,0,128));
  matrix2.show();

}