Financial terms of the contract were not announced.
"I'm happy. This wasn't about the money. More than anything, it was about winning and the security," Gresham told ESPN's Josina Anderson.
Gresham, 28, returned to the Cardinals last season after spurning a multiyear offer for more money to chase a title. He instead opted to play another year with quarterback Carson Palmer, whom Gresham teamed with in Cincinnati in 2010.
He finished last season with 37 catches for 391 yards and two touchdowns while starting 14 games and playing in all 16. It was a significant increase from his first year with the Cardinals in 2015, when Gresham had 223 yards, but a far cry from his career high of 737 in 2012 with Cincinnati.
While Gresham's role increased last season, he ranked second on the team with nine penalties. He received two taunting penalties in the final three weeks.
The 6-foot-5, 260-pound Gresham is a two-time Pro Bowl selection who spent five seasons with the Bengals after being drafted 21st overall out of Oklahoma in 2010. He has 335 receptions for 3,336 yards and 27 touchdowns in 105 games.
ESPN's Josh Weinfuss contributed to this report.