Medlen (2-6) pitched seven solid innings for his first win since April 9, ending a career-worst, five-game skid over his previous nine starts. The right-hander allowed an unearned run and seven hits, lowering his ERA to 3.14.
Pittsburgh catcher Russell Martin and manager Clint Hurdle were ejected by home plate umpire Dan Iassogna in the fourth inning. Martin apparently complained after Iassogna called two balls on pitches from A.J. Burnett to Medlen.
Burnett (3-6) yielded a season-high six runs in five innings. He also allowed eight hits, including three homers, and walked three.
The three homers allowed matched Burnett's career high. He last allowed three homers in a 6-5 loss to Tampa Bay on May 16, 2011.
Pittsburgh scored its only run against Medlen when Gaby Sanchez's ground-rule double in the third drove in Neil Walker, who was hit by a pitch. Walker advanced to second on a throwing error by center fielder B.J. Upton.
McCann connected for his seventh homer in the fourth. Chris Johnson then doubled and was at second when Medlen's two-out at-bat featured a couple of testy exchanges between Iassogna and the Pirates.
Burnett complained about the ball one call to Medlen, and Iassogna stepped in front of the plate to warn the pitcher.
After the second ball was called, Martin apparently complained as he took a couple of steps toward the mound with his back to the umpire. Martin quickly was ejected by Iassogna, and the catcher turned to protest. Hurdle charged from the dugout to take over the argument and also was thrown out.
Michael McKenry replaced Martin behind the plate.
Heyward and Freeman hit homers in a string of fourth straight hits off Burnett to open the fifth.
Justin Upton singled off Mike Zagurski in the seventh, moved to third on McCann's single and scored on Johnson's fly ball to left field. The single was McCann's 1,000th career hit.
Fans responded to the announcement of the milestone with an ovation for McCann, who tipped his helmet while standing on first base.
The Pirates recalled right-hander Jared Hughes and selected the contract of right-hander Ryan Reid from Triple-A Indianapolis before the game.
Hughes gave up one hit in a scoreless sixth inning. Reid made his major league debut when he induced a bases-loaded grounder from pinch hitter Reed Johnson for the final out of the seventh. Reid also pitched a perfect eighth.
Clint Barmes' double with two outs in the ninth off Braves rookie Alex Wood drove in Gaby Sanchez, who led off with a single.