各位大哥大姐 ,给我来个串口发送float型数据的例程
各位大哥大姐,给我来个串口发送float型数据的例程 本帖最后由 toofree 于 2018-6-2 00:32 编辑黄家村村长 发表于 2018-6-1 19:10
我要这种思路的
//发送16位的数据
不早说,51时这么用的比较多。
//发送float数据
void usart_send_float(float value)
{
float v_float;
unsigned char * char_p;
unsigned char i;
v_float = value;
char_p = (unsigned char *)(&v_float );
for (i=0;i<4;i++)
{
USART_SendData8(USART1, *char_p );
while( USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
}
}
//float是32位的数,但是double却不一定。改个double的
void usart_send_double (double value)
{
double v_double;
unsigned char * char_p;
unsigned char i,num;
v_double= value;
char_p = (unsigned char *)(&v_double );
num = sizeof(double);
for (i=0;i<num ;i++)
{
USART_SendData8(USART1, *char_p );
while( USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
}
}
float num=3.14;
printf("\r\nnum=%f\r\n",num); shanji 发表于 2018-6-1 18:17
float num=3.14;
printf("\r\nnum=%f\r\n",num);
我要这种思路的;P;P
//发送16位的数据
void usart_send_value(uint16_t value)
{
unsigned char temph;
unsigned char templ;
temph=(value&0xff00)>>8;
templ=value&0x00ff;
USART_SendData8(USART1, temph);
while( USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
USART_SendData8(USART1, templ);
while( USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
} 如果是发给其他的STM32的话,可以直接这样用的
uart_send_chars(uint8_*value, uint16_t length);
float tempf;
uart_send_chars((uint8_t *)&tempf, sizeof(float));
如果发给其他的单片机或计算机,就要确定一下浮点表示的标准是不是一样的,如果是一样的也可以这样发 你要发送是很简单的,直接float TxBuffer=3.14;printf("%f",TxBuffer);就可以了。倒是接受要复杂些。
发送:
float data = 1.2f;
uint8_t buf;
memcpy(buf, &data, sizeof(float));
serial_write(buf, sizeof(float));
接收:
uint8_t buf;
float data;
serial_receive(buf, sizeof(float));
memcpy(&data, buf, sizeof(float));
如果发送端和接收端的浮点数表示方法一样就可以用普通的发送方法,如果两端不同的话可以使用转成字符串形式,接收端再从字符串转成浮点数 电子星辰 发表于 2018-6-1 21:36
你要发送是很简单的,直接float TxBuffer=3.14;printf("%f",TxBuffer);就可以了。倒是接受要复杂些。 ...
;P;P;P;P 先扩大1000倍,转变成int或者long型,就可以加到数据帧里面了
页:
[1]
2