利用联合体union解决串口发送浮点数的问题

首先描述一下我遇到的问题:
用单片机将计算好的浮点数,用串口发送到上位机。串口是按字节进行发送的,那么如果发送浮点数就应该将32位的浮点数按位拆为4个字节,尝试了一些方法都不太好,最终发现用联合体union最为恰当:

union
{
    
    uint8_t i_array[4];
    uint32_t i_32;
    float    f;
}float_change;
int main(void)
{
    usart_config_t config;
    /* attach 12 MHz clock to FLEXCOMM0 (debug console) */
    CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);

    BOARD_InitPins();
    BOARD_BootClockPLL150M();
    BOARD_InitDebugConsole();     

    USART_GetDefaultConfig(&config);
    config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE;
    config.enableTx     = true;
    config.enableRx     = true;
    USART_Init(DEMO_USART, &config, DEMO_USART_CLK_FREQ);
   
    float_change.f=2.34;
    PRINTF("the initial value float:%6.3f\r\n",float_change.f);
    PRINTF("the initial value float:%x\r\n",float_change.f);
    PRINTF("the initial value intger:%x\r\n",float_change.i_32);     	   PRINTF("a3:%x,a2:%x,a1:%x,a0:%x\r\n",float_change.i_array[3],float_change.i_array[2],float_change.i_array[1],float_change.i_array[0]);

while(1) {}
}

运行后结果如下:在这里插入图片描述

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在MicroPython中使用串口发送浮点数和整数,需要使用串口通信库,如pyserial。以下是一个示例代码,该代码使用pyserial库将浮点数和整数发送串口: ```python import serial ser = serial.Serial('/dev/ttyUSB0', 9600) # 串口初始化,根据具体情况修改端口号和波特率 # 发送浮点数 f = 3.14 ser.write(str(f).encode()) # 将浮点数转换为字符串并发送串口 # 发送整数 i = 123 ser.write(str(i).encode()) # 将整数转换为字符串并发送串口 ``` 在上述代码中,我们首先使用pyserial库初始化了串口,然后将浮点数和整数转换为字符串,并通过串口发送。请注意,发送的字符串必须使用encode()方法进行编码,以便正确发送串口。 另外,如果接收方需要以相同的格式解析接收到的数据,可以在发送时在字符串中添加标识符,例如在浮点数前添加字符F,在整数前添加字符I,以便接收方正确解析数据。例如: ```python # 发送带有标识符的浮点数 f = 3.14 ser.write(('F'+str(f)).encode()) # 将带有标识符的浮点数转换为字符串并发送串口 # 发送带有标识符的整数 i = 123 ser.write(('I'+str(i)).encode()) # 将带有标识符的整数转换为字符串并发送串口 ``` 在接收方,可以使用相应的标识符来解析接收到的数据。例如: ```python data = ser.readline().decode().strip() # 读取串口接收到的数据并解码为字符串 if data.startswith('F'): f = float(data[1:]) # 解析浮点数 elif data.startswith('I'): i = int(data[1:]) # 解析整数 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值