The majority of the race was led by Argentina winner Marco Bezzecchi, who was able to quickly retake the lead on the two occasions he went wide and allowed Fabio Di Giannantonio through.
Continuing to stretch his advantage, Martin eventually won by 1.4s.
Enea Bastianini (Leopard) took second after a late-race charge, which left Bezzecchi and Di Giannantonio to battle it out for the final podium spot.
Moto3 veteran Philipp Oettl (Schedl) took sixth, followed by PrustelGP rider Jakub Kornfeil.
Aron Canet (Estrella Galicia) was with the leaders early on but gradually lost ground during the race and had to settle for eighth. As a result, he conceded the championship lead to Martin by seven points.
The top 10 was completed by Tatsuki Suzuki (SIC58 Squadra Corse) and Livio Loi (Avintia Academy).
Gabriel Rodrigo, Adam Norrodin, Kaito Toba, Jaume Masia and Marcos Ramirez all fell at the first corner of the race in a melee triggered by Rodrigo losing the front.
All of them managed to continue, but Ramirez, Toba and Norrodin eventually retired in the pits.
Nicolo Bulega and Niccolo Antonelli also had crashes, the former retiring at Turn 13 and the latter hitting the back of Alonso Lopez on the opening lap.
(David Gruz) MHI