A man who police said shot a Ballwin police officer Friday morning during a traffic stop has been charged.

The shooting happened just after 11 a.m. in the 300 block of New Ballwin.

Officials said the officer with the Ballwin Police Department had pulled over a Ford Taurus for a speeding violation. When the officer was walking back to his police car, the suspect exited his vehicle and shot the officer from behind.

Police said three shots were fired, and the officer was struck at least one time.

The suspect, 31-year-old Antonio Taylor, has been charged with assault on an officer, armed criminal action and a felon in possession of a firearm, charging documents said. He is being held on a $500,000, cash-only bond. St. Louis County police have not provided a mug shot at this time.

Documents show Taylor is a resident of the 1200 block of Tower Grove in St. Louis. Officers said in an earlier press conference that Taylor has been on parole since March 2015 for a criminal history that includes a stolen vehicle and a weapons violation.

The entire incident was captured on the officer's dash cam.

The officer was taken to Mercy Hospital in Creve Coeur, where he is listed in critical but stable condition.

Taylor was taken into custody in the 800 block of Burgundy and a handgun was been recovered.

The St. Louis County Police Department's Bureau of Crimes Against Persons is handling the investigation.

Anyone with any information is asked to call the St. Louis County Police Department at (314) 615-5400.