The Astros took a 2-0 lead before crumbling under a 16-hit attack -- two of them homers by Freese -- that brought the Cardinals their third win in four games. The recent streak of success has come after St. Louis had lost eight times in 10 games.
Allen Craig's RBI single produced the final score in a three-run third inning that gave the Cardinals the lead and St. Louis then built a 5-2 cushion through six innings, thanks in part to a solo homer by Carlos Beltran.
St. Louis sent 11 men to the plate in the seventh, getting a two-run homer from Shane Robinson before Freese unloaded with his grand slam. Freese added a two-run homer in the ninth, giving him 12 home runs for the season.
Lance Lynn (9-2) coasted to the victory, striking out 11 while giving up two runs through six innings.
The first four St. Louis runs were charged to J.A. Happ (4-6), who allowed five hits and walked five in 4 2/3 innings.