stm32f205和esp32uart2串口通讯故障

rwj112358
Posts: 15
Joined: Sat Sep 04, 2021 1:12 pm

stm32f205和esp32uart2串口通讯故障

Postby rwj112358 » Wed Dec 15, 2021 12:52 pm

在使用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的串口例程或是串口中断的例程。

ESP_Yake
Posts: 109
Joined: Mon Mar 06, 2017 12:23 pm

Re: stm32f205和esp32uart2串口通讯故障

Postby ESP_Yake » Thu Dec 16, 2021 12:24 am

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

rwj112358
Posts: 15
Joined: Sat Sep 04, 2021 1:12 pm

Re: stm32f205和esp32uart2串口通讯故障

Postby rwj112358 » Thu Dec 16, 2021 1:53 am

谢谢解答,请问使用中断接收可以吗,是否有中断接收的例子。

Who is online

Users browsing this forum: Elimin and 53 guests