今天我正在与从PC控制我的uC做斗争。 在按钮上单击,我将数据发送到uC,这将更改程序中的某些值。 首先,问题是我的程序只读取收到的第一帧。 其次,当我重新初始化PDM_Filter结构时,我的程序卡住了
重要的是 - USART的Rx缓冲区是16位。
数据格式类似于 6x字节(uint8):
0)ASCII符号 - !或#或& - 符号表示接下来会发生什么; 1)mic_gain; 2)3)HP滤波器截止频率; 4)5)LP滤波器截止频率
所以我收到3 x uint16
uC代码的样子:
union
{
uint16_t szes[3];
uint8_t os[6];
}RxBuffer;
中断处理程序 - 我已经切断了工作正常的部分。
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
{
j=0;
while (j<3)
{
RxBuffer.szes[j] = USART_ReceiveData(USART1);
j++;
}
if(RxBuffer.os[0] == 39)
{
DoFlag = false;
I2S_Cmd(SPI2, DISABLE);
//_PDM(sampling_frequency, RxBuffer.szes[2], RxBuffer.szes[1]);
Filter.HP_HZ = RxBuffer.szes[1];
Filter.LP_HZ = RxBuffer.szes[2];
PDM_Filter_Init(&Filter);
GPIO_SetBits(GPIOD, LED_Blue);
mic_gain = RxBuffer.os[1];
Delay(1000);
GPIO_ResetBits(GPIOD, LED_Blue);
I2S_Cmd(SPI2, ENABLE);
DoFlag = true;
}
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}
}
PDM_Filter 结构的初始化(来自libPDMFilter_Keil.lib
)如何寻找我:
Filter.Fs = frequency_s;
Filter.HP_HZ = high_pass_cutoff;
Filter.LP_HZ = low_pass_cutoff;
Filter.In_MicChannels = 1;
Filter.Out_MicChannels = 1;
PDM_Filter_Init(&Filter);
我正在尝试更改截止频率 - 为此,我重新初始化结构。