После взятия Великих Лук Великий князь Литовский и король Польский Стефан Баторий решил продолжить наступление на территорию московского княжества.
Несмотря на то, что литовские полководцы советовали королю идти на Смоленск, потому что этот город было легче взять, так как он не имел столь мощных укреплений и численность гарнизона была меньше, Стефан Баторий решил все же идти на Псков. Окончательное решение он принял 29-го июля 1581-го года на тайном совещании с литовскими полководцами в Полоцке. Необходимость взятия Пскова он аргументировал тем, что этот город - ключ к Ливонии.
Войска Стефана Батория насчитывали около 30 000 воинов. Чуть больше половины составляла армия ВКЛ, которой командовал Николай Радзивилл Рыжий, во вторую часть войска входили венгерские и польские полки, а также немецкие, чешские, датские и шотландские наёмники. Армия было хорошо вооружена и состояла из профессиональных воинов. Уверенный в своей победе Стефан Баторий вышел из Полоцка на Псков.
Как только информация дошла до города, горожане, не мешкая, стали готовиться к обороне. На тот момент Псков был сильнейшей твердыней в Московском княжестве, имел хорошо укреплённые каменные стены с башнями и большим количеством пушек, две из них были особо крупные, «Барс» и «Трескотуха». Гарнизон состоял из 7000-ой конницы и от 30000 до 50000 солдат, в том числе и простых горожан, вставших на защиту своего города. Обороной командовали князь Иван Петрович Шуйский и Василий Федорович Скопин-Шуйский.
18-го августа в Пскове стало известно, что Баторий взял Опочку, Остров, Красный, и, кроме того, разбил московский легкий конный отряд. Битва за город обещала быть серьезной и тогда воеводы, приказали сжечь городской посад, чтобы не дать противнику использовать дома в качестве прикрытия. В тот же день с городских башен заметили, что к городу приближаются передовые отряды войска Речи Посполитой.
Основные войска Батория подошли 26-го августа. Король первоначально расположил свой шатер недалеко от стен Пскова в деревне Любатово, но псковские пушкари стреляли метко и поэтому вскоре он приказал перенести его подальше, к реке Черехе.
После осмотра укреплений города Баторий понял, что взять Псков будет очень сложно. Численность оборонявшихся значительно превосходила его войска, к тому же оказалось, что взятого пороха недостаточно. Но и отступать было поздно, Баторий отдал приказ готовиться к осаде.
Посоветовавшись с великим коронным гетманом Яном Замойским, король отдал приказ сосредоточить свою артиллерию напротив южного угла крепостной стены, где находились Великие ворота, Покровская и Свиная башни.
1-го сентября литвины начали осадные работы. Выкопали траншеи к Покровской баше вдоль реки, сделали насыпи и поставили туры (укреплённые башни). 7-го сентября всё было готово и Баторий отдал приказ открыть огонь из пушек. Двадцать осадных орудий громили стену между Покровской и Свиной башней. К утру следующего дня стена была разрушена в нескольких местах.
Днём, 8-го сентября 1581 года, войска Речи Посполитой пошли на штурм Пскова. Поляки, венгры и немцы ринулись в пробитые проёмы, литвины в атаку не пошли и оставались на местах, так как Великий гетман Литовский Николай Радзивилл Рыжий считал, что такие твердыни с наскока не берут, и решил сохранить своих воинов. В итоге он оказался прав. Хоть полякам и венграм удалось захватить Покровскую и Свиную башню, но за разрушенной стеной они наткнулись на ров и деревянную стену, за которой стояли псковские защитники. Псковичи развернули одну из самых крупных пушек «Барс» и выстрелили из неё по Свиной башне, одним выстрелом уничтожив многих осаждающих. Затем, по приказу Шуйского, были взорваны остатки пороха под башней, взрыв окончательно разрушил башню, которая своими обломками убила и ранила немало воинов Батория.
А тем временем, к проломам в стене у Покровской башни вскоре подошли ополченцы во главе с монахами Арсением, Мартирием, и Ионом, которые раньше были опытными военными. Завязался долгий и упорный бой, длившийся около шести часов. Защитникам удалось выбить пехоту Батория, штурм провалился. Войска осаждающей армии потеряли до пяти тысяч человек.
В тот же день огорченный Стефан Баторий, не желая никого видеть, ушёл в свой шатёр, но на следующее утро вышел к войску со спокойным лицом. Он созвал военный совет на котором заявил, что обязательно надо взять Псков, не взирая ни на какие трудности.
Осада продолжалась, но пороха было мало, и за ним Баторий послал отряд в Ригу к герцогу Курляндскому. Пока ждали подвоза пороха, осаждающие копали подкопы к стенам. Но 17-го сентября после одной стычки у городских ворот, псковичи взяли пленника, от которого узнали, что к стенам ведут подкопы, правда о направлении их выведать не удалось. Через три дня удача снова была на стороне защитников, к ним из литовского стана перебежал бывший полоцкий стрелец Игнат, который уже точно указал, в каком направлении ведутся подкопы. 23-го сентября часть этих подкопов была разрушена защитниками, а другая часть вскоре обрушилась сама. План с подкопами себя не оправдал.
Время шло, и на смену теплому сентябрю пришел октябрь и заморозки. Тогда Стефан Баторий решил атаковать город через реку Великая. Пять дней несколько осадных батарей вели огонь по стене, которую им удалось частично разрушить. 2-го ноября пехота Батория снова пошла на штурм, однако псковские защитники за пять дней, пока противник обстреливал стены, успели подтащить к тому месту несколько десятков пушек и замаскировать их до начала сражения. А когда начался штурм, хватило двух залпов из пушек, ручниц и пищалий, что бы заставить атакующих побежать назад через реку и оставить после себя много трупов у стены и на льду.
Тем же днем в Псков смог пробиться стрелецкий голова Федор Мясоедов с многочисленным отрядом. После чего Стефан Баторий приказал прекратить обстрелы и вместо бесполезных штурмов заняться полной блокадой города, чтобы голодом заставить Псков сдаться.
Однако начавшиеся морозы, нехватка провианта, дров и вдобавок дезертирство, не могли обеспечить хорошей и длительной блокады, удача переметнулась на сторону осажденных.
Стефан Баторий понимал, что если будет и дальше продолжать осаду, то потеряет всю свою армию, а Иван Грозный, вместо того, чтобы просить договор о мире, перейдёт в наступление. Поэтому, когда прибыли послы из Москвы с желанной вестью, Баторий с частью войска 1 декабря отправился в Вильно.
Оставшиеся войска под командованием Яна Замойского, простояв до 4-го января под стенами Пскова, сняли осаду и ушли в Ливонию. Однако, несмотря на то, что Стефан Баторий не смог взять Псков, начавшиеся 15-го декабря мирные переговоры между Речью Посполитой и Московским княжеством закончились 6-го января 1582-го года подписанием Ям Запольного перемирия на 10 лет. Что, собственно, и стало окончанием Ливонской войны, длившейся с 1558-го по 1582-й год.