stm32F103使用空闲中断跟AS608握手不成功

2019-08-13 20:51发布

用超时法可以握手成功,但感觉超时法还要用上一个定时器很麻烦,网上搜了搜有利用空闲中断接受不定帧数据的,然后找到了原子哥发的那个modbus的例子,在普通的串口初始化里加了两句程序:        USART2->CR1|=1<<4;          //开启串口总线空闲中断.
        USART2->CR1|=1<<5;    //接收缓冲区非空中断使能

然后中断函数这样子:
void USART2_IRQHandler(void)
{  
        u8 res;             
        if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)//接收到数据
        {         
                res =USART_ReceiveData(USART2);                 
                if((USART_RX_STA&0x8000)==0)//接收未完成
                {
                                USART2_RX_BUF[USART2_RX_STA++]=res;        //记录接收到的值         
                }
                else if(USART2->SR&(1<<4))                //空闲中断
                {
                        res=USART2->DR;                         //读SR,DR,清除IDLE位
                        USART2_RX_STA|=1<<15;                                //标记接收完成
                }
        }
}

看了下手册,好像也没什么错误,还是说有什么设置重复冲突了。
请求帮助!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
正点原子
1楼-- · 2019-08-14 00:03
如果对方发送的数据,有间隔比较长,那就不能用空闲中断了,得用超时法。空闲中断不是万能的。
environment
2楼-- · 2019-08-14 05:53
正点原子 发表于 2017-10-9 10:18
如果对方发送的数据,有间隔比较长,那就不能用空闲中断了,得用超时法。空闲中断不是万能的。

没办法换回超时法了,,,谢谢原子哥

一周热门 更多>