STM32接收变量(字符串转float)

阅读: 评论:0

STM32接收变量(字符串转float)

STM32接收变量(字符串转float)

STM32接收变量(字符串转float)

  • 一、功能
  • 二、代码
  • 三、测试效果

一、功能

   stm32串口接收一个字符串,调用函数把特定形式的字符串(如:[-12.4,43.2,8.13])转化为float型数据,实现单片机见的串口通信。

二、代码

   先定义字符串数组和浮点数数组,定义指针指向浮点型数组。

#define MAX_RECV_LEN 1024 
uint8_t msg_buff[MAX_RECV_LEN] = {0};
float message[6] = {0};
float *msg = message;

   串口重定向。

#include "stdio.h"
/********************串口重定向**********************/
int fputc(int ch, FILE *f){uint8_t temp[1] = {ch};HAL_UART_Transmit(&huart1, temp, 1, 2);return ch;
}
int fgetc(FILE *f){uint8_t ch;HAL_UART_Receive(&huart1, &ch, 1, 2);return ch;
}

   主函数while(1)里添加以下代码 。

scanf("%s", msg_buff);Read_Usart(msg_buff, msg);printf("%f, %f, %f, %f, %f, %frn", message[0], message[1],message[2], message[3], message[4], message[5]);

   主函数外添加以下代码(注意在主函数前进行函数声明)。

/**
*函数功能  :接收到的数据转换成浮点型
*rx   	  :接收到的字符串
*arrays	  :浮点型数组
**/
void Read_Usart(uint8_t *rx,float *arrays)
{static char shuzu[6][8]={0};	//接收数据,每个数据包含小数点和负号可容纳8位(十进制)  发送的字符(包含点.在内)长度最好<8static int begin=0,x=0,y=0;		//有效数据标志,二维数组元素变量int num;for(int i=0;; i++){if(rx[i]=='['){		//起始标志begin=1;x=0;y=0;}else if(rx[i]==']'){	//结束标志 在结束时字符转换为实数begin=0;for(num=0;num<=x;num++)arrays[num]=(float)atof(shuzu[num]);memset(shuzu,0,sizeof(shuzu));	//清空数组,初始化为0break;}else if(rx[i]==','){x++;y=0;}else if(begin==1){shuzu[x][y]=rx[i];y++;}	}
}

三、测试效果

  ​​ 可以看到字符串数转成float型数据打印出来。
​​

代码参考了「C-百川归海-L」的原创文章。原文链接:

本文发布于:2024-02-02 19:56:50,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170687501046085.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:字符串   变量   float
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23