打印
[51单片机]

这个问题如何解决

[复制链接]
460|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;

收到,谢谢坛友!     

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3670

主题

24964

帖子

72

粉丝