微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 串口接收字符串

串口接收字符串

时间:10-02 整理:3721RD 点击:
板子例程中有一个发送一个字节的函数
写了一个字符串的的发送
void HMISends(char *buf1)                  //字符串发送
{
        u8 i=0;
        while(1)
        {
         if(buf1[i]!=0)
                 {
                        USART_SendData(USART1,buf1[i]);  //发送一个字节
                        while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET){};//等待发送结束
                         i++;
                }
         else
         return ;
                }
        }
}
如果接收字符串要如何写呢,发送方不会判断来一个字节一个字节的发送,直接发送过来四个字节这种,虽然我只想取第一个字节,但是如果直接用USART_ReceiveData(USART1)这个函数就只能收到最后一位
写不出来呀,困扰了好久。

设置buffer,既然是通讯,就有定义协议。根据协议设置buffer大小就ok

设置数组

我在做一个WIFI模块,在手机上发送FF010745FF,然后单片机接受到数据执行相应功能,其中接收数据时一次接收几位,用哪个函数接收。想请教,谢谢

设置一个接收缓存(数组),在接收中断中把数据接收,然后需要的时候从数组中读取数据,然后再选择你需要的数据。以下作为参考
void UART1_IRQHandler(void)                                                        //串口1中断服务程序
{
    u8 UartReadTemp;
    if (RESET != USART_GetITStatus(USART1, USART_IT_RXNE))                      //接收中断
    {
        USART_ClearITPendingBit(USART1, USART_IT_RXNE);
        UartReadTemp = USART_ReceiveData(USART1);
        if (Bit_SET == UartRecvFrameOK)
        {
            UART1_RXBuffLen = 0;
        }
        if (UART1_RXBuffLen < (sizeof(UART1_RXBuff) / sizeof(UART1_RXBuff[0])))
        {
            UART1_RXBuff[UART1_RXBuffLen] = UartReadTemp;
            UART1_RXBuffLen++;
        }
        UartRecvFrameOK = Bit_RESET;
        UartRecvNewData = Bit_SET;
        TIM_ITConfig(TIM7, TIM_IT_Update, DISABLE);
        TIM_Cmd(TIM7, DISABLE);
        TIM_SetCounter(TIM7, 0);
        TIM_Cmd(TIM7, ENABLE);                                                  //当上位机发送数据下来时,开启TIM7
        TIM_ITConfig(TIM7, TIM_IT_Update, ENABLE);
    }
    if (RESET != USART_GetFlagStatus(USART1, USART_IT_ORE))                    
    {
        USART_ClearITPendingBit(USART1, USART_IT_ORE);                          //清溢出中断标志位
    }
}

s32 UART1_RecvData(u8* UART1_RecvBuff, u32 Len)          //接收数据
{
    u32 i = 0;
    if ((0 == Len) || (((u8*)NULL) == UART1_RecvBuff))                          //检查参数
    {
        return 0;
    }
    if ((Bit_RESET == UartRecvFrameOK) || (0 == UART1_RXBuffLen))
    {
        return 0;
    }
    if (Len < UART1_RXBuffLen)
    {
        return -1;
    }
    Len = UART1_RXBuffLen;
    for (i = 0; i < Len; i++)
    {
        UART1_RecvBuff[i] = UART1_RXBuff[i];
    }
    UartRecvFrameOK = Bit_RESET;
    UART1_RXBuffLen = 0;
    return Len;
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top