Heyward's solo shot in the second inning handed Atlanta a 2-0 lead, but the Cardinals battled back with two runs in the fifth to tie the score.
The Braves grabbed the lead for good in the next inning, scoring twice with two outs.
Chris Johnson (3-for-4, three runs scored) singled, chasing Cards starter Shelby Miller. Seth Maness entered and surrendered a run-scoring single to pinch-hitter Joey Terdoslavich, giving the Braves the lead.
Kevin Siegrist took the mound and Heyward greeted him with another RBI single as the National League East-leading Braves went on to down their NL Central counterparts for a third straight game.
Andrelton Simmons went 2-for-4 with an RBI for the winners.
Kris Medlen (7-10) earned the decision, surrendering two runs on eight hits through six innings. He walked one and struck out four.
Luis Avilan and Jordan Walden each pitched an inning of scoreless relief and Craig Kimbrel finished with his 31st save.
Miller (10-7) coughed up three runs (two earned) on six hits over 5 2/3 innings and went 2-for-2 with an RBI double for St. Louis, which retained a 1 1/2-game over second-place Pittsburgh.