© PA Photos
Minutes later, the Addicks came close again when Stephens's clever back heel found Ricardo Fuller, who beat his man and forced Jack Butland into a fine low save.
Yann Kermorgant then had a chance deflected wide after a neat move from the Charlton forward line.
The best chance of the game came on 29 minutes when a cross found Lawrie Wilson at the near post, though he could only head wide.
Fuller caused problems again for Birmingham, controlling and turning well to create space for a shot that went just wide of the far post.
Birmingham improved their performance early on in the second half and came close through two efforts from Rob Hall.
Marlon King was then played in on goal, but his finish was over the bar after some good pressure from the Charlton defence.
Charlton began to create chances once again and almost took the lead through a Curtis Davies own goal, but Butland was on hand to save.
There was then a huge goalmouth scramble in the Birmingham area, which ended with Butland saving well from a Scott Wagstaff effort.
Butland kept Wagstaff out for a second time soon after, getting down low to push the ball away with a strong hand.
Kermorgant then grabbed a late goal for Charlton, heading home a cross after 88 minutes to secure all three points.
Wade Elliott secured a point for Birmingham with a dramatic injury-time equaliser, turning a low cross into the back of the net.