关于ESP-IDF外设初始化结构体的小问题(已解决)

  • 最近在使用ESP系列做开发,在初始化上遇到了一点问题,先记录以下后面再慢慢找问题
  • 关于使用IDF做ESP系列开发外设的初始化结构体必须和示例里面写的那样,在声明的同时马上赋值,如果想像stm32那样声明后一个一个赋值则无法初始化引脚,这个问题如果有人遇到并解决希望能分享一下思路
  • 如下则无法初始化这个GPIO17作为pwm输出

    ledc_channel_config_t ledc_channel;
    ledc_channel.channel = LEDC_CHANNEL_1;
    ledc_channel.duty = 8000;
    ledc_channel.gpio_num = 17;
    ledc_channel.speed_mode = LEDC_LOW_SPEED_MODE;
    ledc_channel.hpoint = 0;
    ledc_channel.timer_sel = LEDC_TIMER_0;
    ledc_channel_config(&ledc_channel);
  • 但是下面这种则可以,就是例程里的写法。
    ledc_channel_config_t channel_conf = {
        .gpio_num = 17, // 设置 GPIO 号
        .speed_mode = LEDC_LOW_SPEED_MODE,
        .channel = LEDC_CHANNEL_1,
        .timer_sel = LEDC_TIMER_0,
        .duty = 8000, // 设置占空比为 0
        .hpoint = 0
    };

    // 配置 LEDC 通道
    ledc_channel_config(&channel_conf);


  • 这里是个什么问题呢,C在初始化结构体有两种方式,其中声明同时赋值的方式,若没有将某些参数直接赋值,会被默认为0

  • 但是若是使用单步赋值来显式赋值的话,C要求将结构体中所有参数都进行赋值,不用的也要赋值为0之列的,所以对于单步赋值要将所有参数列出来。

  • 上面的单步配置应该如下写就能解决这个问题。

    ledc_channel_config_t ledc_channel;
    ledc_channel.channel = LEDC_CHANNEL_1;
    ledc_channel.duty = 8000;
    ledc_channel.gpio_num = 17;
    ledc_channel.speed_mode = LEDC_LOW_SPEED_MODE;
    ledc_channel.hpoint = 0;
    ledc_channel.timer_sel = LEDC_TIMER_0;
    ledc_channel.intr_type= LEDC_INTR_DISABLE;
    ledc_channel_config(&ledc_channel);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值