Ответы пользователя по тегу STM
  • Как обрабатывать прерывания в STM8 не используя SPL?

    @sheromyan Автор вопроса
    Нашел сам. В STVD создается вектор прерываний. В main.c записываем функцию:
    \@far \@interrupt IRQ_Handler_TIM4(void)
    {
    /*тут располагается код*/
    return;
    }
    после чего записываем ее в main.h, а также не забываем вписать файл main.h в файл вектора прерываний и вписать обработчик в сам вектор (для TIM4 на STM8S003 это 23 прерывание). Также не забываем разрешить прерывания ассемблерной командой RIM (_asm("RIM\n");) Всё, оно работает, при соблюдении условий, которые вы указали при настройке таймера.
    Возможные грабли:
    1. Правильно настроили таймер, включили прерывания, всё скомпилировалось, но прерывание не наступает. Решение: забыли подать тактирование на таймер (есть такой фетиш у ST).
    2. Не включено прерывание по событию. Решение: настройте таймер согласно Reference manual на нужный чип.
    На самом деле граблей много, главное - внимательно изучать Reference manual, особенно описание регистров.
    В чём плюс отказа от SPL: всегда знаешь как это работает, ускоряется выполнение программы (меньше вызовов функций) и уменьшается размер прошивки (меньше лишнего кода)(в частности размер прошивки уменьшился с 3 килобайт до 800 байт при том же функционале).
    Ответ написан