[51单片机] 这个问题如何解决

[复制链接]
560|2
 楼主| 王栋春 发表于 2023-8-31 21:18 | 显示全部楼层 |阅读模式
上位机循环发送一帧数据给到单片机:
A1 0A 01 02 03 CC
单片机每接收一个字节数据,进入一次接收中断,如下面程序所示,完善下面的程序,保证串口可以完整接收到数据并保存到USART_RX_BUF数组中。
提示:上位机的程序在循环发送,有可能因为数据传输问题,部分数据会丢失,所以我们制定了帧头A1,帧尾CC,只有这两个数据正确,才能判定这串数据是正确数据。
u8 USART_RX_BUF[64]; //接收缓冲,最大64个字节.
u8 Receive_count=0,True_receive=0;
void USART1_IRQHandler(void)
{  
u8 res;  
if(USART1->SR&(1<<5))//接收到数据
{  
  res=USART1->DR;               
}              
}

ayb_ice 发表于 2023-9-1 14:07 | 显示全部楼层
typedef struct{
        bit bHeaderFlag;
        bit bRxOkFlag;
        u08 ucCnt;
        u08 aucBuf[64];
       
}Rx_Typedef;

Rx_Typedef g_stRx;

void USART1_IRQHandler(void)
{  
        Rx_Typedef* pTask = &g_stRx;

        if(USART1->SR&(1<<5))//接收到数据
        {  
                u8 ucTmp = USART1->DR;
                if (!pTask->bRxOkFlag)
                {
                        if (!pTask->bHeaderFlag)
                        {
                                if (ucTmp == 0xa1)
                                {
                                        pTask->bHeaderFlag = 1;
                                        pTask->ucCnt = 0;
                                }
                        }
                        else
                        {
                                if (ucTmp != 0xcc)
                                {
                                        pTask->aucBuf[pTask->ucCnt++] = ucTmp;
                                }
                                else
                                {
                                        pTask->bRxOkFlag = 1;
                                }
                        }
                }
        }              
}

//
void UART_Call(void)
{
        Rx_Typedef* pTask = &g_stRx;
        if (pTask->bRxOkFlag)
        {
                //....处理数据包
                pTask->bHeaderFlag = 0;
                pTask->ucCnt = 0;
                pTask->bRxOkFlag = 0;
        }
}
 楼主| 王栋春 发表于 2023-9-1 14:31 | 显示全部楼层
ayb_ice 发表于 2023-9-1 14:07
typedef struct{
        bit bHeaderFlag;
        bit bRxOkFlag;

收到,谢谢坛友!     
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4829

主题

28994

帖子

80

粉丝
快速回复 在线客服 返回列表 返回顶部