STM32FreeRTOS icon indicating copy to clipboard operation
STM32FreeRTOS copied to clipboard

vTaskDelay() has no effect on STM32L431RC (FreeRTOS 9.0.4 & 10.3.3)

Open ahuraSanat opened this issue 1 month ago • 1 comments

Issue: vTaskDelay() has no effect on STM32L431RC (FreeRTOS 9.0.4 and 10.3.3)

Board: STM32L431RC
FreeRTOS versions tested: 9.0.4 and 10.3.3
HAL / Clock config: Using HSE as SYSCLK, no PLL

Description of the problem

I have a simple FreeRTOS task that updates a COG display from 0 to 100.
The display updates correctly and shows the numbers from 0 to 100 without any issues. The only problem is the speed: changing vTaskDelay() does not change how fast the numbers appear.

It looks like the FreeRTOS tick is not running or not configured correctly on STM32L431RC.

Minimal code to reproduce

void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK |
                                RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSE;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);
}

static void DisplayTask(void *pvParameters)
{
  char TempString[20];
  while (true)
  {
    for (int i = 0; i <= 100; i++)
    {
      u8g2.clearBuffer();
      sprintf(TempString, "%d", i);
      u8g2.drawUTF8((LCD_Width - u8g2.getUTF8Width(TempString)) / 2,
                    (LCD_Height + fontY) / 2,
                    TempString);
      u8g2.sendBuffer();

      vTaskDelay(1000);   // <-- changing this does nothing
    }
  }
}

void setup()
{
  u8g2.begin();
  u8g2.clearDisplay();
  u8g2.setContrast(128);
  u8g2.setFont(fontName);

  xTaskCreate(DisplayTask, "Display", 1024, NULL, 4, NULL);
  vTaskStartScheduler();
}

void loop()
{
  vTaskDelete(NULL);
}

ahuraSanat avatar Dec 31 '25 09:12 ahuraSanat