我目前正試圖通過USB發送漂浮物。 的PC具有與DEBUGLOG函數I可以清楚地看到一系列字節穿過與根據此網站下列順序STM32通過USB從PC上漂浮,終結困難
.. 00 00 00 40 ..
運行下面的代碼
float x = 2.0;
memcpy(buffer.data() + 14, &x, sizeof x);
Qt應用程序
http://www.scadacore.com/field-tools/programming-calculators/online-hex-converter/
轉換爲1073741824,以防止少許內存。
我STM32我可以使用下面的代碼然後打開LED4
uint32_t a = buffer[14] | (buffer[15] << 8) | (buffer[16] << 16) | (buffer[17] << 24);
if (a == 1073741824){
HAL_GPIO_WritePin(LED4_PORT, LED4_PIN, GPIO_PIN_RESET);
}
問題出現時,我想轉換爲真正的浮點值2.0
事實上,如果我做
float b = buffer[14] | (buffer[15] << 8) | (buffer[16] << 16) | (buffer[17] << 24);
if (b == 2.0f){
HAL_GPIO_WritePin(LED5_PORT, LED5_PIN, GPIO_PIN_RESET);
}
LED5未打開。
這是一個endianess問題嗎? 我如何獲得浮點值2.0?
問候,
將漂浮物作爲ASCII文本發送,並將它們轉換回另一端。它更安全,更簡單。 – ThingyWotsit
帶終止字符(「CR」或「NUL」)的「2.0」與單個字符的大小相同,只要雙方都知道該協議,然後就可以與任何事情進行大多數通信,就不會輕易被誤解。此外,使用終止字符的協議避免了流式連接的問題,其中rx調用返回的'早'字節數少於完整消息/浮點數所需的字節數。 – ThingyWotsit
你能舉個例子嗎? – Luigi