串口接收总是进溢出中断

2019-07-21 04:12发布

昨天的问题还是没有解决,接收数据老是丢,或者多,今天发现串口总是产生ORE错误,这什么造成的,大佬们给点意见

[mw_shl_code=applescript,true]void USART1_IRQHandler(void)                        //串口1中断服务程序
{
        u8 r;
        static u8 cnt = 0;
        if(USART_GetFlagStatus(USART1,USART_FLAG_ORE) != RESET)
        {
                USART_ClearFlag(USART1,USART_FLAG_ORE);
                r =USART_ReceiveData(USART1);//(USART1->DR);        //读取接收到的数据
                printf("error");
        }
       
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断
        {
                r =USART_ReceiveData(USART1);//(USART1->DR);        //读取接收到的数据
                buf[cnt ++] = r;
                if(r == ' ')
                {
                        buf[cnt] = '';
                        cnt = 0;
                        printf("%s",buf);

                }
        }
        USART_ClearFlag(USART1,USART_FLAG_RXNE);
} [/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
Gwvfbukn
1楼-- · 2019-07-21 08:29
这篇文章说的很详细
http://bbs.21ic.com/forum.php?mo ... =2511860&page=1

我把串口中断调最高先凑合解决了,DMA没有学,可以用DMA直接再从串口发出去吗?或用DMA把数据存到一个缓冲数组。这样是不是就不用进中断了?
1208
2楼-- · 2019-07-21 11:09
这个你可以利用DMA的空闲中断,论坛有相关的帖子
HXYDJ
3楼-- · 2019-07-21 13:38
把中断里面的printf去掉试试

一周热门 更多>