Разобрался сам.
Оказалось что FreeRTOS 8.2.3 начала запрещать все прерывания при вызове любой функции до запуска планировщика. Ломал мозг 3.5 часа
Код
RTC_Interrupt_Init();
vSemaphoreCreateBinary(xSemaphore);
while(1){} // ждём прерывание, но не дождёмся
vTaskStartScheduler();