Miles Mikolas (7-1) continued his hot start in the steamy conditions on Thursday, allowing an unearned run in seven innings to lead St. Louis past the Miami Marlins 4-1. He struck out five and walked one, lowering his ERA to 2.27, as the Cardinals salvaged the series finale after a pair of losses.
Mikolas, coming off a 4-0 loss to Pittsburgh, has pitched at least six innings in 10 of 12 starts this season.
Jordan Hicks pitched around a walk and a hit in the eighth, topping 100 mph on nine of 18 pitches, and Bud Norris finished the four-hitter with a perfect ninth for his 12th save in 13 chances.
Jose Martinez hit a two-run homer in the first, giving him a team-high 35 RBIs.
Luke Voit added a pinch-hit homer leading off the seventh to push the lead to 4-1.
Trevor Richards (0-3), who grew up in Aviston, Illinois, 50 miles from St. Louis, gave up three runs on seven hits in five-plus innings.
Mikolas, who improved to 4-0 in day games, retired 14 successive batters before right fielder Dexter Fowler dropped Starlin Castro's fly ball in the sixth.
Mikolas signed with the Cardinals as a free agent on Dec. 5, 2017, after three seasons with the Yomiuri Giants of the Japanese Central League.
Justin Bour cut the lead with an opposite-field RBI double in the sixth after Fowler's error.
Marcell Ozuna hit an RBI single in the bottom of the sixth.
Richards was making his first appearance at Busch Stadium since pitching in a high school all-star game in 2011.
The Cardinals lost the first two games of the series by a combined 18-7.