目录
一、前言
二、实践与代码
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);//发送串口数据
}
该类型常被写为uint8,并且在数据传输中起到了非常重要的作用,以下操作均与该类型有关。
本方法常用于清空数组内的值,以便下一次接收数据。
本方法常见于数据的格式化输出,可以将英文等字符存入uint8类型数组中,便于下一步的发送或展示。
如果我们需要将某些数据代入,其格式化方法与C语言一致!
本方法可将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);
}
}
}
本方法与上述方法类似,但用于接收浮点型数据,并用float类型变量承接,可做数据运算。
本方法即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);
}
}
}
本函数常用于文本分割,例如传输多个数据,可以分别取出,因此该函数较为重点。
该函数的使用方法为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);
}
}
}
本函数使用方法较为简单,可以返回字符串长度,使用int变量承接或直接做比较运算。
本函数使用在单片机中不太广泛,但依然很重要,该函数可以将字符串b的值赋给字符串a。这是由于字符串不能直接赋值衍生的方法。
该函数用于字符串拼接,可将字符串B拼接到字符串A后,但字符串A要有足够的空间!
以上可以说在单片机开发中十分常用,无论是芯片间通信或者其他展示,都十分方便,但要注意,以上的传输的格式为ASCII传输格式。