STM32一个串口发送多个数据的双机通信问题,用的是lora

如何通过一个串口向另外一个32单片机同时传递温度,湿度,角度数据,保证另外一个单片机准确接收并且在oled显示(我有点不明白串口里面给的库函数有个USARTSendData(USART2,*data)那个data只能传一个变量啊,咋样传递我上面那些数据啊),有谁帮帮我,谁有思路呀

data可以定义为一个数组,如USARTSendData(USART1, RxBuffer[TxCounter]);
data也可以定义为一个结构体,结构体里包含温度,湿度,角度等。

如果该函数只能发送一个值,那循环发送不就可以达到发送字符串的目的了吗


```c
char buf[]="hello";
for(int i=0;i<strlen(buf);i++)
{
  USARTSendData(USART2,buf[i]);
}

```

简单解决:
发射端:将数据循环发送,可以将Usart映射到printf,比较方便。
或者可以自己写一个printf

#include "stdarg.h"
#include "string.h"
#include "stdio.h"
#include "string.h"
#include "stdio.h"

uint8_t USART1_RX_BUF[200];     
uint16_t USART1_RX_STA=0;                           
uint8_t USART1_TX_BUF[200]; 
void u1_printf(char* fmt,...)  
{  
    uint16_t i,j; 
    va_list ap; 
    va_start(ap,fmt);
    vsprintf((char*)USART1_TX_BUF,fmt,ap);
    va_end(ap);
    i=strlen((const char*)USART1_TX_BUF);        
    for(j=0;j<i;j++)                        
    {
        while((USART1->SR&0X40)==0);            
        USART1->DR=USART1_TX_BUF[j];  
    } 
}

接收端:将数据循环接收(创建一个缓冲数组),按照发送顺序解包(解缓冲数组)就行。
优化:
将Usart+DMA的方式,可以直接调用HAL自带的函数,可以实现其发送。
参考:

void tx_dma_enable(uint8_t *data, uint16_t len)
{
    //disable DMA
    __HAL_DMA_DISABLE(&hdma_usart1_tx);
    while(hdma_usart1_tx.Instance->CR & DMA_SxCR_EN)
  {
    __HAL_DMA_DISABLE(&hdma_usart1_tx);
  }
    __HAL_DMA_CLEAR_FLAG(&hdma_usart1_tx, DMA_HISR_TCIF7);
    
    hdma_usart1_tx.Instance->M0AR = (uint32_t)(data);
  __HAL_DMA_SET_COUNTER(&hdma_usart1_tx, len);
    
    __HAL_DMA_ENABLE(&hdma_usart1_tx);
}

接收端:采用Usart+DMA+Fifo的方式,网上页挺多这个教程。
我们可以去网上使用一个小型的fifo开源库就行。
我们分字节进行结算,这里就不做展示了。
望题主采纳谢谢。

参考一下这篇文章
https://blog.csdn.net/HHHSSD/article/details/115226382

把截图发上来才能进一步分析

这个需要写一个简单的通信协议,详细的可以参考下面这篇文章,基本可以满足你的要求。
https://www.csdn.net/tags/MtjacgysMDIzMjgtYmxvZwO0O0OO0O0O.html

总结一下STM32通过串口实现双机通信的方法,主机通过串口一发送,从机通过串口三接收,其他串口配置类似。
https://blog.csdn.net/weixin_42280621/article/details/86268012