Skip to content

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

@ahuraSanat

Description

@ahuraSanat

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions