ESP32配置I2S时稍不注意就把MCLK配置到了IO0

       玩过ESP32音频开发的朋友都知道,配置I2S时通常是不需要配置MCLK的,然后就会想当然的按照如下配置I2S的GPIO,初看好像没发现什么毛病,再看好像还是没什么毛病。然后就是编译烧录,经过测试音频采集和播放都没有问题,可我总感觉哪里不对劲。

const i2s_pin_config_t pin_config = {
    .bck_io_num = I2S_SCK,
    .ws_io_num = I2S_WS,
    .data_out_num = I2S_SDO, 
    .data_in_num = I2S_SDI 
  };
  err = i2s_set_pin(I2S_PORT, &pin_config);
  if (err != ESP_OK) {
    Serial.printf("Failed setting pin: %d\n", err);
    //while (true);
  }

      很巧的是,我手上ESP32板子上的IO0刚好是用来检测按键的,奇葩的事情发生了,我根本没按按键,LOG却显示当前按键一直在不停的短按。我就纳闷了,按键是怎么自动触发的,该不会是ESP-IDF版本有问题吧,I2S通信对IO0有影响!接着就是一顿猛操作,不停的换ESP-IDF的版本,从3.5.0一直换到最新的5.1.1,表现都神一般的一样!该不会这个问题延续这么多个版本吧,乐鑫的工程师也不是吃素的,所以不应该是版本问题。

[04:25:38.713]收←◆key_menu short press!

[04:25:38.769]收←◆key_menu short press!

[04:25:38.829]收←◆key_menu short press!

[04:25:38.886]收←◆key_menu short press!

[04:25:38.946]收←◆key_menu short press!

[04:25:39.004]收←◆key_menu short press!

[04:25:39.061]收←◆key_menu short press!

[04:25:39.119]收←◆key_menu short press!

[04:25:39.177]收←◆key_menu short press!

[04:25:39.235]收←◆key_menu short press!

[04:25:39.296]收←◆key_menu short press!

[04:25:39.351]收←◆key_menu short press!

[04:25:39.409]收←◆key_menu short press!

[04:25:39.479]收←◆key_menu short press!

       所以我就想起来用逻辑分析仪来测量一下IO0按键的波形,一测发现是一个1.25MHz左右的波形,这个频率咋那么熟悉呢,猛然醒悟,这该不是MCLK脚的波形吧。果不其然,默认没给它配置,底层函数居然把它配置到IO0去了,我去吐血,居然这么刚!

        正确配置需要给MCLK赋值为-1,这样编译器就不会把它随便配置到其他引脚上去了。ESP32其他外设如果也有这种情况,不用的引脚一定要记得配置为-1,否则编译器又会把它配到IO0 去,那样就会产生各种奇奇怪怪烧脑的问题!

const i2s_pin_config_t pin_config = {
    .mck_io_num = -1,
    .bck_io_num = I2S_SCK,
    .ws_io_num = I2S_WS,
    .data_out_num = I2S_SDO, 
    .data_in_num = I2S_SDI 
  };
  err = i2s_set_pin(I2S_PORT, &pin_config);
  if (err != ESP_OK) {
    Serial.printf("Failed setting pin: %d\n", err);
    //while (true);
  }

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值