Jeff Skinner has scored his 100th career goal, and Zach Boychuk and Justin Faulk have goals as the Canes have taken a 3-1 lead over the Flames after two periods.
Zach Boychuk burst of speed and hustle late in the first period resulted in a goal and a 1-1 tie.
Boychuk took a pass from Justin Faulk and sped up the left wing. With defenseman Dennis Wideman hounding him all the way, Boychuk was able to get off a shot, the puck glancing off the mask of Flames goalie Jonas Hiller and into the net at 17:30 of the first.
The Flames had taken a 1-0 lead with a power-play goal from David Jones at 13:07 of the first. After the Canes' Alex Semin was whistled for tripping T.J. Brodie, Jones knocked a short shot past Canes goalie Cam Ward after a pass from Curtis Glencross.
Sign Up and Save
Get six months of free digital access to The News & Observer
In the second, Semin drew a penalty and the Canes needed four seconds to score on their first power play of the game. Riley Nash won the faceoff and Faulk -- who assisted on the other two scores -- quickly drilled a shot.
With Canes coach Bill Peters juggling lines, Skinner and Semin were on Jay McClement's line in the second period. Semin's backhand pass from the right circle found Skinner skating in an unchecked and he blasted a shot past Hiller at 12:15.
Flames defenseman Mark Giordano, named the NHL's first star of the week on Monday, picked up an assist on Jones' power-play score. Giordano has a seven-game point streak and leads NHL defensemen with 19 points.
Boychuk was flying most of the first. Soon after his third goal of the season, he got a stick on the puck to get it out of the Carolina zone, then blazed down ice to pursue it.
The Canes managed just five shots in the first against the active Flames, who got a lot of sticks on pucks and cut off shooting angles.
On the Canes goal, McClement won a face-off in the defensive zone. Andrej Sekera passed to Faulk, who found Boychuk open in the neutral zone.
Hiller shut out the Canes 5-0 last month in Calgary and had a scoreless skein of 94:20 against Carolina dating to a February 2012 game when he was playing for the Anaheim Ducks.