The Braves won their fifth in a row in a likely march to the National League East title. Atlanta's magic number for clinching the crown dwindled to 15 with a full month left to play.
Freeman's homer came after Eliot Johnson had reached on one-out double off Jose Fernandez (10-6).
Fernandez allowed just three hits and struck out eight over six innings, but the Marlins could not do enough damage against Teheran and the Atlanta bull pen.
Teheran (11-7) surrendered four hits and struck out eight in 6 1/3 innings to win for the fourth time in six starts. Anthony Varvaro worked the final two innings to claim the first save of his career.
Christian Yelich singled in the lone Miami run in the third. The Marlins have lost five in a row and nine out of 10.