请教一个问题,使用freertos操作系统,那么这个vTaskDelay()函数的延时基准是多少呢?我看freertos使用了SysTick_Handler()函数

我把注释掉了Delay_Init();    然后自己初始化的系统滴答定时器

捕获.1JPG.JPG

//SysTick 初始化配置

static uint32_t SysTick_Config(uint32_tticks)

{

    SysTick->CTLR = 0x00000000;             //控制寄存器复位


    SysTick->SR = 0x00000000;               //状态寄存器复位


    SysTick->CNT = 0x00000000;              //计数器复位,设置初始值为0


    SysTick->CMP = ticks;                   //给重加载寄存器赋值


    NVIC_SetPriority(SysTicK_IRQn, 3);      //设置SysTick中断优先级


    NVIC_EnableIRQ(SysTicK_IRQn);           //使能开启Systick中断


    SysTick->CTLR |= 0x0000000B;            //启动系统计数器STK(HCLK/8时基),向上计数到比较值后重新从 0 开始计数


    return (0);

}


//SysTick初始化

void Systick_Init(void)

{

    //此处在进行初始化的时候设置比较寄存器的值

    SysTick_Config(SystemCoreClock / 8000 );//1ms   72M/8000/9000000 = 1/1000 = 1ms


}



它这个port.c里面定义了SysTick_Handler()这个函数

捕获3.JPG


就是这个地方改为多少,vTaskDelay(1);是1ms时间呢?捕获.JPG


您好,若使用FreeRTOS,建议延时函数直接调用vTaskDelay函数,关于configTICK_RATE_HZ,值改成1000应该是1ms左右,你可以试一下,后续若有问题,可通过邮箱(lzs@wch.cn)和我沟通



vTaskDelay可以实现us级延时吗


您好,若需要实现us级延时,可将configTICK_RATE_HZ的值修改大一些即可,如下图

image.png


只有登录才能回复,可以选择微信账号登录