这个问题如何解决
上位机循环发送一帧数据给到单片机:A1 0A 01 02 03 CC
单片机每接收一个字节数据,进入一次接收中断,如下面程序所示,完善下面的程序,保证串口可以完整接收到数据并保存到USART_RX_BUF数组中。
提示:上位机的程序在循环发送,有可能因为数据传输问题,部分数据会丢失,所以我们制定了帧头A1,帧尾CC,只有这两个数据正确,才能判定这串数据是正确数据。
u8 USART_RX_BUF; //接收缓冲,最大64个字节.
u8 Receive_count=0,True_receive=0;
void USART1_IRQHandler(void)
{
u8 res;
if(USART1->SR&(1<<5))//接收到数据
{
res=USART1->DR;
}
}
typedef struct{
bit bHeaderFlag;
bit bRxOkFlag;
u08 ucCnt;
u08 aucBuf;
}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 = 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;
}
} ayb_ice 发表于 2023-9-1 14:07
typedef struct{
bit bHeaderFlag;
bit bRxOkFlag;
收到,谢谢坛友!
页:
[1]