Одна микросекунда неоправданно быстро для прерывания SYSTICK, особенно при работе на частоте всего 16 МГц. Вероятно, ваша система тратит почти 100% своего времени на подсчет тиков обработчика прерываний.
Даже если она может поддерживать частоту прерываний 1 МГц, если Delay_MS(5000)
- это задержка в 5000 периодов SYSTICK, тогда вы будет переключать светодиод и 100 Гц и не будет воспринимать мигание, только более тусклое освещение. *
SysTick_Init( 16000000 / 1000 ) ;
Хотя я бы предложил на самом деле:
SysTick_Init( SystemCoreClock / 1000 ) ;
, чтобы ваш код адаптировался к изменениям тактовой частоты - поскольку 16 МГц - довольно скромная скорость для запуска STM32.
Также возможно в любом случае, что ваш обработчик SYSTICK и реализации Delay_MS()
имеют ошибку, но это невозможно угадать, не глядя на этот код. Если оба кода предоставлены библиотечным кодом, это маловероятно.