STM32 HAL RCC_Delay

08001378 <RCC_Delay>:
 8001378:	b480      	push	{r7}
 800137a:	b085      	sub	sp, #20
 800137c:	af00      	add	r7, sp, #0
 800137e:	6078      	str	r0, [r7, #4]
 8001380:	4b0a      	ldr	r3, [pc, #40]	; (80013ac <RCC_Delay+0x34>)
 8001382:	681b      	ldr	r3, [r3, #0]
 8001384:	4a0a      	ldr	r2, [pc, #40]	; (80013b0 <RCC_Delay+0x38>)
 8001386:	fba2 2303 	umull	r2, r3, r2, r3
 800138a:	0a5b      	lsrs	r3, r3, #9
 800138c:	687a      	ldr	r2, [r7, #4]
 800138e:	fb02 f303 	mul.w	r3, r2, r3
 8001392:	60fb      	str	r3, [r7, #12]
 8001394:	bf00      	nop
 8001396:	68fb      	ldr	r3, [r7, #12]
 8001398:	1e5a      	subs	r2, r3, #1
 800139a:	60fa      	str	r2, [r7, #12]
 800139c:	2b00      	cmp	r3, #0
 800139e:	d1f9      	bne.n	8001394 <RCC_Delay+0x1c>
 80013a0:	bf00      	nop
 80013a2:	bf00      	nop
 80013a4:	3714      	adds	r7, #20
 80013a6:	46bd      	mov	sp, r7
 80013a8:	bc80      	pop	{r7}
 80013aa:	4770      	bx	lr
 80013ac:	20000000 	.word	0x20000000
 80013b0:	10624dd3 	.word	0x10624dd3

Вот она. Есть в stm32f1xxxx _hal
Но если ее вызывать как функцию - ошбка, функция не определена. Как исправить?
Для чего? Для четкой идентификации аппаратных ошибок типа Hard_Fault и тд. В векторах прерывания запрещены и Hal_delay не работает.
DWT не предлагать.
Или как еще можно делать точные задержки в 1 мс без SysTick?

(если кто не знает - для быстрого перехода к нужной функции жмем ctrl+клик на нужную функцию. если функции НЕТ - то и перехода не будет)

че так?

У него тактовка 72МГц))) Много больно.

т е математику в МК отменили чтоб посчитать правильное количество DWT :man_facepalming:

циклы наше все :slightly_smiling_face:

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");
	};
}

Вечером проверю.

.global delay
delay:
    push {r1}
l1: mov.w r1,#10285     @ 72000/7
lp: subs r1,#1
    bne lp
    subs r0,#1
    bne l1
    pop {r1}
    bx lr

Вот на форуме нарыл)

А зачем ассемблер на STM/ESP?

для тех кто С не знает

Это просто пример, на стэмном форуме нашел.

Застрял на указателях)))

И не узнает с таким подходом то.

Хорошая идея для анекдота про программиста за рулем авто.

Программист сдаёт экзамен по вождению, и инспектор решает завалить его на знаках дорожного движения.

Инспектор указывает на знак «Главная дорога»:
— Что означает этот знак?
Программист:
— Это константный указатель на приоритетное направление движения.
Инспектор вздыхает, показывает на знак «Тупик»:
— Ладно, а это?
Программист:
— Это NULL. Ссылка ведет на пустой участок памяти, ехать туда нельзя.
Инспектор теряет терпение, указывает на знак «Круговое движение»:
— Ну а это тогда что?!
Программист:
— А это циклическая ссылка. Если вовремя не сделать break, то мы получим бесконечный цикл и переполнение бака!

Анекдот от ИИ.

Вынес в отдельную (свою) функцию и все скомпилировалось.
Код выкладывать для чтобы вы “поржали” надо мной - недопрограммистом???

Ты бы правда к психологу сходил, что ли. Тебя потому и троллят, что ты неадекватно реагируешь

)))
Забавно)))

Угу. )))

Это ты сам про себя??? Или ты такой и есть???

У меня права уже 45 лет.