中级会员
 
- 积分
- 366
- 金钱
- 366
- 注册时间
- 2015-1-27
- 在线时间
- 43 小时
|
就像很多论坛里面的并肩作战的同仁们说的那样,一直在论坛里潜水,从未有过贡献。自己也是在不断泡论坛的过程中,将自己对程序的理解上升到一定实践经验,对原子哥的赞美,咱也不想再说了,群里的坛友们已经能把我能想到的赞美的话全部来形容了原子哥,我这只有简单的两个字:谢谢。谢谢一直以来,原子哥在耐心的回复一些列问题,简单的,复杂的。读书育人,说的就是原子哥吧! 直接切入正题,前几天手头正好有个项目,是串口同喜的,加上简单的协议,开始也没有多想,原子哥的程序还是不错的,拿来直接用就行了啊!程序是最终跑起来了,但是发现整体联机的效果不尽如人意。最终调试下来发现,我一块MCU不断地在实时发数据,另外一块MCU需要不断地进入中断处理,所以实时性上收到一定的影响,再不断地询问老工程师的经验和在论坛里面的坛友,最终采用状态机加循环接收队列来完成,效果比之前好一些了!我想可能会有一些坛友会碰到类似的问题,我这算是抛砖引玉,也权当是为论坛做一些自己的绵薄之力,希望论坛越办越好,多出一些具有实战经验程序,早日超越PUDN。
void USART2_IRQHandler(void)
{
u8 res;
static u8 n = 0;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //½óêÕÖD¶Ï(½óêÕμ½μÄêy¾Y±ØDëêÇ0x0d 0x0a½áÎ2)
{
res = USART_ReceiveData(USART2);
//printf("%c",res);
switch(Recv_Status)
{
case RECV_START_HEAD1:
if(res == 0xAA)
Recv_Status = RECV_START_HEAD2;
break;
case RECV_START_HEAD2:
if(res == 0x55)
Recv_Status = RECV_ENQUEUE;
n = 0;
break;
case RECV_REAR1:
if(res == 0x0D)
Recv_Status = RECV_REAR2;
break;
case RECV_REAR2:
if(res == 0x0A) // íêÕûμÄò»Ö¡êy¾YêÕíê
{
Recv_Status = RECV_START_HEAD1;
Write_Cnt++;
if(Write_Cnt>3)
Write_Cnt = 0;
}
break;
case RECV_ENQUEUE:
RDS_BUF[Write_Cnt*8+n] = res;
n = n+1;
if(n == 8)
{
Recv_Status = RECV_REAR1;
//printf("%x-%x-%x-%x-%x-%x-%x-%x\r\n",RDS_BUF[Write_Cnt*8+0],RDS_BUF[Write_Cnt*8+1],RDS_BUF[Write_Cnt*8+2],RDS_BUF[Write_Cnt*8+3],RDS_BUF[Write_Cnt*8+4],RDS_BUF[Write_Cnt*8+5],RDS_BUF[Write_Cnt*8+6],RDS_BUF[Write_Cnt*8+7]);
}
break;
default:
break;
}
}
}
//======================================================================================
//======== ===============================================================================================
void RDS_Process(void) //
{
u8 RDS_TX_NEW_STATUS;
RDS_TX_NEW_STATUS = (QND_READ(STATUS2) & 0x80);
if(RDS_TX_STATUS != RDS_TX_NEW_STATUS) // ¿éòÔ·¢
//if(read_cnt != Write_Cnt)
{
//printf("B");
RDS_TX_STATUS = RDS_TX_NEW_STATUS;
QND_RDSLoadData(&RDS_BUF[read_cnt*8],1);
RDS_TX_TRIG();
read_cnt+=1;
read_cnt = read_cnt%4;
}
}
//======================================================================================
程序比较简单,但是理念我觉得很不错,串口处理函数将协议解析,串口接收全部涵盖在里面,所以个人认为有一定的实战意义,献丑了
|
|