利用联合体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) {}
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值