STM32上的UART接收无法正确读取缓冲区

问题描述

大家好!

目标:

  • 从Teensy4.1发送串行(UART)数据到STM32F4发现板。

我所做的:

  • 我已成功从Teensy通过串行发送了一个char数组。我已经通过示波器确认了这一点,通过诸如大力神之类的产品进行串行接收,并且还部分接收了STM32
  • 在充分重启之后,我可以在STM32中从Teensy接收串行数据

问题:

  • 问题有两个方面:
  1. 读入DMA和STM32上的缓冲区的串行数据的起始字节与Teensy发送的字节不同。要澄清的是,如果我以MSG [0]中带有“ H”的Teensy MSG形式发送“ Hallo”,则STM接收缓冲区的buffer [0]位置中没有“ H”。
Teensy: (Tx)
MSG[0] = 'H';
MSG[1] = 'a';
MSG[2] = 'l';
MSG[3] = 'l';
MSG[4] = 'o';

STM32: (Rx)
buffer[0] > a
buffer[1] > l
buffer[2] > l
buffer[3] > o
buffer[4] > H

这本身不是一个大问题,因为人们可以简单地将邮件与以前的邮件一起解析以获取真实的邮件

  1. 启动两个微控制器时,STM无法正确读取数据,并且每个存储位置中的条目都是完全垃圾。我需要重置STM几次,直到正确建立串行连接。 STM似乎开始以随机位读取传入的串行数据流。这是我的猜测,可能完全错误

一些配置详细信息:

Teensy:

void setup(){
  Serial2.begin(115200);
}
void loop(){
  char MSG[] = "Hallo";
  Serial2.write(MSG);
}


STM32:

// DMA read
  HAL_UART_Receive_DMA(&huart3,(uint8_t *)rxBufferUart3,TEENSY_INCOMING_RC_BYTES);

//USART config
  huart3.Instance = USART3;
  huart3.Init.Baudrate = 115200;
  huart3.Init.WordLength = UART_WORDLENGTH_8B;
  huart3.Init.StopBits = UART_STOPBITS_1;
  huart3.Init.Parity = UART_PARITY_NONE;
  huart3.Init.Mode = UART_MODE_TX_RX;
  huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart3.Init.OverSampling = UART_OVERSAMPLING_16;

我有点茫然。 STM UART配置是否需要其他设置才能读取Teensy发送的数据?像奇偶校验,停止位等?

任何帮助将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)