David Freese went 3 for 4 with a homer and three RBIs and Kyle Lohse allowed one run in eight innings to help the St. Louis Cardinals snap a three-game losing streak with a 6-1 victory over the San Francisco Giants on Sunday.