中级会员
 
- 积分
- 207
- 金钱
- 207
- 注册时间
- 2018-2-27
- 在线时间
- 43 小时
|
M3的串口3和STC15通讯,STC15的串口发送通过串口助手看到数据没有问题,同时M3的串口3的发送也没有问题。问题在于:M3的串口3中断接收有时会漏掉几个字节,有时正常。我已经把M3的中断优先级写成最高(中断分组2,抢占和响应优先级均是0),另外,串口中断只是接收,其他的处理都在主循环。[mw_shl_code=c,true]//中断服务
void USART3_IRQHandler(void)
{
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
// if(USART3->SR&(1<<5))//接收到数据
{
// USART3_RX_BUF[USART3_RX_STA++] = USART3->DR;
USART3_RX_BUF[USART3_RX_STA++] = USART_ReceiveData(USART3); //读取接收到的数据 //接收数据增加1
if(USART3_RX_STA == USART3_REC_LEN)
{
USART3_RX_STA=0;
}
}
}[/mw_shl_code][mw_shl_code=c,true]void Uart3_Service(void)
{
u8 i, chk1=0; //计算的
if(USART3_RX_BUF[0]==0xAA) //写
{
for(i=0;i<7;i++)
{
chk1 += USART3_RX_BUF;
}
if(USART3_RX_BUF[7]==chk1) /*如果校验正确,则进入以下数据处理*/
{
chk1 = 0; //清零!!!
memcpy(STC_Buf,USART3_RX_BUF,8); /*复制过来*/
// STCData_Process(); /*数据处理*/
memset(USART3_RX_BUF,0,8); //清空buf
lock=1; //与初始化互锁
}
else
{
USART3_RX_STA = 0;
chk1 = 0; //清零!!!
}
}
else
{
USART3_RX_STA = 0;
chk1 = 0; //清零!!!
}
}[/mw_shl_code]
不清楚问题在哪里…求大神指教!
|
|