循环缓冲读卡器,我卡住了

时间:2018-04-10 11:31:14

标签: c buffer interrupt circular-buffer stm

我正在尝试实现一个循环缓冲区,我写的很好,所有收到的数据都在那里,但是我的函数从它读取的东西不起作用。没有数据保存到MtoHSdata中。

我想要读取的数据有一个Start(>)和End(<)符号,应该通过USART1发送。

  

读取数据功能:

void MtoHS(struct remoteM *Buff)
{
    BYTE k = 0;

    static BYTE st = 1;

    switch (st)
    {
    case 1:
    {
        if ((*Buff).wr != (*Buff).re)
        {
            (*Buff).re = ((*Buff).re + 1) % (*Buff).max;

            if ((*Buff).Buffer[(*Buff).re] == '>')          // > == Start Symbol
            {
                k = 0;
                MtoHSdata[k] = (*Buff).Buffer[(*Buff).re];
            }
            else if ((*Buff).Buffer[(*Buff).re] == '<')     // < == End Symbol
            {
                MtoHSdata[k] = (*Buff).Buffer[(*Buff).re];
                st = 5;
            }
            else
            {
                MtoHSdata[k] = (*Buff).Buffer[(*Buff).re];  // Data
                k++;
            }
        }
    }
        break;
    /* When End Symbol was read, send data to M */
    case 5:
    {
        BYTE i = 0;

        while (MtoHSdata[i] != '<')
        {
            USART_SendData(USART1, MtoHSdata[i]);
            i++;
        }
    }
        break;

    default:
    {
        st = 1;
    }

    }
    return;
}
  

写数据功能(中断):

void USART1_IRQHandler(void)
{
    if (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != RESET)
    {
        uint16_t byteM = 0;

        USART_GetITStatus(USART1, USART_IT_ORE);

        byteM = USART_ReceiveData(USART1);

        pRXD5->Buffer[pRXD5->wr] = byteM;
        pRXD5->wr = (pRXD5->wr + 1) % pRXD5->max;
    }
    return;
}

我用参数'pRXD5'调用MtoHS函数。

有谁能告诉我我做错了什么?

0 个答案:

没有答案