Francis was the hero for the hosts on the day, contributing 16 points and kicking a penalty at the death to give the visitors their second consecutive loss.
Both the Cheetahs and Stormers started out at a frantic pace but fullback Joe Pietersen's penalty in the ninth minute calmed things down.
The hosts kept playing an attractive brand of rugby with winger Willie le Roux and scrumhalf Piet van Zyl giving the Cheetahs good go ahead ball.
The Stormers looked the better team in the line outs, with veteran Andries Bekker – playing in his 100th Super Rugby game – a big thorn in the Cheetahs side.
The Cheetahs scored the first try of the match in the 20th minute after good attacking play was rounded of by centre Robert Ebersohn in the corner. Francis converted to give the hosts a four point lead.
The Stormers finally got their first five pointer after centre Juan de Jongh capitalised on a good break by hooker Deon Fourie.
Fourie's try inspired the Stormers to another good stanza of play and they stretched their lead to eight points shortly before half-time when De Jongh scored his second of the evening. Pietersen converted just before the interval.
Francis kicked a penalty five minutes after the break to bring the hosts within five points. Shortly thereafter replacement scrumhalf Sarel Pretorius charged down a kick of Nic Groom and ran away to score in the corner and Francis converted.
Pietersen for the Stormers, then kicked a brace of penalties to give his side the lead by four points. Francis answered in kind as the visitors lead was again lessened to just one point.
The last 20 minutes resulted in some aerial ping pong, both the Cheetahs and Stormers kicking away too much possession. Francis kicked a lengthy drop goal in the 66th minute to have the lead change hands once again but the Cheetahs ill-discipline meant that Pietersen kicked another penalty five minutes from full time.
It was then left to Francis to kick the winning penalty in the dying seconds to complete a memorable victory. – Sapa