St. Louis trailed 5-4 entering the eighth but erupted for four runs to grab control of the game.
With the bases loaded, pinch-hitter Matt Adams grounded a pitch from Brandon Kintzler (3-1) into right field, scoring Kolten Wong with the tying run.
Carpenter then delivered the key blow, chasing home David Descalso with a ground single to left, and David Freese capped the outburst with a two-run double off Bruce Badenhop.
Yadier Molina went 4-for-5 with an RBI, Jon Jay stroked a two-run homer and Carlos Beltran provided three hits, including a bases-empty homer, as second-place St. Louis kept the pressure on National League Central-leading Pittsburgh.
The Cardinals trailed the Pirates by one game coming into the contest.
Michael Wacha (2-0) earned the decision despite blowing a save in the sixth and Edward Mujica picked up his 32nd save for St. Louis.
Aaron Carter is still in love with Hilary Duff
Boston schools pull out free condoms over wrapping complaints