Page 1 of 1

stm32f205和esp32uart2串口通讯故障

Posted: Wed Dec 15, 2021 12:52 pm
by rwj112358
在使用stm32f205和esp32之间进行串口通讯时发现以下问题:
1.两者接收的数据有时完整,有时是几帧数据合并的。
2.测量api函数uart_read_bytes的运行时间大于接收超时时间,接收超时时间设置为50ms,测量最小50ms,最大到了96ms。

stm32f205串口:
使用dma进行收据收发,可以保证通讯速度,50ms收发一次,数据长度小于20字节,长度不定,波特率9600。

esp32串口:
在串口同时收发的例程上进行修改,在收到一定字符才会发送。使用uart2,rx_buffer设置为2048,tx_buffer为0。波特率为9600,uart_read_bytes进行数据接收,uart_write_bytes进行数据发送。修改了心跳频率为1000hz,设置超时时间为50ms,每次读20字节。

请问这个问题可以如何解决,能否提供dma的串口例程或是串口中断的例程。

Re: stm32f205和esp32uart2串口通讯故障

Posted: Thu Dec 16, 2021 12:24 am
by ESP_Yake
ESP32因为硬件的部分原因,导致DMA无法使用,目前使用的是 FIFO 方式,而 FIFO 大小是在120字节的时候触发中断,把这些数据抛到ring buffer里面去,你设置的2048就是ring buffer的大小。而这就会导致某些时候你看到的数据不是实际发的,但是你后续是可以继续读到的,如果你们对完整性有要求,那么上层应该添加协议来控制,比如加上包头确定这一包的大小,每次读完这一包再进行处理。
至于你的第二个问题, uart_read_bytes 是由长度和最后的超时时间一起控制的,比如你要读1024字节,那么在没有读到1024字节之前,除非是超时,否则会一直堵塞接收

Re: stm32f205和esp32uart2串口通讯故障

Posted: Thu Dec 16, 2021 1:53 am
by rwj112358
谢谢解答,请问使用中断接收可以吗,是否有中断接收的例子。