Size: a a a

2020 April 26

AM

Arthur Melkumov in Deus Volt!
Подскажите, использую STM32F103C8T6+Keil+CMSIS и пытаюсь реализовать функции задержки через SysTick. В начале main конфигурирую частоту Systick но потом такое ощущение что программа куда-то улетает (судя по дебагу не в HardFault). То есть блинк светодиодом который в while(1) не работает если до этого вызвать ф-ию   SysTick_Config(SystemCoreClock / 1000000);. Может ли быть из-за того, что CMSIS еще до основного main вызывает ф-ию (SystemInit()) предконфигурации и потом перестроить Systick уже из-за этого не получается? Main.c:
источник

AM

Arthur Melkumov in Deus Volt!
Проект Кейл:
источник

AK

Alexandr Kobzev in Deus Volt!
Так а молекс type-c на пузо не паяется разве?
источник

С

Серый in Deus Volt!
Arthur Melkumov
Подскажите, использую STM32F103C8T6+Keil+CMSIS и пытаюсь реализовать функции задержки через SysTick. В начале main конфигурирую частоту Systick но потом такое ощущение что программа куда-то улетает (судя по дебагу не в HardFault). То есть блинк светодиодом который в while(1) не работает если до этого вызвать ф-ию   SysTick_Config(SystemCoreClock / 1000000);. Может ли быть из-за того, что CMSIS еще до основного main вызывает ф-ию (SystemInit()) предконфигурации и потом перестроить Systick уже из-за этого не получается? Main.c:
Дебагом до нардфаулт
источник

𝔻

𝔻𝕠𝕜𝕒 in Deus Volt!
A_D
когда там между датой и корпусом зазора почти нет
+ волновое сопротивление диф.пары «ломается»
источник

С

Серый in Deus Volt!
Arthur Melkumov
Подскажите, использую STM32F103C8T6+Keil+CMSIS и пытаюсь реализовать функции задержки через SysTick. В начале main конфигурирую частоту Systick но потом такое ощущение что программа куда-то улетает (судя по дебагу не в HardFault). То есть блинк светодиодом который в while(1) не работает если до этого вызвать ф-ию   SysTick_Config(SystemCoreClock / 1000000);. Может ли быть из-за того, что CMSIS еще до основного main вызывает ф-ию (SystemInit()) предконфигурации и потом перестроить Systick уже из-за этого не получается? Main.c:
Точки останова и дебаг, ищи до того места где падает программа.
источник

AM

Arthur Melkumov in Deus Volt!
Если поставть дергание пином в Systick хендлер то на осциле будет меандр периодом 4 мкс. То есть срабатывает систик каждые 2мкс
источник

AM

Arthur Melkumov in Deus Volt!
источник

AM

Arthur Melkumov in Deus Volt!
и продолжает срабатывать, хотя основной меин (точнее блинк в while(1)) не отрабатывает
источник

С

Серый in Deus Volt!
Ничего не понял , если попадает в хард то там в цикл бесконечный остаётся
источник

GK

Grigorii Kuzmin in Deus Volt!
первый раз такой обработчик систика вижу
источник

AM

Arthur Melkumov in Deus Volt!
Серый
Ничего не понял , если попадает в хард то там в цикл бесконечный остаётся
А оно и не попадает в хард ( если судить по дебагу)
источник

AK

Alexandr Kobzev in Deus Volt!
Я вот тоже ничего не понял, у тебя в мейне в бесконечном цикле моргалка и в систик хендлере такая же моргалка
источник

GK

Grigorii Kuzmin in Deus Volt!
в файле с обработчиком систика заведи переменную
static volatile uint32_t sysTickCounter = 0;
источник

AK

Alexandr Kobzev in Deus Volt!
И пустой цикл явно даст задержку для светодиода не видную глазу
источник

GK

Grigorii Kuzmin in Deus Volt!
обработчик напиши такой
extern "C" void SysTick_Handler()
{
   sysTickCounter++;
}
источник

GK

Grigorii Kuzmin in Deus Volt!
задержку такую
void DelayMilliseconds(uint32_t milliseconds)
{
   uint32_t counterSnapshot = sysTickCounter;
   while (sysTickCounter - counterSnapshot < milliseconds)
   {}
}
источник

С

Серый in Deus Volt!
Grigorii Kuzmin
обработчик напиши такой
extern "C" void SysTick_Handler()
{
   sysTickCounter++;
}
Зачем extern? Находится в другом файле?
источник

GK

Grigorii Kuzmin in Deus Volt!
Серый
Зачем extern? Находится в другом файле?
чтобы в плюсовом коде можно было дёрнуть
источник

GK

Grigorii Kuzmin in Deus Volt!
чтобы не заманглилось имя
источник