Nato come velocista su strada, da dilettante arrivò a conquistare la maglia tricolore nel 1973 succedendo a Francesco Moser. Divenuto professionista l'anno successivo, non riuscì ad affermarsi e non colse nessuna vittoria su strada, pur prendendo parte per sette volte al Giro d'Italia.
Nel 1977 partecipò al suo primo campionato del mondo di mezzofondo, vincendo l'anno successivo il suo primo (di sei totali) campionato italiano della specialità. La prima maglia iridata arrivò invece nel 1983, dopo averla sfiorata nei tre anni precedenti con piazzamenti sul podio mondiale. Si laureò campione del mondo fra gli stayer anche nel 1985 e nel 1986, stabilendo il record del mondo sull'ora e sui 100 km a Bassano del Grappa l'11 luglio 1986. In carriera disputò inoltre numerose Sei giorni.
Ritiratosi dalle corse nel 1987, dal 1993 al 2004 è stato quindi nello staff tecnico, come direttore sportivo aggiunto, della Mercatone Uno/Saeco. Dal 2005 lavora quindi per la Lampre, formazione nata proprio nel 2005 dalla fusione tra la Saeco e la vecchia Lampre, e nota a partire dal 2017 come UAE Emirates.