OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2271|回复: 4

各位大佬,帮忙看看,串口1,2 接受数据,串口3将前两个串口接受的数据发送出去(一帧一帧),发现会有丢包,采用中断的方式...

[复制链接]

2

主题

7

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2016-5-24
在线时间
5 小时
发表于 2018-7-31 16:06:15 | 显示全部楼层 |阅读模式
15金钱
本帖最后由 HAOHAO 于 2018-7-31 16:13 编辑

是这样的,串口1大概每1秒接受一个300字节的包,串口2每40毫秒接受一个270字节的包,波特率设置的是57600(115200丢包现象会减少很多,但是要求不能只能57600及以下。)
下面是我的串口中断服务函数代码,求大神帮忙看看。(串口1,串口2 单独工作时无丢包现象,串口1,2同时工作时丢包率3%左右。)
串口1使用DMA存下来,收到一帧结束后用空闲中断让U3_TX发送,串口2在串口1发送时将数据存下来、再发送,串口1未发送时,串口2服务函数中直接让U3_T发送。
串口配置的代码就不上传了,下面是我串口1、2的中断服务函数代码
void USART1_IRQHandler(void)                        //′®¿ú1ÖD¶Ï·tÎñ3ìDò
        {
#ifdef OS_TICKS_PER_SEC                 //èç1ûê±Öó½úÅÄêy¶¨òåáË,ËμÃ÷òaê1óÃucosIIáË.
        OSIntEnter();   
#endif
               
        if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)  //½óêÕÖD¶Ï  
                {
                  mark1=1;
                                
                  USART_ReceiveData(USART1);
                  Usart1_Rec_Cnt = DMA_Rec_Len-DMA_GetCurrDataCounter(DMA1_Channel5);         
                        Usart3_Send(DMA_Rece_Buf,Usart1_Rec_Cnt);
                        USART_ClearITPendingBit(USART1, USART_IT_IDLE);   
                        DMA1->IFCR|=1<<13;//&#199;&#229;3yí¨μà4′&#171;ê&#228;íê3é±ê&#214;&#190;
                                                
                        MYDMA_Enable(DMA1_Channel5);                //&#187;&#214;&#184;′DMA&#214;&#184;&#213;&#235;£&#172;μè′y&#207;&#194;ò&#187;′&#206;μ&#196;&#189;óê&#213;
                        mark1=0;
         
    }
               
#ifdef OS_TICKS_PER_SEC                 //è&#231;1&#251;ê±&#214;ó&#189;ú&#197;&#196;êy&#182;¨ò&#229;á&#203;,&#203;μ&#195;÷òaê1ó&#195;ucosIIá&#203;.
        OSIntExit();                                                                                          
#endif
}

void USART2_IRQHandler(void)                        //′&#174;&#191;ú2&#214;D&#182;&#207;·t&#206;&#241;3ìDò //è&#231;1&#251;flag=1£&#172;&#190;í′&#230;&#198;eà′£&#172;è&#231;1&#251;fLag=0,&#190;íá¢&#191;ì·¢&#203;í&#161;£
{   u8 i;
                if(USART_GetFlagStatus(USART2,USART_IT_RXNE)!=RESET)//??PC???
                { // USART2->SR;
                        if(mark1==1)
                        {
                          USART_RX_BUF[USART_RX_STA]=USART_ReceiveData(USART2);
                                USART_RX_STA++;
                  }
                        else
                                {
                                        if(USART_RX_STA==0)
                                        {
                                                USART_SendData(USART3, USART_ReceiveData(USART2));
                                    while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
                                  }
                                        else
          {
            for(i=0;i< USART_RX_STA;i++)     { USART_SendData(USART3,USART_RX_BUF);    while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);                       }
                                                USART_RX_STA=0;                                       
                                        }
                   }
    }
}






最佳答案

查看完整内容[请看2#楼]

57600的波特率,1ms接收5.76个字符,40ms可以接收最多230个字符左右。 所以你要40ms收270个字符,原理上就不行了。。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-7-31 16:06:16 | 显示全部楼层
57600的波特率,1ms接收5.76个字符,40ms可以接收最多230个字符左右。  所以你要40ms收270个字符,原理上就不行了。。。。
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2016-5-24
在线时间
5 小时
 楼主| 发表于 2018-7-31 16:31:04 | 显示全部楼层
自己顶下~
回复

使用道具 举报

160

主题

967

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2097
金钱
2097
注册时间
2014-3-7
在线时间
491 小时
发表于 2018-8-2 11:17:33 | 显示全部楼层
两个串口不要同时工作试试
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2016-5-24
在线时间
5 小时
 楼主| 发表于 2018-8-2 22:08:50 | 显示全部楼层
ssssssssssss 发表于 2018-8-2 11:17
两个串口不要同时工作试试

两个不同时工作没有问题,就是两个串口同时工作时,会有数据堵塞,想着用FIFO的工作方式,队列发出去呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 03:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表