一,原理
主设备(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>;