STM32串口接收变量(浮点型 float;整型int)

该博客介绍了如何使用STM32通过串口接收从设备发送的数据,并将其转换为浮点型存储在数组中。从设备数据格式为[变量一,变量二,变量三],接收函数通过中断单次处理一个字符,利用静态变量保留历史数据,使用atof函数将字符串转换为浮点数。同时,博客强调了关键点,如静态变量的作用、atof函数的使用、sizeof的计算及memset的内存初始化功能。

一,原理

主设备(stm32)串口接收数据时,使用单次中断即接收一个字符后触发中断。
从设备串口发送的数据格式为 [变量一,变量二,变量三] (方括号和逗号不可缺少),例如:[-12.3,12,234] ;注意发送的变量(包括小数点和负号)长度小于8,小数点后位数最好小于2位。
函数将接收到的变量转换成实数(浮点型 float;整型int)储存在(arrays)数组中,数组默认保存三个实数(可更改)。

二,函数代码

/**
*函数功能  :接收到的数据转换成浮点型
*rx   	  :单次接收到的字符
*arrays	  :浮点型数组   默认可储存三个数据
**/
void Read_Usart(char rx,float *arrays)
{
	static char shuzu[3][8]={0};		//接收3个数据(可更改),每个数据包含小数点和负号可容纳8位(十进制)  发送的字符(包含点.在内)长度最好<8
	static int begin=0,x=0,y=0;		//有效数据标志,二维数组元素变量
	int num;
	if(rx=='[')		//起始标志
	{
		begin=1;
		x=0;
		y=0;
	}
	else if(rx==']')	//结束标志 在结束时字符转换为实数
	{
		begin=0;
		for(num=0;num<=x;num++)
		{
			arrays[num]=(float)atof(shuzu[num]);//需要添加头文件<stdlib.h>
		}
		/* 打印数据 */
		for(num=0;num<=x;num++)
		{
			printf("%d : %f\r\n",num+1,arrays[num]);
		}
		printf("\r\n");
		memset(shuzu,0,sizeof(shuzu));	//清空数组,初始化为0
	}
	else if(rx==',')
	{
		x++;
		y=0;
	}
	else if(begin==1)
	{
		shuzu[x][y]=rx;
		y++;
	}	
}

三,重点

1,static: 静态变量,保证每次接收数据时,之前的数据不会被覆盖。
2,atof :一个字符串处理函数,功能是把字符串转换成浮点数,使用时 头文件为<stdlib.h>,语法格式为:double atof(const char *nptr)。
3,sizeof:一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位);例如:shuzu[]={“1234”}, num=sizeof(shuzu); num的值为5(包括\n)。
4,memset:作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作;头文件<string.h>;

评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值