STM32 "error: 'vTaskDelay' was not declared in this scope"

I’m using the 6pwm example code from the DRV8301 library

// Open loop motor control example
#include <SimpleFOC.h>
#include <DRV8301.h>

// Motor instance
BLDCMotor motor = BLDCMotor(4);
BLDCDriver6PWM driver = BLDCDriver6PWM(PA1, PB13, PA2, PB14, PA3, PB15);
// DRV8301 gate_driver = DRV8301(MOSI, MISO, SCLK, CS, EN_GATE, FAULT);
DRV8301 gate_driver = DRV8301(PB3, PB4, PB5, PB6, PB7, PB8);

void setup()
{
    // driver config
    // power supply voltage [V]
    driver.voltage_power_supply = 12;
    driver.dead_zone = 0.005;
    driver.init();
    gate_driver.begin(PWM_INPUT_MODE_6PWM);
    // link the motor and the driver
    motor.linkDriver(&driver);

    // limiting motor movements
    motor.voltage_limit = 1.5;   // [V]
    motor.velocity_limit = 20; // [rad/s]

    // open loop control config
    motor.controller = MotionControlType::velocity_openloop;

    // init motor hardware
    motor.init();

    Serial.begin(115200);
    Serial.println("Motor ready!");
    _delay(1000);
}

float target_velocity = 0; // [rad/s]

void loop()
{
    // open loop velocity movement
    // using motor.voltage_limit and motor.velocity_limit
    motor.move(target_velocity);

    // receive the used commands from serial
    serialReceiveUserCommand();
}

// utility function enabling serial communication with the user to set the target values
// this function can be implemented in serialEvent function as well
void serialReceiveUserCommand()
{
    // a string to hold incoming data
    static String received_chars;

    while (Serial.available())
    {
        // get the new byte:
        char inChar = (char)Serial.read();
        // add it to the string buffer:
        received_chars += inChar;
        // end of user input
        if (inChar == '\n')
        {
            // change the motor target
            target_velocity = received_chars.toFloat();
            Serial.print("Target velocity ");
            Serial.println(target_velocity);

            // reset the command buffer
            received_chars = "";
        }
    }
}

these are the errors I’m getting

c:\Users\user\Documents\Arduino\libraries\Simple_FOC\src\BLDCMotor.cpp: In member function 'virtual int BLDCMotor::init()':
c:\Users\user\Documents\Arduino\libraries\Simple_FOC\src\BLDCMotor.cpp:102:3: error: 'vTaskDelay' was not declared in this scope
  102 |   vTaskDelay(500);
      |   ^~~~~~~~~~
c:\Users\user\Documents\Arduino\libraries\Simple_FOC\src\BLDCMotor.cpp: In member function 'int BLDCMotor::alignSensor()':
c:\Users\user\Documents\Arduino\libraries\Simple_FOC\src\BLDCMotor.cpp:242:7: error: 'vTaskDelay' was not declared in this scope
  242 |       vTaskDelay(2);
      |       ^~~~~~~~~~
c:\Users\user\Documents\Arduino\libraries\Simple_FOC\src\BLDCMotor.cpp:252:7: error: 'vTaskDelay' was not declared in this scope
  252 |       vTaskDelay(2);
      |       ^~~~~~~~~~
c:\Users\user\Documents\Arduino\libraries\Simple_FOC\src\BLDCMotor.cpp:257:5: error: 'vTaskDelay' was not declared in this scope
  257 |     vTaskDelay(200);
      |     ^~~~~~~~~~
c:\Users\user\Documents\Arduino\libraries\Simple_FOC\src\BLDCMotor.cpp:285:5: error: 'vTaskDelay' was not declared in this scope
  285 |     vTaskDelay(700);
      |     ^~~~~~~~~~
"C:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\tools\\xpack-arm-none-eabi-gcc\\13.2.1-1.1/bin/arm-none-eabi-g++" -mcpu=cortex-m3 -DVECT_TAB_OFFSET=0x0 -DUSE_HAL_DRIVER -DUSE_FULL_LL_DRIVER -mthumb "@C:\\Users\\user\\AppData\\Local\\arduino\\sketches\\2FBF1E01B6447DFDE81C0B1792F58CC9/sketch/build.opt" -c -Og -g -w -std=gnu++17 -ffunction-sections -fdata-sections -fno-threadsafe-statics --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -fno-use-cxa-atexit -MMD "-IC:\\Users\\user\\AppData\\Local\\Temp\\.arduinoIDE-unsaved202512-11112-aueytb.bd725\\simplefoc_vesc6_6pwm_openloop_speed_control_test" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\hardware\\stm32\\2.8.1\\cores\\arduino/avr" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\hardware\\stm32\\2.8.1\\cores\\arduino/stm32" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\hardware\\stm32\\2.8.1\\cores\\arduino/../../libraries/SrcWrapper/inc" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\hardware\\stm32\\2.8.1\\cores\\arduino/../../libraries/SrcWrapper/inc/LL" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\hardware\\stm32\\2.8.1\\system/Drivers/STM32F1xx_HAL_Driver/Inc" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\hardware\\stm32\\2.8.1\\system/Drivers/STM32F1xx_HAL_Driver/Src" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\hardware\\stm32\\2.8.1\\system/STM32F1xx" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\hardware\\stm32\\2.8.1\\cores\\arduino/../../libraries/USBDevice/inc" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\hardware\\stm32\\2.8.1\\system/Middlewares/ST/STM32_USB_Device_Library/Core/Inc" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\hardware\\stm32\\2.8.1\\system/Middlewares/ST/STM32_USB_Device_Library/Core/Src" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\hardware\\stm32\\2.8.1\\cores\\arduino/../../libraries/VirtIO/inc" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\hardware\\stm32\\2.8.1\\system/Middlewares/OpenAMP" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\hardware\\stm32\\2.8.1\\system/Middlewares/OpenAMP/open-amp/lib/include" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\hardware\\stm32\\2.8.1\\system/Middlewares/OpenAMP/libmetal/lib/include" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\hardware\\stm32\\2.8.1\\system/Middlewares/OpenAMP/virtual_driver" -DSTM32F1xx -DARDUINO=10607 -DARDUINO_GENERIC_F103C6TX -DARDUINO_ARCH_STM32 "-DBOARD_NAME=\"GENERIC_F103C6TX\"" "-DVARIANT_H=\"variant_generic.h\"" -DSTM32F103x6 -DHAL_UART_MODULE_ENABLED "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\tools\\CMSIS\\5.9.0/CMSIS/Core/Include/" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\hardware\\stm32\\2.8.1\\system/Drivers/CMSIS/Device/ST/STM32F1xx/Include/" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\hardware\\stm32\\2.8.1\\system/Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/gcc/" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\tools\\CMSIS\\5.9.0/CMSIS/DSP/Include" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\tools\\CMSIS\\5.9.0/CMSIS/DSP/PrivateInclude" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\hardware\\stm32\\2.8.1\\cores\\arduino" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\hardware\\stm32\\2.8.1\\variants\\STM32F1xx\\F103C4T_F103C6(T-U)" "-Ic:\\Users\\user\\Documents\\Arduino\\libraries\\Simple_FOC\\src" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\hardware\\stm32\\2.8.1\\libraries\\SPI\\src" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\hardware\\stm32\\2.8.1\\libraries\\Wire\\src" "-Ic:\\Users\\user\\Documents\\Arduino\\libraries\\Arduino_SimpleFOC_DRV8301_Support_Library-master" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\STMicroelectronics\\hardware\\stm32\\2.8.1\\libraries\\SrcWrapper\\src" "c:\\Users\\user\\Documents\\Arduino\\libraries\\Simple_FOC\\src\\communication\\Commander.cpp" -o "C:\\Users\\user\\AppData\\Local\\arduino\\sketches\\2FBF1E01B6447DFDE81C0B1792F58CC9\\libraries\\Simple_FOC\\communication\\Commander.cpp.o"
c:\Users\user\Documents\Arduino\libraries\Simple_FOC\src\common\time_utils.cpp: In function 'void _delay(long unsigned int)':
c:\Users\user\Documents\Arduino\libraries\Simple_FOC\src\common\time_utils.cpp:14:3: error: 'vTaskDelay' was not declared in this scope
   14 |   vTaskDelay(ms);
      |   ^~~~~~~~~~

and according to google no one ever had this error…
these are my upload settings:

Hi @The555Timer,

Which library version are you using, did you modify it?
Which version of the stm32 package do you have?

SimpleFOC library does not have vTaskDelay function in its original version. It uses the arduino’s delay function. Here is the line that is potentially modified:

Could you verify that you have the line delay(ms); in your code?

Hello @The555Timer , did you modify the library code?

The vTaskDelay is a function from FreeRTOS, and it’s not used by SimpleFOC, nor (AFAIK) by stm32duino.

So I really wonder why this error is showing up for you…
Are you using a modified version of the library?
Have you included FreeRTOS in your project? If yes, you could try to remove it? If no, you could try to add it?

hi, sorry for the late reply
i just realized yesterday that i modified the lib for esp32 a few years ago
it’s fixed now thanks

2 Likes