在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并没有被拉低,是什么原因呢
不知道你这个问题是否已经解决, 如果还没有解决的话:问题分析: 根据提供的代码,假设使用的是常见的嵌入式平台,通过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);
如果以上解决方案都没有解决问题,可能需要进一步分析代码和硬件配置,或者查看相关的硬件文档,以了解是否有其他可能导致MIC引脚电平无法拉低的原因。