程序有点问题
1,byte数组长度问题。这里用float的长度*2,是没有什么依据的,浮点数长度是4,但浮点数转换成字符串,长度可能有十几个字符,保险起见,建议定义为固定长度 byte[20]
2,串口输出函数,输出长度应该是strlen(byte),只输出有效部分。
另外,检查一下浮点库有没有问题
【以下回答由 GPT 生成】
在Stm32中,UART(串行通讯)模块默认只支持发送8位的数据,即字节(Byte)。而浮点数通常占用4个字节(32位)或8个字节(64位),因此需要将浮点数转换为字节数据进行发送。
以下是一种解决方案:
首先,我们需要定义一个浮点数变量并将其赋值为3.14。
float num = 3.14;
接下来,我们需要声明一个指向浮点数变量地址的指针。
uint8_t* ptr = (uint8_t*)#
现在,我们可以使用UART模块的发送函数,将浮点数的字节数据发送出去。
for (int i = 0; i < sizeof(float); i++) {
HAL_UART_Transmit(&huart1, &ptr[i], sizeof(uint8_t), HAL_MAX_DELAY);
}
#include "stm32f4xx_hal.h"
UART_HandleTypeDef huart1;
void initUART() {
// 添加初始化UART的代码
}
void sendFloatData(float num) {
uint8_t* ptr = (uint8_t*)# // 取得指向浮点数变量的地址
for (int i = 0; i < sizeof(float); i++) {
HAL_UART_Transmit(&huart1, &ptr[i], sizeof(uint8_t), HAL_MAX_DELAY);
}
}
int main() {
float num = 3.14;
initUART();
while (1) {
sendFloatData(num);
}
}
这样,你将能够成功发送浮点数数据。
请注意,接收方也需要相应的代码来将接收到的字节数据还原成浮点数。这是因为发送方和接收方必须使用相同的数据解析方式,才能正确传递浮点数数据。
【相关推荐】