Склеивайте "_TIM2" c префиксом: человекочитаемо и не развернёт.
Устроит такой вариант? #include <stdio.h>
#define TIM2 ((void*)0x4000)
#define TIMER_NUM _TIM2
#define _CLUE(U, V) U ## V
#define _XTRA(X) _CLUE( LL_APB1_GRP1_PERIPH , X)
#define TIMER_NUM_ABR1 _XTRA(TIMER_NUM)
/* Original:
#define TIMER_NUM TIM2
#define TIMER_NUM_ABR1 LL_APB1_GRP1_PERIPH_##TIMER_NUM
LL_APB1_GRP1_EnableClock(TIMER_NUM_ABR1);
*/
// Stringify for print //
#define _XSTR(S) #S
#define XSTR(X) _XSTR(X)
int main(void)
{
char *str = XSTR( TIMER_NUM_ABR1 );
printf("%s\n", str);
return 0;
}
https://godbolt.org/z/qdoY7ze6z
Может такой способ пригодится, уже при -O1 структуру убирает, оставляет только необходимое.timers.c