问题背景
- 客户使用APM32F030C8T6,产品需求通过软件控制,实现串口“单线TX+RX收发”。
- TX发送使用DMA,RX接收使用接收中断
- 电路结构如下图
实现方案
可参考《F030_串口单线控制TX_RX》例程
- 在适当的地方调用“开RX关TX”、“开TX关RX”
- 默认串口是处于“仅接收模式”,需要发送时再开启“仅发送模式”
- 在DMA 搬运完成中断里,重新开启“仅接收模式”
- 注意:DMA搬运完成,不代表串口TX发送也已经完成了——如果在DMA完成中断里,直接开启“仅接收模式”,那么MCU会误触发RX完成中断(RX重新开启得太早了!),不符合客户需求。
- 需要等待串口TXC置位后,保证TX发送是真实完成了,再开始“仅接收模式”
- 实测,从进入DMA搬运完成事件,到串口TXC完成——
- 如果是115200bps,耗时170us左右,还是很快的。
- 如果是9600bps,要耗时2ms。
- 考虑到客户需要9600bps的波特率,不宜在DMA完成中断里死等2ms这么长的事件。
- 建议方案——在主循环里同时判断这2个条件:①判断TXC置位的操作 ②新定义软件标志位DMA_Flag(代表DMA搬运完成)。如果都满足,再调用OpenRX_CloseTx()
|