This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP430FR5969:关于通过 UART 发送浮点数据

Guru**** 2551570 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/592056/ccs-msp430fr5969-regarding-sending-float-data-over-uart

器件型号:MSP430FR5969

工具/软件:Code Composer Studio

请使用一个通过 UART 发送浮点数据类型的函数

#include"driverlib.h"
#include"dht22.h"
uint8_t buff = 0;
浮点温度_val = 0;
void usartinit();
void usartsenddata (uint8_t );
unsigned char *chptr;
int main (空)

WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
PM5CTL0 &=~LOCKLPM5;
clockinit();
bis_SR_register (GIE);
while (1)

temate_vall=dht22_temate_read();
_delay_cycles (320000);
CS_initClockSignal (CS_SMCLK、CS_DCOCLK_select、CS_Clock_divider);
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P2、GPIO_PIN0 + GPIO_PIN1、GPIO_secondary 模块_function);
usartinit();
chptr =(unsigned char *)&Temperature_val;
usartsenddata (* chptr ++);usartsenddata (* chptr ++);usartsenddata (* chptr ++);usartsenddata (* chptr);
//usartsenddata (buff);


void usartinit()

EUSCI_A_UART_initParam param={0};
param.clockPrescalar=52;
param.firstModRe=1;
paramm.secondModReg=73;
paramm.msborLsbFirst=eUSCI_A_UART_LSB_FIRST;
param.numerofStopBits = EUSCI_A_UART_Oe_STOP_BIT;
paramm.oversaming= eUSCI_A_uart_oversearch_BAUDRATE_generation;
paramm.param=eUSCI_A_uart_no_parity;
paramm.selectClockSource=EUSCI_A_UART_CLOCKSOURCE_SMCLK;
paramm.uartMode=eUSCI_A_uart_mode;
EUSCI_A_UART_INIT (EUSCI_A0_BASE、paramm);
EUSCI_A_UART_ENABLE (EUSCI_A0_BASE);


空 usartsenddata (uint8_t 数据)

EUSCI_A_UART_transmitData (EUSCI_A0_BASE、DATA);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Manoj,

               在 MSP430 UART Tx 缓冲区中、Rx 缓冲区大小为1字节、因此每次只能发送1字节。

    要发送整数、长整型或任何大小大于1字节的值,您必须将其断开并一次发送一个字节,然后在另一端将其转换回原始值

    例如 :如果必须发送长整型值,则为0x2FAABBFF (大小为4字节)  

                 1) 1)使数组缓冲器[4]:

                 2) 2)现在 的缓冲器[0]=0xFF

                        缓冲区[1]=0xBB

                        Buffer[2]= 0xAA

                        Buffer[3]= 0x2F

    若要通过发送、您可以使用此函数:

    void pheonix _send_data_to_PC (unsigned char * sps、unsigned char length)// 用作 Pheonix _send_data_TO_PC (buffer、4);
    {
    while (长度)
    {
    while (!(UCA1IFG & UCTXIFG));
    UCA1TXBUF =*SPS;
    长度--;
    SPS++;
    }
    
    } 

    在另一端 、使用  buffer[3]*2^32 +buffer[2]* 2^16+buffer[1]* 2^8+buffer[0]将值转换回

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    最好的方法是 sprintf()和 send ASCII。 这样、您就无需担心控制字符、并且可以在调试期间轻松读取。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、sasuke uchiha、您可以共享有关 sprintf 的任何代码引用
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    www.cplusplus.com/.../
    您可能需要增加堆。