Andy Butler’s side ended their five-match losing streak at Shrewsbury last time out.
But Charles’s stoppage-time spot-kick registered Rovers’ eighth defeat in 11.
Charles opened the scoring from 12 yards in the first-half before substitute Tyreece John-Jules equalised.
But Charles once again converted from the spot to secure all three points.
On-loan Brentford stopper Ellery Balcombe produced a fine early stop to tip Charles’s long-range effort past the post.
Down the other end, Saturday’s scorers Taylor Richards and Fejiri Okenabirhie combined with the latter firing over the bar when he should have done better.
Rovers goalkeeper Balcombe was at it again when he kept out Adam Phillips’s free-kick.
But Stanley carved up an opening when Balcombe brought down Sean McConville in the box with Charles smashing his spot kick into the back of the net.
Butler’s boys started well after the break.
Richards bullied his way through Stanley’s defence but Jason Lokilo could only fire straight at Toby Savin.
John-Jules made an instant impact as he levelled proceedings with a cool finish just inside the far post.
And he almost turned the game on its head as he forced Savin into an excellent stop.
It was a repeat on the first penalty incident as McConville drew a foul from Balcombe before Charles fired home from the spot.
Accrington: Savin, Rodgers, Nottingham, Barclay, Burgess, Conneely, Butcher, McConville, Phillips, Charles, Bishop. Unused substitutes: Buckley, Uwakwe, Mansell, Morgan, Russell, Smyth, Perritt.
Doncaster: Balcombe, Wright, Butler, Anderson, James, Bostock (Robertson, 71), Smith, Coppinger (Williams, 81), Richards, Lokilo (John-Jules 63), Okenabirhie. Unused substitutes: Jones, Greaves, Horton, John.
Referee: A Backhouse (Cumbria).
Support The Yorkshire Post and become a subscriber today. Your subscription will help us to continue to bring quality news to the people of Yorkshire. In return, you’ll see fewer ads on site, get free access to our app and receive exclusive members-only offers. Click HERE to subscribe.