【发布时间】:2021-12-13 14:03:03
【问题描述】:
我正在尝试使用 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);
所以我想传输变量计数器和偏移量。帮帮我,谢谢。
【问题讨论】:
-
为什么不能用 same 包裹发送?
-
因为通过 UART 我不能发送超过 8 位,我错了吗?
-
但是你说的是一个包,它通常是几个字节,带有一个标识头。使用既定协议 - 不要发明新协议。
-
只有两个变量,每个变量 16 位。我将它们分成两部分,每部分 8 位。现在我想按正确的顺序接收它们。
-
Simulink 手册没有介绍吗?如果你不能发送超过一个字节而不会对序列感到困惑,那将是非常无用的。
标签: c matlab embedded stm32 simulink