ATLANTA -- Gavin Floyd was impressive in his first start in a year, giving the Braves a chance to end their longest losing streak in two years.
''That felt good,'' Johnson said. ''It's big. We weren't panicking too much. We were relaxed, even though we lost seven in a row.''
Floyd allowed one run on six hits in seven innings.
He 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.
''It felt good,'' Floyd said. ''There were a lot of emotions, a lot of excitement through this process leading up to it and getting back out there ... not only starting for the first time but trying to get us back on the winning side.''
Braves manager Fredi Gonzalez had modest expectations for Floyd's return.
''I didn't expect that really,'' Gonzalez said. ''I expected a guy who was going to scuffle through five, six innings for the first time out. He hadn't been in competition in a year but he sure came out with flying colors. You couldn't ask for anything more.
''He was really, really good for the first time in a year.''
With one out in the eighth, 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.
Johnson called the at-bat against Neshek's side-arm delivery ''a grind.''
''It wasn't easy,'' Johnson said. ''That guy is funky. He's nasty. ... That was just a battle between me and him and me trying to get something in play. I was able to finally stay on the ball and kind of go the other way a little bit.''
Choate was left to bemoan Freeman's shot that hit his leg, setting up Johnson's run-scoring hit.
''If it misses me it's a groundball to (shortstop) Jhonny (Peralta), probably a double play,'' Choate said.
''I didn't feel it. I didn't even see it. It just somehow found me and ricochets off me. That's the way it bounces sometimes and it stinks but what are you going to do?''
St. Louis left-hander Tyler Lyons allowed only one run on four hits, including Upton's homer, in six innings.
''Great start,'' said Cardinals manager Mike Matheny. ''It's a shame we haven't been able to score that guy any runs. ... He had everything working today.''
Lyons retired the first 10 Braves before Upton snapped a 0-for-12 streak with his team-leading ninth homer in the fourth.
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.
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.
Atlanta's last win was a 1-0 decision in 10 innings over the Reds on April 27. ... The losing streak was the Braves' longest since eight straight losses from May 21-28, 2012. ... 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.