数据传输中的数据转换与处理的常用方法-物联网开发-单片机通信

目录

一、前言

二、实践与代码

        1.Unsigned Char

        2.memset

        3.sprintf

        4.atoi

        5.atof

        6.strcmp

        7.strtok

        8.strlen

        9.strcpy

        10.strcat

三、总结


一、前言

        本文将以STM32单片机为基础,使用Keil5环境展示以下方法。

        在单片机通信、载波通信中,常常涉及数据的转换,本文将为大家分享若干方法,借助串口调试助手,实现其数据通信的功能。

二、实践与代码

        基础代码:

unsigned char data[10];
int main( void )
{
    Init();
    USART1_Init(9600);//初始化串口
	HAL_Delay(500);
	USART1_SendStr(data,10);//发送串口数据
}

        1.Unsigned Char

        该类型常被写为uint8,并且在数据传输中起到了非常重要的作用,以下操作均与该类型有关。

        2.memset

        本方法常用于清空数组内的值,以便下一次接收数据。

        3.sprintf

        本方法常见于数据的格式化输出,可以将英文等字符存入uint8类型数组中,便于下一步的发送或展示。

        如果我们需要将某些数据代入,其格式化方法与C语言一致!

 

        4.atoi

        本方法可将unsigned char类型转换成int类型,使用int类型变量承接,随后可以做数据运算。

unsigned char data[10];
int num=0;
int main( void )
{
    Init();
		USART1_Init(9600);//初始化串口
		while(1)
		{
			HAL_Delay(100);
			memset(data,'\0',10);//清空数据数组
			if(USART1_ReadRxBuffer(data)!=0)//接收串口数据
			{
				num=atoi((char *)data);//使用atoi方法转换成int类型
				num=num*2;//做数据运算
				sprintf((char *)data,"num= %d",num);
				USART1_SendStr(data,10);
			}
			
		}
}

        5.atof

        本方法与上述方法类似,但用于接收浮点型数据,并用float类型变量承接,可做数据运算。

        6.strcmp

        本方法即String compare,字符串比较,相等时值为0,常用于判断,亦可根据字母判断字符串大小。

        下列为一个判断输入是否为data的例程:

unsigned char data[10];
float num=0;
int main( void )
{
    Init();
		USART1_Init(9600);//初始化串口
		while(1)
		{
			HAL_Delay(100);
			memset(data,'\0',10);//清空数据数组
			if(USART1_ReadRxBuffer(data)!=0)//接收串口数据
			{
				if(strcmp((char *)data,"data")==0)//判断字符串是否为data
				{
					memset(data,'\0',10);//清空数据数组
					sprintf((char *)data,"true");
				}
				else
				{
					memset(data,'\0',10);//清空数据数组
					sprintf((char *)data,"false");
				}
				USART1_SendStr(data,10);
			}
			
		}
}

 

        7.strtok

        本函数常用于文本分割,例如传输多个数据,可以分别取出,因此该函数较为重点。

        该函数的使用方法为strtok(data,flag),其中data为要分割的数据,flag为分割符,若data为NULL则将会自动从上一次分割后的文本继续分割。

        下面将是一个发送两个数据的例程,以‘,’为分隔符。

unsigned char data[20];
float temp=0,hum=0;
int main( void )
{
    Init();
		USART1_Init(9600);//初始化串口
		while(1)
		{
			HAL_Delay(100);
			memset(data,'\0',10);//清空数据数组
			if(USART1_ReadRxBuffer(data)!=0)//接收串口数据
			{
				temp=atof(strtok((char *)data,","));//以‘,’为分隔符分隔
				hum=atof(strtok(NULL,","));//采用上一次分割后的文本
				memset(data,'\0',20);
				sprintf((char *)data,"tem=%.2f,hum=%.2f",temp,hum);
				USART1_SendStr(data,20);
			}
		}
}

        8.strlen

        本函数使用方法较为简单,可以返回字符串长度,使用int变量承接或直接做比较运算。

        9.strcpy

        本函数使用在单片机中不太广泛,但依然很重要,该函数可以将字符串b的值赋给字符串a。这是由于字符串不能直接赋值衍生的方法。

        10.strcat

        该函数用于字符串拼接,可将字符串B拼接到字符串A后,但字符串A要有足够的空间!

三、总结

        以上可以说在单片机开发中十分常用,无论是芯片间通信或者其他展示,都十分方便,但要注意,以上的传输的格式为ASCII传输格式。

猜你喜欢

转载自blog.csdn.net/qq_39724355/article/details/131134590