打印
[AT32F415]

USART的发送数据完成中断,到底是个什么中断?RS485该怎么切换方向?

[复制链接]
1275|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
elecwt|  楼主 | 2023-1-4 15:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
起因是RS485通信,需要控制方向脚,在数据发送完成后,将方向切换为接收。问题来了:

最开始的做法是,在DMA发送完成中断里面开启USART的“发送数据完成”中断,然后在USART的“发送数据完成”中断里面将方向切换为接收,测试发现最后两个字节发送不成功。

然后改成这样:DMA发送完成中断里面开启USART的“发送缓冲器空”中断,在“发送缓冲器空”中断再打开“发送数据完成”中断,最后才在“发送数据完成”中断里面切换方向,测试发现最后一个字节发送不成功。

那么,这个“发送数据完成”中断,到底是个什么玩意?RS485方向控制该怎么做?以前用ST的芯片,发送完成中断直接切换方向没问题,换成AT32F415,就差了两个字节发送不成功。

使用特权

评论回复
沙发
LcwSwust| | 2023-1-4 15:45 | 只看该作者
本帖最后由 LcwSwust 于 2023-1-4 15:46 编辑

似乎是这样:数据先是给缓冲区,当上一次“发送数据完成”后,缓冲区将数据转交给移位寄存器(此时发送缓冲器空),然后移位寄存器再将数据按波特率一位一位的移到TXD脚去,移完后就是“发送数据完成”。所以485最好是等待“发送数据完成”后再作切换。

使用特权

评论回复
板凳
elecwt|  楼主 | 2023-1-4 15:57 | 只看该作者
LcwSwust 发表于 2023-1-4 15:45
似乎是这样:数据先是给缓冲区,当上一次“发送数据完成”后,缓冲区将数据转交给移位寄存器(此时发送缓冲 ...

感谢回复,我的理解也是移位寄存器移位完成,才是“发送数据完成”中断。现在是在中断里面判断“发送缓冲器空”以及“发送数据完成”,才切换方向,实际测试发现最后一个字节发送失败,所以迷糊了。

使用特权

评论回复
地板
LcwSwust| | 2023-1-4 16:04 | 只看该作者
elecwt 发表于 2023-1-4 15:57
感谢回复,我的理解也是移位寄存器移位完成,才是“发送数据完成”中断。现在是在中断里面判断“发送缓冲 ...

这个时候可以借助示波器,用两个通道同时测量485芯片的DI脚、DE脚就知道切换时机对不对了。

使用特权

评论回复
5
elecwt|  楼主 | 2023-1-4 16:35 | 只看该作者
LcwSwust 发表于 2023-1-4 16:04
这个时候可以借助示波器,用两个通道同时测量485芯片的DI脚、DE脚就知道切换时机对不对了。 ...

暂时解决了,开的是“发送数据完成”中断,在中断中判断“发送缓冲器空”和“发送数据完成”都满足才切换方向。这个过程可能会多次进入中断。谢谢了

使用特权

评论回复
6
p8s| | 2023-1-5 08:42 | 只看该作者
自动控制方向方便些

使用特权

评论回复
7
elecwt|  楼主 | 2023-1-5 09:53 | 只看该作者
p8s 发表于 2023-1-5 08:42
自动控制方向方便些

需要加芯片啊

使用特权

评论回复
评论
huarana 2023-1-5 15:42 回复TA
一个三极管的事 
8
cauhorse| | 2023-1-5 13:25 | 只看该作者
为了尽快完成项目交付就加个自动流向控制的器件,要求高的话选带隔离的;
如是公司做产品要上量,还有成本控制要求,那就改改程序

使用特权

评论回复
9
xiaofei558008| | 2023-1-5 14:01 | 只看该作者
额外弄个timer 不就好了

使用特权

评论回复
10
zhxzhxzzhhxx| | 2023-1-5 14:37 | 只看该作者
本帖最后由 zhxzhxzzhhxx 于 2023-1-5 14:38 编辑

发送完整,并不意味这发送缓冲区空,数据可能还在缓冲区里,等待输出到硬件上
发送缓冲空,并不意味这串行数据就在引脚上传输完成,可能还在引脚上串行输出着
这个你放慢波特率,并用快速的MCU就能明显体会出来,
要缓冲区空,硬件引脚都完成了,才能改变方向.

使用特权

评论回复
11
袁胜富| | 2023-1-5 19:18 | 只看该作者
自动收发电路搭一个,实现自动收发,我一直用

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

23

帖子

2

粉丝