簡體   English   中英

如何為 UART 傳輸設置消息開始的字節

[英]How to set a byte of start of message for a UART transmission

我正在嘗試使用 UART,從 stm32 Nucleo 到 Matlab Simulink,傳輸一定量的數據。 更准確地說,我想傳輸兩個 uint16 變量。 我將它們分成兩個包,每個包 1 個字節。 問題是,當我在 Simulink 上收到它們時,並不能保證 SIMulink 以正確的順序獲取包,所以我必須實現一些讓我了解消息的開始位置的東西。 我正在努力做到這一點,但目前我沒有成功。 我想指定在 Simulink 中我可以寫消息的標題,所以我認為我只需要在我的 stm32 板中設置它。

這是我的代碼:

//Serial Stream Routine
         if ((streamActive != 0) && (dataReady == 1))
         {
             do{
                     //Sending the first byte of counter
                     firstbyte = counter & 0xFF;
                     memcpy(str, &firstbyte, 1);
                     HAL_UART_Transmit(&huart2, str, 1, HAL_MAX_DELAY);
                     //Sending the second byte of counter
                     secondbyte =(counter >> 8) & 0xFF ;
                     memcpy(str, &secondbyte, 1);
                     HAL_UART_Transmit(&huart2, str, 1, HAL_MAX_DELAY);

                     if(streamActive == 2){ //We transmit the counter with an offset

                         offset = counter + OFFSET_VALUE;

                         //Sending the first byte of offset
                         firstbyte = offset & 0xFF;
                         memcpy(str, &firstbyte, 1);
                         HAL_UART_Transmit(&huart2, str, 1, HAL_MAX_DELAY);
                         //Sending the second byte of offset
                         secondbyte =(offset >> 8) & 0xFF ;
                         memcpy(str, &secondbyte, 1);
                         HAL_UART_Transmit(&huart2, str, 1, HAL_MAX_DELAY);
                     }

                     counter++;
                     dataReady = 0;
                 }while(counter < MAX_VALUE);

所以我想傳輸變量計數器和偏移量。 幫幫我,謝謝。

現在我想以正確的順序接收它們

添加標頭和 PC 和 ARM Corex 都是小端,因此足以:

         do{
                 HAL_UART_Transmit(&huart2, (void *)"START", 5, HAL_MAX_DELAY);
                 HAL_UART_Transmit(&huart2, (void *)&counter, 2, HAL_MAX_DELAY);
                 if(streamActive == 2){ //We transmit the counter with an offset
                     offset = counter + OFFSET_VALUE;
                     HAL_UART_Transmit(&huart2, (void *)"START", 5, HAL_MAX_DELAY);
                     HAL_UART_Transmit(&huart2, (void *)&offset, 2, HAL_MAX_DELAY);
                 }
                 counter++;
                 dataReady = 0;
            }while(counter < MAX_VALUE);


And in simulink (matlab command): uint16('START') 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM