Вот она. Есть в stm32f1xxxx _hal
Но если ее вызывать как функцию - ошбка, функция не определена. Как исправить?
Для чего? Для четкой идентификации аппаратных ошибок типа Hard_Fault и тд. В векторах прерывания запрещены и Hal_delay не работает.
DWT не предлагать.
Или как еще можно делать точные задержки в 1 мс без SysTick?
(если кто не знает - для быстрого перехода к нужной функции жмем ctrl+клик на нужную функцию. если функции НЕТ - то и перехода не будет)
void delay_ms(const unsigned short period_ms) {
for (unsigned short i = 0; i < period_ms; ++i) delay_us(1000UL);
}
void delay_us(const unsigned long period_us) {
unsigned long realPeriod = period_us * 1134 / 1000;
for (unsigned long i = 0; i < realPeriod; ++i) {
asm("nop");
asm("nop");
};
}
Программист сдаёт экзамен по вождению, и инспектор решает завалить его на знаках дорожного движения.
Инспектор указывает на знак «Главная дорога»:
— Что означает этот знак?
Программист:
— Это константный указатель на приоритетное направление движения.
Инспектор вздыхает, показывает на знак «Тупик»:
— Ладно, а это?
Программист:
— Это NULL. Ссылка ведет на пустой участок памяти, ехать туда нельзя.
Инспектор теряет терпение, указывает на знак «Круговое движение»:
— Ну а это тогда что?!
Программист:
— А это циклическая ссылка. Если вовремя не сделать break, то мы получим бесконечный цикл и переполнение бака!