【发布时间】:2021-07-08 12:45:47
【问题描述】:
在 STM32L4 上使用 CAN 时,我尝试发送三种不同数据类型的数据,即浮点、布尔值和浮点值。在一条消息中可以发送 8 个字节,我在一条消息中发送所有三个数据。
我的数据看起来像
float tf;
uint16_t sl;
bool status_tf;
bool status_sl;
如果我能得到一些指导,那就太好了,我如何在单个 CAN 消息中组合所有三种数据类型?
到目前为止,我已经尝试使用带有打印格式说明符的sprintf()。并将组合结果存储在char TxData[8]; 但没有得到任何富有成效的结果。
为了发送数据,使用标准HAL_CAN_AddTxMessage()。
HAL_CAN_AddTxMessage(&hcan1, &TxHeader, TxData, &TxMailbox);
【问题讨论】:
-
scanf?你是如何使用它的?通常,CAN Bus 中不需要/不需要这样的文本处理功能。请提供有关它的代码 sn-p,以便我们了解您的用例并提出更好的替代方案。 -
对不起,我写的是'scanf'而不是'sprintf()',我像下面这样打包了我的数据。字符 TxData[8] = {0}; sprintf(TxData, 8, "%f%d%d%d", tf, sl, status_tf,status_sl ); HAL_CAN_AddTxMessage(&hcan1, &TxHeader, TxData, &TxMailbox);
-
这个方法不好,所以我想改成标准包装方法。感谢@chux,我可以将所有数据打包到一个 CAN_message 中。现在我用过; uint8_t TxData[8]={0}; memcpy();对于 'float' 和 'uint16_t' 和布尔值,我使用“bytes ^= 0b00000001
标签: floating-point boolean stm32 bytebuffer can-bus