STM32F4 - USART - 接收数据阵列 - 仅读取第一帧

时间:2017-02-22 20:49:46

标签: interrupt-handling stm transmission usart

今天我正在与从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);

我正在尝试更改截止频率 - 为此,我重新初始化结构。

0 个答案:

没有答案