The Cardinals have won four out of six and moved into a tie with Pittsburgh for second place in the National League Central.
Freese gave St. Louis a 2-1 lead with his two-run homer in the fourth and Craig hit a solo shot in the fifth.
Adam Wainwright (11-10) gave up two runs on five hits in six innings to win his fourth consecutive decision.
Three St. Louis relievers combined to retire all nine men they faced, with Jason Motte earning his 27th save.
Jessica Simpson shares three-way kiss with friends in photo
Interpol investigating stolen passports on missing flight