ST. LOUIS -- David Freese had a good session during batting practice before Thursday night's game. The work paid off when it counted.
"I had the best BP I've had in a while," Freese said. "It's about trying not to do too much. Sometimes you get in the box and you want to be Superman and that isn't going to help you out. You stay with your plan and try to execute."
Freese has seven hits in his past four games.
Matt Adams had a two-run single for St. Louis, which had scored one run in three straight games coming in and no more than two in each of the last five.
Cardinals starter Jake Westbrook (5-6) retired the first 12 batters on 41 pitches before giving up a leadoff single in the fifth inning to Paul Konerko, who leads the American League with a .364 average. Westbrook threw only 67 pitches in six innings, allowing five hits and three runs.
The win snapped a slump for Westbrook, who had gone 0-4 with a 7.55 ERA in his previous six outings since winning May 8 at Arizona.
Westbrook also broke his skid against Chicago. He was 0-5 with a 5.87 ERA in his previous eight starts against the White Sox since beating them Aug. 7, 2007, when he was with Cleveland. He had not faced Chicago since 2010.
"It's always my game plan to keep the ball down," said Westbrook, who got nine groundball outs in the first four innings. "I did that early tonight. The bullpen came in and did a good job. The offense showed up tonight. Adams got a huge hit. It was a good win for us."
Jason Motte pitched the ninth for his 13th save.
White Sox starter Gavin Floyd (4-7) is 1-4 with a 10.38 ERA in his last six starts. Floyd, who is 0-5 in his last eight interleague starts, allowed five runs in 4 2/3 innings, hiking his ERA to 5.63.
"I'm just going to go out there and keep on fighting, keep on battling cause I know this is going to turn around," Floyd said.
Freese gave the Cardinals a 1-0 lead with a double in the second inning. He made it 3-0 with a two-out, two-run homer to center field in the third.
"He had a good night for us -- even his outs were hard," St. Louis manager Mike Matheny said. "He had the right approach. You could tell in batting practice that he found something today. He translated that into the game. This is where he needs to be."
After striking out twice, Adams drove in two runs when he singled on a full-count pitch with the bases loaded. That gave St. Louis a 5-0 lead in the fifth inning.
"I was just pressing a lot the first two, trying to do too much instead of just relaxing," Adams said. "I just told myself to relax and see the ball the best I can. I took the first two couple pitches that third at-bat and finally got locked in. It felt good off the bat. But the center fielder (Alejandro De Aza) is fast and I thought maybe he would catch it but I saw it drop and it felt good."
In the sixth, with two on and two outs, Dunn slammed the first pitch from Westbrook over the center field fence. Dunn, who has 50 RBIs, was back in the starting lineup after being scratched Wednesday because of a mild ankle sprain. He has four home runs and 11 RBIs in his last six games.
St. Louis shortstop Rafael Furcal snapped an 0-for-23 skid with a single in the eighth.
Chicago has lost three consecutive series.
"You want to win games and all that, but all you can ask is the way they're playing, and they're playing hard," White Sox manager Robin Ventura said. "You're not going to win every game. You're not going to win every series."
Chicago's Alex Rios was ejected in the dugout in the ninth inning after flying out to center. He had a checked swing reversed to a strike in his at-bat by first base umpire Jeff Nelson. Ventura said about Nelson: "He's got good eyes and ears." ... St. Louis RF Carlos Beltran did not play because of a stomach virus. After the game, Beltran said he "was feeling much better and would play tomorrow night." ... Michael Wacha, the Cardinals top pick in this year's draft, signed his contract Thursday and visited Busch Stadium with his parents. Wacha, 20, recently completed his junior year at Texas A&M. ... Chicago fell to 21-6 in its last 27 interleague road games. ... the White Sox lost their first interleague road series after winning their last 11 away from home.