|
我需要用DMA发送,因为485需要设置方向,因此我先是在启动DMA发送前设置为发送模式,产生DMA传输完成中断中将485改为接收模式,这时候发送的数据会丢失最后两个字节。 原因是我后面发现是产生DMA 传输完成中断的时候,串口并没有完成数据传输,这时将485改成接收模式就发不出去后面的了。 然后我就在串口发送完成中断里面检测是不是发送完最后一个字节了,如果是,就将485改成接收,这时候就可以完成发送数据。 但是问题来了,串口的TC中断讲道理是每完成一个字节的传输就会产生,但是我用DMA的话 他是完成了一次buff里所有的数据传输才产生的传输完成的TC中断 , 这是怎么回事啊? |
【福利三:雨露均沾·逢7狂欢】之三:AI帮我查BUG
福利三:雨露均沾·逢7狂欢】之二:STM32F407VG串口通信乱码故障的排除
基于STM32F103的I2C主从机通信
OpenBLT移植到STM32F103战舰开发板上适用于所有STM32F103系列的Bootloader
TFT LCD 与 FSMC 的硬件连接大容量 STM32F10xxx FSMC 接口
单片机:初学者该了解的STM32F103基础知识
2025软件工具兔哥知道
STM32之继电器模块
STM32固件库分享,超全系列整理
【MCU实战经验】基于STM32F103的二轮平衡车(6轴上位机 源代...
微信公众号
手机版
可以在DMA中断后把 TC的中断打开,在TC的中断里再改RS485方向,再关掉TC中断,可以这样试试
之前我也用了串口发送完成中断,仍然数据丢失。但是在串口中断断点【一次】之后,数据就正常了。不知道原因。
出现同样情况,打断点后数据正常收发了。请问后然这么解决了?
电路设计可以消除这个问题。 用三极管做一个开关电路。RE 和 DE 接到一起 。当有检测TX电平的时候,RE DE拉高。这样只有当TX有电平的时候,就会一直使能 DE。 程序设计上 如果TC中断不行的话,那就实时检测TC flag + 延时吧,最好跑个RTOS。