建文二年四月,李景隆引军进逼河间,与郭英、吴杰、平安会师于白沟河。大军驻扎在河边与燕军相持。此时,一阵龙卷风刮过,吹折了李景隆的帅旗。朱棣下令乘风放火,在李景隆军忙于救火之际,燕军发起了进攻。李景隆军中混乱,无法组织防御,被燕军乘乱斩杀数万,其余掉进河里淹死的也有十余万人。都督瞿能、越巂侯俞渊、指挥滕聚等全部死于此役,李景隆向南而逃,退守德州。
五月,燕军进攻德州,李景隆再败,又逃往济南。燕军随即集中兵力进攻济南,李景隆军在城下列阵,又被击败。燕军进攻济南城,铁铉、盛庸坚守不出,燕军死伤惨重,不克而还。
九月,朱允炆下令撤换李景隆,任命盛庸为平燕将军,代替李景隆为将。盛庸能力比起李景隆还是略胜了好几筹的,至少拥有优势兵力的情况下不会昏招迭出,他上任后,组织攻势,又夺回了德州。盛庸分兵四部,与吴杰、平安、徐凯互为掎角,以围困北平城。
燕军出战,与盛庸会战于东昌,盛庸用火器和强弓劲弩远程射击燕军,燕军全军溃散。此后,平安率军赶到,与盛庸合围燕军。朱棣大败而逃,拼命突围,仅以身免。此战燕军阵亡数万人,连主帅张玉都战死了。过了几天,再次会战,又击败了燕军。朱棣引残兵,败退到馆陶。盛庸军势大振,发檄文要求天下各地合击燕军,断绝其退路。见战势顺利,朱允炆心情大好,下诏恢复了齐泰、黄子澄的官职。可能是觉得胜利在望,他又下了一道诏令,再次要求诸军见朱棣不许伤他的性命,“毋使朕负杀叔父名”。这当然是迂腐之举,两军阵前若缩手缩脚,又怎么能打得好仗。
此次战役是盛庸代替李景隆后重新发起的攻势,李景隆志大才疏,草包一个,因为指挥失误与勇气不足,造成了明军的大量伤亡。盛庸代替李景隆后,战场形势大见起色,取得非凡的大胜,打破了燕军不可战胜的神话。