Стек (Stack) в переводе "палка". В применении к аппаратно-программной части микроконтроллеров это линейная часть ОЗУ, выделенная для хранения данных по принципу LIFO (Last In - First Out) Последним Вошел - Первым Вышел. Стек нужен для организации работы прерываний и подпрограмм/функций. В стеке могут хранится, как уже указал Alex B._, адреса возврата из функции/прерывания, данные для передачи параметров в/из функцию, буфер(а) для локальных переменных. Прерывания используют стек на аппаратном уровне как минимум для записи текущего адреса выполняемой программы (некоторые сохраняют в стек еще и слово состояния АЛУ ядра МК и пр.), чтобы после обработки прерывания, можно было вернуться и продолжить ее выполнение. Поэтому. если вы заранее не установили указатель стека на свободную часть ОЗУ, то при вызове прерываний последовательность выполнения программы может быть нарушена. В отличие от счетчика команд, который работает с автоинкрементом, то указатель стека работает с автодекрементом. Поэтому указателю стека обычно присваивают значение адреса не начала, а конца ОЗУ. Напротив, глобальные переменные и "куча", используемые в Си, располагаются с начала ОЗУ. Поэтому эти две области данных "растут" навстречу друг другу. Переполнение стека, при котором содержимое стека "наползает" на область глобальных переменных и/или "кучи", это одна из самых типичных и в то же время весьма трудно обнаруживаемая ошибка, возникающих при программировании МК.
Есть еще другие понятия стека, например, "стек протоколов". За разъяснениями можно обратиться к
Википедии, например.