![stm32 做rs485通信,MCU可以接收数据,但不能发数据?stm32 做rs485通信,MCU可以接收数据,但不能发数据,第1张 stm32 做rs485通信,MCU可以接收数据,但不能发数据?stm32 做rs485通信,MCU可以接收数据,但不能发数据,第1张](/aiimages/stm32+%E5%81%9Ars485%E9%80%9A%E4%BF%A1%EF%BC%8CMCU%E5%8F%AF%E4%BB%A5%E6%8E%A5%E6%94%B6%E6%95%B0%E6%8D%AE%EF%BC%8C%E4%BD%86%E4%B8%8D%E8%83%BD%E5%8F%91%E6%95%B0%E6%8D%AE%EF%BC%9Fstm32+%E5%81%9Ars485%E9%80%9A%E4%BF%A1%EF%BC%8CMCU%E5%8F%AF%E4%BB%A5%E6%8E%A5%E6%94%B6%E6%95%B0%E6%8D%AE%EF%BC%8C%E4%BD%86%E4%B8%8D%E8%83%BD%E5%8F%91%E6%95%B0%E6%8D%AE.png)
问题能不能具体点?是完全没有接收
数据还是接收数据是错误的?RS485通讯编程要注意TX/RX切换的时间点。如果切换时间点不合适就会导致没数据或者数据收发错误,你用的是单片机的uart来实现数据收发,这就要注意uart的发送完毕的
状态标志不一定表明uart硬件已经万万完全发完电平信号,很可能数据还在uart的发送寄存器中进行某个位信号的发送,这个时候你切换了RS485芯片的TX/RX状态,那么就会导致数据发送不出去。因此由RX切换到TX状态时候要延时1ms左右(具体看硬件)再使能uart发送,当检测到uart发送完毕状态标志后也要延时几个ms(根据波特率和你设置的发送数据格式,大概计算发送8位数据+2个停止位+1个校验位所需时间),这样就可以避免数据没有发完的情况了。
广州腾霄电子的iRS-485HT隔离485收发模块,完整集成,无需额外器件,单5V供电即可实现2500V隔离和115.2kpbs的通讯速率,模块自带上下拉线电阻和TVS器件保护。
1、通过stm32配置时钟,
串口参数。
2、配置串口DMA,normal模式。
3、打开串口中断,如果不开启串口中断,则程序只能发送一次数据,程序不能判断DMA传输是否完成,USART一直处于busy状态。
4、定义局部数组,HAL_UART_Transmit_DMA发送,发现后面几个字节数据错误,把局部数组改为全局数组就没问题。
5、用std库,采用DMA给485发送数据。
评论列表(0条)