David Freese collected three hits, including a solo homer, drove in two runs and scored three times for St. Louis. David Descalso went 3-for-4 with an RBI for the Cards, who banged out 17 hits in the victory.
Lance Lynn (9-1), who drove in a pair of runs with a fifth-inning single, earned the victory despite coughing up seven runs on nine hits over five innings. He walked three and struck out six in stretching his unbeaten streak to seven starts.
Marlins starter Tom Koehler (0-5) was roughed up for nine runs on eight hits over 4 2/3 frames.
Giancarlo Stanton socked a two-run homer while Rod Brantly went 2-for-3 with three RBI for Miami.