В структуре STM32Cube TIM5_IRQHandler()
вызывает HAL_TIM_IRQHandler()
, который вызывает HAL_TIM_PeriodElapsedCallback()
(среди ряда других обратных вызовов событий).
HAL_TIM_PeriodElapsedCallback()
имеет "слабую связь", что означает отсутствие действий По умолчанию определено, что вы можете переопределить, определив свою собственную реализацию.
Недостаток использования HAL таким образом заключается в том, что он добавляет накладные расходы к обработчику прерываний и потому что один и тот же HAL_TIM_PeriodElapsedCallback()
вызывается для всех таймеров, дополнительный код необходим для определения того, какой таймер вызвал обратный вызов, если вам нужно обрабатывать более одного таймера. Когда такие таймеры предназначены для совершенно разных целей, это может привести к плохой конструкции с точки зрения низкой связи / высокой когезии.
Там, где абсолютная детерминированность c поведение и минимальное время прерывания являются критическими, вы Возможно, вы захотите избежать этой «встроенной для комфорта» инфраструктуры и обработать прерывание таймера напрямую. Как правило, это также приведет к лучшему дизайну (более низкая связь / большая когезия).
Если вы широко используете платформы и промежуточное ПО STM32Cube и CMSIS, то обход HAL может вызвать проблемы при использовании этой кодовой базы, однако .