关于485以中断的方式发送问题

2019-07-20 05:24发布

先贴代码。。。
                if((USART2->SR&0X80))//发送数据寄存器为空
                {   
                          USART2->DR =0xAA;        //往发送数据寄存器写数                                                    
                                if((USART2->SR&0X40)==0)//如果发送完成,开始进入中断发送
                                {
                                        USART2->DR =rs485buf1[count++]; //一个一个发送
                                        //count++;                               
                                }               
                        if(count>6){//直到缓存区发送完成
                          count=0;
                                RS485_TX_Set(0);//485转为接收状态
                                __HAL_UART_DISABLE_IT(&USART2_RS485Handler,UART_IT_TXE);//关闭发送中断
                        }                       
       
   }

这部分是在串口中断函数里面写的。我用了一个按键来开启发送中断,并设置485为发送状态。此时我打断点调试,然后会进入这个函数。读取串口状态,如果发送数据寄存器为空,然后填充一个数据到发送数据寄存器,硬件自动清除发送数据寄存器空标志,串口数据发送开始。此时应该是每当发送完成我就会进入中断一次,count计数就会+1.但现在打断点调试发现,我按下按键,串口会发好多个第一个字节,然后在最后的时候会出现完整的我要发送的数据,并且最后一个字节之后还多了一个FE。如果我在主while加一个延时,或者在发送完成if语句执行完之后加一个延时,按一下按键,发送完整的一串数之后还是会有FE。
我有这么几个疑惑:
1.为什么会连续发送多个第一个字节呢?加了延时就不会这种现象,这和延时有什么关系呢?发送中断不应该是我给发送数据寄存器一个数之后,当发送完成标志位置1就会进行下次中断么?
2.为什么发送完最后一个字节之后总会出现FE,也就说最后一个字节发送错误呢?
各位大佬,大神感谢伸出你们的援助之手,帮帮忙,,小弟感激不尽哇。。。。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
10101100
1楼-- · 2019-07-20 09:23
NickWu 发表于 2018-10-31 09:43
MCU確實已將資料發送出去,但資料還是得透過RS485模組發送出去才是真正的發送完畢,因此在發送後延遲一小段 ...

小哥,你的繁体字不错。根据你的提示,我是这么想的。等到串口发送完最后一个字节之后,又会触发中断,我在这个时候关闭中断,应该会好一点啊,也就是我多触发了一次中断。之前是发送完最后一个字节之后,紧接着我就关了中断,改为接收状态,我也不知道发送完成没有,就知道我已经把最后一个数据给了数据寄存器。会不会是这个原因。
10101100
2楼-- · 2019-07-20 14:54
 精彩回答 2  元偷偷看……
10101100
3楼-- · 2019-07-20 17:05
没有大神用过么,,,实在是搞不懂了
10101100
4楼-- · 2019-07-20 19:08
 精彩回答 2  元偷偷看……
NickWu
5楼-- · 2019-07-20 20:22
 精彩回答 2  元偷偷看……
NickWu
6楼-- · 2019-07-20 20:46
10101100 发表于 2018-10-31 10:15
小哥,你的繁体字不错。根据你的提示,我是这么想的。等到串口发送完最后一个字节之后,又会触发中断,我 ...

主要是RS485模組已收到你的MCU資料,但他還要把資料轉成AB訊號,這個時候你關閉DE智能腳後,他發送出去的資料就會不完全,這是我先前遇過類似的,而且當下發現RS485模組會有一個類似電感的聲音,加了延遲後再關閉DE,聲音就不見了,而且訊號就恢復正常了

一周热门 更多>