Stm32串口发送数据

img


串口不应该输出字符串的3.14吗,int类型能成功输出,为什么float不能正确输出,求解?

程序有点问题
1,byte数组长度问题。这里用float的长度*2,是没有什么依据的,浮点数长度是4,但浮点数转换成字符串,长度可能有十几个字符,保险起见,建议定义为固定长度 byte[20]
2,串口输出函数,输出长度应该是strlen(byte),只输出有效部分。

另外,检查一下浮点库有没有问题

【以下回答由 GPT 生成】

问题回答

在Stm32中,UART(串行通讯)模块默认只支持发送8位的数据,即字节(Byte)。而浮点数通常占用4个字节(32位)或8个字节(64位),因此需要将浮点数转换为字节数据进行发送。

以下是一种解决方案:

步骤1: 定义一个浮点数变量并赋值

首先,我们需要定义一个浮点数变量并将其赋值为3.14。

float num = 3.14;

步骤2: 声明一个指向浮点数变量地址的指针

接下来,我们需要声明一个指向浮点数变量地址的指针。

uint8_t* ptr = (uint8_t*)#

步骤3: 发送浮点数字节数据

现在,我们可以使用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*)&num;  // 取得指向浮点数变量的地址
    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);
    }
}

这样,你将能够成功发送浮点数数据。

请注意,接收方也需要相应的代码来将接收到的字节数据还原成浮点数。这是因为发送方和接收方必须使用相同的数据解析方式,才能正确传递浮点数数据。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^