美文网首页
ESP32 PCNT的测试

ESP32 PCNT的测试

作者: 昨天剩下的一杯冷茶 | 来源:发表于2019-08-12 17:22 被阅读0次

    1、 先了解一下我上篇写的。
    https://www.jianshu.com/p/1f7bb66d9b40

    2、 创建了一个定时器

    
    static void periodic_timer_callback(void* arg)
    {
        //int64_t time_since_boot = esp_timer_get_time();
        //ESP_LOGI(TAG, "Periodic timer called, time since boot: %010lld us", time_since_boot);
                printf("------->Event PCNT unit<-------------%d\n",hallGetCounter(HALL_PCNT_UINT_L));
            hallClearCounter(HALL_PCNT_UINT_L);
    }
    
    void my_time_init(void)
    {
        const esp_timer_create_args_t periodic_timer_args = {
                .callback = &periodic_timer_callback,
                /* name is optional, but may help identify the timer when debugging */
                .name = "periodic"
        };
            esp_timer_handle_t periodic_timer;
        ESP_ERROR_CHECK(esp_timer_create(&periodic_timer_args, &periodic_timer));
        ESP_ERROR_CHECK(esp_timer_start_periodic(periodic_timer,  1000000));
    
    }
    
    

    3、 创建4个任务

    void reset_task(void *arg)
    {
    uint32_t i;
        uint32_t j;
    
        int *tab;
    
        while(1)
        {
            i=0xfffff;
            while(i)
            {
                i--;
                for (j=0; j<100;j++)
                {
                }
            }
        printf("------->reset_task<------------:%d\n",*((int *) arg));
        vTaskDelay(1000 / portTICK_RATE_MS);
        
            
        }
    }
    
    int task1_par =1;
    int task2_par =2;
    
    
    int task3_par =3;
    int task4_par =4;
    
    
    void my_create_task(void)
    {
        xTaskCreatePinnedToCore(reset_task, "reset task", 2048, (void*)&task1_par, 10, NULL, 1);
        xTaskCreatePinnedToCore(reset_task, "reset task", 2048, (void*)&task2_par, 10, NULL, 1);
    
    
        xTaskCreatePinnedToCore(reset_task, "reset task", 2048, (void*)&task3_par, 10, NULL, 0);
        xTaskCreatePinnedToCore(reset_task, "reset task", 2048, (void*)&task4_par, 10, NULL, 0);
    
    }
    
    
    

    4、测试应用和效果

    void app_main()
    {   
        hallInit();
        hallStartCounter(HALL_PCNT_UINT_L);
        my_time_init();
        my_create_task();
    
        while(1)
        {
        
            vTaskDelay(1000 / portTICK_RATE_MS);
        }
    
    }
    
    
    
    image.png image.png

    在这种极端的条件下,误差在0.7%。

    相关文章

      网友评论

          本文标题:ESP32 PCNT的测试

          本文链接:https://www.haomeiwen.com/subject/cfzujctx.html