Совету в целом помогли. Уменьшил частоту тактирования АЦП, раздул буфер в сотню раз и время прерываний стало десятки секунд, что позволило оценить ситуацию.
Дело было вот в чем. Я искренне верил, что на брэйкпоинте останавливается тактирование всего и вся, в том числе переферии. Но это оказалось не так. После остановки DMA продолжает работать и заполняет буфер данными. В итоге я вижу полный буфер одинаковых данных и сразу два флага о прерываниях (половинный и полный).
По поводу прерывания на половине, то оно есть и Куб по умолчанию его включает, правда я не нашел как его можно отключить в Кубе, но мне это и не надо.
Благодарю за советы. Иногда нужно получить хоть какое-то направление, чтоб сдвинуться с мертвой точки.
Разобрался.
IAR никак не контролирует правильность установки значений глубины стека данных (CStack) и стека возврата (RStack). Сгенерировал map файл, в котором есть статистика по используемым стекам, увеличил размеры до соответствующих значений и программа стала работать корректно.
Спасибо за наводку.