Braves right-hander Gavin Floyd was impressive in his season debut, allowing one run on six hits in seven innings.
Floyd made his first major league start since April 27, 2013, for the White Sox against Tampa Bay. He had season-ending Tommy John surgery 10 days later, and his comeback included six minor league rehab starts this year.
St. Louis left-hander Tyler Lyons allowed only one run on four hits, including Upton's homer, in six innings.
With one out in the eighth, Justin Upton singled to center. Freddie Freeman followed with a liner that bounced off the leg of Randy Choate (0-1) and bounced to third baseman Matt Carpenter for an infield hit.
Right-hander Pat Neshek gave up Johnson's single to right field that drove in Upton and allowed Freeman to advance to third. The Braves had to settle for one run when Gerald Laird struck out on a botched suicide squeeze and Freeman was out on a rundown.
Lyons retired the first 10 Braves before Upton snapped a 0-for-12 streak with his team-leading ninth homer in the fourth. Upton's drive deep into the seats in left-center gave the Braves their first lead in almost a week. They took a 4-3 edge in the sixth inning of Thursday's 5-4 loss at Miami.
The Cardinals tied it in the sixth. Matt Holliday's single to right-center drove in Carpenter, who led off with a walk.
Floyd made the start originally planned for Ervin Santana, whose spot was skipped due to his swollen right thumb. Santana is listed as the probable starter against the Cubs on Saturday.
Braves manager Fredi Gonzalez stayed with the structure of the revamped lineup he unveiled on Monday in an attempt to snap the losing streak and hitting slump. For the second straight game, shortstop Andrelton Simmons hit ninth, one spot behind the pitcher. After sitting out Monday's game, Dan Uggla returned as the starting second baseman and hit seventh, and Justin Upton again hit second.
"I don't want to go back to the normal, traditional lineup," Gonzalez said. "If we're going to make this commitment and make this radical change, let's stay with it and see what happens."
Atlanta's last win was a 1-0 decision in 10 innings over the Reds on April 27. ... The Braves' last eight-game losing streak was May 21-28, 2012. ... Cardinals manager Mike Matheny said 2B Mark Ellis was held out for a normal day of rest. Daniel Descalso filled in. ... The series ends on Wednesday night when Braves LHP Mike Minor looks for his first win of 2014 against Cardinals ace Adam Wainwright. ... A scoring change gave Floyd an infield single on his grounder in the fifth originally ruled as an error on Carpenter.
Copyright by STATS LLC and The Associated Press
ATLANTA, GA - MAY 6: Tyler Lyons #70 of the St. Louis Cardinals throws a 2nd inning pitch against the Atlanta...