[英]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.