Усмирение тверского князя сильно озлобило Мамая. Он видел в этом явное ослабление своей власти. Его последний ярлык, данный Михаилу, был игнорирован русскими. С этого времени между Москвой и Ордой началась открытая вражда, но дело долго не доходило до решительного столкновения. Сначала татарские рати в отместку за тверской поход опустошили Нижегородскую и Новосильскую земли. Вслед за тем в 1377 г. татарский царевич Арапша из Мамаевой Орды опять напал на Нижегородскую область. Соединенная суздальская и московская рать по собственной оплошности была разбита на реке Пьяне, а Нижний был взят и разорен. В следующем 1378 г. татары опять сожгли Нижний Новгород. Отсюда Мамай отправил мурзу Бегича с большим войском на Москву. Но Дмитрий узнал о приближении неприятеля, собрал силу и выступил за Оку в Рязанскую землю, где встретился с Бегичем на берегу реки Вожи. 11 августа, к вечеру, произошла битва. Татары переправились через реку и с воплями помчались на русские полки, которые храбро их встретили. С одной стороны ударил на них князь Пронский Даниил, с другой – московский окольничий Тимофей, а сам Дмитрий ударил на них в центре. Татары не выдержали, побросали копья и кинулись бежать за реку, причем множество их утонуло и было перебито.
Известно, что Вожское поражение привело Мамая в неописуемую ярость, и он поклялся не успокоиться до тех пор, пока не отомстит Дмитрию. Но, понимая, что для покорения Руси нужно повторить Батыево нашествие, Мамай начал тщательно готовить новый поход. Кроме множества татар, которые уже собрались под его знамена, он нанял генуэзцев, черкесов, ясов и другие народы. Летом 1380 г. Мамай перенес свой стан за Волгу и стал кочевать в устье Воронежа. Ягайло, князь Литовский, вступил с ним в союз и обещал соединиться с татарами 1 сентября. Узнав об этом, Дмитрий стал немедленно собирать войска, послал за помощью к подручным князьям – Ростовским, Ярославским, Белозерским. Из всех русских князей не соединился с ним один Олег Рязанский, который из страха за свою область поспешил вступить в союз с Мамаем.
Дмитрий назначил своим полкам сбор в Коломне к 15 августа, а вперед в степь отправил сторожей, чтоб те извещали его о движении Мамая. Перед выступлением из Москвы Дмитрий отправился в Троицкий монастырь к преподобному Сергию Радонежскому. Сергий благословил Дмитрия на войну, обещая победу, хотя и с сильным кровопролитием.
От Сергия Дмитрий поехал в Коломну, где собралась уже невиданная на Руси рать – 150 000 человек. Весть о сильном вооружении московского князя, должно быть, достигла Мамая, и он попытался было сначала кончить дело миром. Послы его явились в Коломну с требованием дани, какую великие князья посылали при Узбеке и Джанибеке, но Дмитрий отвергнул это требование, соглашаясь платить только такую дань, какая была определена между ним и Мамаем в последнее их свидание в Орде.
20 августа Дмитрий выступил из Коломны и, пройдя границы своего княжества, стал на Оке при устье Лопастны, осведомляясь о неприятельских передвижениях. Здесь с ним соединился двоюродный брат, Владимир Андреевич Серпуховской, подошли последние московские полки. Тогда, видя все силы в сборе, Дмитрий велел переправляться через Оку. 6 сентября войско достигло Дона. Здесь князья устроили совет, и мнения разделились. Одни говорили: «Ступай, князь, за Дон!» Другие возражали: «Не ходи, потому что врагов много, не одни татары, но и литва и рязанцы». Дмитрий согласился с мнением первых и велел мостить мосты и искать броды. В ночь на 7 сентября войско начало переправляться за Дон. Утром 8 сентября был густой туман, и когда в третьем часу просветлело, то русские полки строились уже за Доном, при устье Непрядвы. Часу в двенадцатом стали показываться татары; они спускались с холма на широкое Куликово поле. Русские также сошли с холма, и сторожевые полки начали битву. Сам Дмитрий с дружиной выехал вперед и, побившись немного, вернулся к основным силам устраивать полки. В первом часу началась решительная битва. Такой битвы не бывало на Руси прежде: говорят, что кровь лилась, как вода, на пространстве десяти верст, лошади не могли ступать по трупам, ратники гибли под конскими копытами, задыхались от тесноты. Пешая русская рать уже лежала как скошенное сено, но исход боя решил Владимир Андреевич, ударивший из засады с конным полком в тыл татарам.