中科蓝汛MIC引脚电平拉不低

在config.h里定义了

#define MIC_INIT()                  {GPIOFDE |= ~BIT(2);GPIOFDIR &= ~BIT(2);GPIOFFEN = ~BIT(2);}
#define MIC_ON()              GPIOFSET = BIT(2);
#define MIC_OFF()            GPIOFCLR = BIT(2);


然后在meg_bt.c里的switch循环里写了

static bool mic_flag = true;
MIC_INIT();
switch(msg){
.....
case KU_MIC:
                 if(mic_flag){
                MIC_OFF();
                printf("[%x]",adc_cb.mic_dc_val);
                mic_flag = false;
                sys_warning_play(T_WARNING_BT_CONNECT,PIANO_BT_CONNECT);
            }else{
                MIC_ON();
                printf("[%x]",adc_cb.mic_dc_val);
                mic_flag = true;
                sys_warning_play(T_WARNING_BT_DISCONNECT,PIANO_BT_DISCONNECT);
            }
            break;

mic并没有被拉低,是什么原因呢

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答由chatgpt基于相关博客总结生成:

    问题分析: 根据提供的代码,假设使用的是常见的嵌入式平台,通过GPIO控制引脚电平。根据代码的定义和使用,在KU_MIC情况下,如果mic_flag为真,那么MIC引脚会被拉低,否则会被拉高。但实际结果是MIC引脚并没有被拉低。

    可能的原因: 1. GPIO配置问题:可能没有正确配置GPIO引脚的工作模式或输出模式。 2. 引脚功能冲突:可能其他模块或代码已经配置了相同的引脚,并产生了冲突。

    解决方案: 1. 检查GPIO引脚的配置:确保在代码中正确配置GPIO引脚的工作模式和输出模式。比如,在初始化阶段使用GPIO_InitStruct的成员变量来初始化引脚。

    GPIO_InitStruct.Pin = GPIO_PIN_2;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
    
    1. 检查引脚功能冲突:查看其他模块或代码是否已经对相同的引脚进行了配置,并可能导致冲突。如果有冲突,需要修改冲突部分的代码,或者调整引脚的使用方式。

    如果以上解决方案都没有解决问题,可能需要进一步分析代码和硬件配置,或者查看相关的硬件文档,以了解是否有其他可能导致MIC引脚电平无法拉低的原因。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^