Estoy intentando enviar datos por STM32f103 a una placa Arduino usando UART. Los datos no se reciben correctamente. El código se genera utilizando STM32CUBEMX y aquí está la parte que agregué:
Código STM32 (Transmitir):
uint8_t Test[] = "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 \n"; //Data to send
HAL_UART_Transmit(&huart1,Test,sizeof(Test),10);// Sending in normal mode
HAL_Delay(1000);
HAL_UART_Transmit_DMA(&huart1,Test,sizeof(Test));// Sending in DMA mode
HAL_Delay(1000);
/* USART1 init function */
static void MX_USART1_UART_Init(void)
{
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
Error_Handler();
}
}
los datos recibidos son:
{1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1}
enter code here
tanto en modo DMA como en modo normal, los datos recibidos son bastante similares. La velocidad en baudios de UART es 115200.
¿Por qué se truncan mis datos? ¿Es un problema de límites de matriz? ¿O estoy llegando al límite de mi búfer?
Editar:
Código Arduino (Recibir):
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 9); // RX, TX ports
void setup() {
// set the data baud rate
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect.
}
mySerial.begin(115200);
}
void loop() {
if (mySerial.available()) {
Serial.write(mySerial.read());
}
}
La transmisión de datos funciona bien entre dos placas Arduino.