Devi impostare uno dei timer del processore in modalità free running counter alla frequenza che vuoi tu (tra quelle impostabili) e avviarlo. Dopodiché memorizzi il valore del counter all'inizio e alla fine del ciclo for, così con la differenza misuri quanto dura la routine.
Ad esempio facendo riferimento a questa guida:
https://www.digikey.it/en/maker/projects/getting-started-with-stm32-timers-and-timer-interrupts/d08e6493cefa486fb1e79c43c0b08cc6
nel tuo caso avrai:
// Get current time (microseconds)
timer_val = __HAL_TIM_GET_COUNTER(&htim16);
// Routine
int x = 0, i;
for(i=0; i<2000; i++)
{
x=x+1;
}
// Get time elapsed
timer_val = __HAL_TIM_GET_COUNTER(&htim16) - timer_val;
// Show elapsed time
uart_buf_len = sprintf(uart_buf, "%u us\r\n", timer_val);
HAL_UART_Transmit(&huart2, (uint8_t *)uart_buf, uart_buf_len, 100);
In questo caso particolare il risultato sarà proporzionale a i, ma la costante di proporzionalità è più facile valutarla empiricamente (prova diversi i) che calcolarla teoricamente