STM32识别字符串
- 格式:doc
- 大小:39.00 KB
- 文档页数:3
判断是否字符串的方法嘿,你知道不?在编程的世界里,判断一个东西是不是字符串那可太重要啦!就好像你在一堆宝贝里找那颗闪闪发光的宝石一样,得有办法才行呀!那怎么判断是不是字符串呢?其实有不少招儿呢!首先,可以用类型判断函数呀!这就好比你有个超级侦探,能一眼看穿这个东西的本质。
比如在很多编程语言里,都有专门判断类型的函数。
如果这个函数告诉你,嘿,这就是个字符串,那准没错啦!可别小瞧这一步哦,要是判断错了,那后面的操作可就全乱套啦。
想象一下,你本来要在一幅美丽的画卷上用彩色铅笔写字,结果拿成了马克笔,那效果能一样吗?肯定不行呀!所以准确判断是不是字符串超级重要呢。
还有哦,通过一些特征来判断也很棒呢!字符串一般都有特定的格式和特点呀。
比如说,它可能有引号包围着,或者有特定的字符组合。
这就好像你在人群中找一个穿着特别衣服的人,一下子就能认出来。
要是看到一个东西,长得就像字符串的模样,那很可能就是啦!但也不能光看外表哦,还得仔细观察,万一只是个伪装者呢?在判断的过程中,安全性那也是必须要考虑的。
要是判断错了,把不是字符串的东西当成字符串来处理,那可就糟糕啦!就像你本来要走在平坦的大路上,结果却不小心走进了一个大坑。
后果不堪设想呀!所以在编程的时候,一定要小心谨慎,确保判断的准确性。
稳定性也同样重要呢。
不能说这次判断对了,下次就不行了。
这就跟盖房子一样,要是房子摇摇晃晃的,你敢住吗?肯定不敢呀!所以判断是不是字符串的方法得稳定可靠,不能一会儿行一会儿不行。
那判断是不是字符串有啥应用场景呢?哎呀,那可多了去啦!比如说在处理用户输入的时候,你得知道用户输入的是不是字符串呀。
如果用户输入了一串数字,你却当成字符串来处理,那可能就会出问题哦。
又或者在处理文件内容的时候,也需要判断是不是字符串。
这就好像你在整理书架,得知道哪些是书,哪些是杂物一样。
只有判断准确了,才能进行正确的处理。
它的优势也很明显呢!准确判断可以让程序更加高效、可靠。
在STM32中,将十进制数转换为字符串通常需要使用一些标准库函数,如sprintf()。
以下是一个简单的示例,说明如何在STM32中将十进制数转换为字符串。
首先,确保你的工程中包含了stdio.h库,因为sprintf()函数在这个库中。
以下是一个简单的代码示例:
#include <stdio.h>
void decimal_to_string(int decimal, char* str) {
sprintf(str, "%d", decimal);
}
int main() {
int decimal = 12345;
char str[20]; // 字符串缓冲区,根据需要可以调整大小
decimal_to_string(decimal, str);
// 现在,str中包含字符串"12345"
return 0;
}
这段代码中,函数decimal_to_string接受一个十进制整数和一个字符串指针作为参数。
它使用sprintf()函数将整数转换为字符串,并将结果存储在提供的字符串中。
注意,当使用sprintf()时,必须确保目标字符串有足够的空间来存储转换的结果,否则可能会导致缓冲区溢出,这可能会导致程序崩溃或其他未定义的行为。
另外,如果你正在使用STM32的HAL库,你也可以使用HAL_SPIDOM_Write函数将十进制数转换为字符串,并通过SPI总线发送。
这在你需要将十进制数发送到另一个设备时可能非常有用。
STM32使⽤FatFs1、定义⼀些变量在我们代码开始的部分,先定义⼀些变量供我们使⽤。
这⾥选择⼏个来解析⼀下。
第⼀个FIL file;这个变量是⽂件的结构体变量,记录了我们打开的⽂件的信息。
使⽤f_open等函数的时候都要⽤到。
第⼆个Words变量是⼀个字符串指针,我⽤这个指针来存储读取的字符信息。
这⾥我们就使⽤了malloc函数来分配内存,我们通过修改启动代码提供了更多的堆内存所以这⾥就可以分配⼀些给我们使⽤。
第三个是Path这个字符串,这⾥保存的是⽂件所在的路径。
关于⽂件路径的写法,请参考FatFs的官⽅⽂档。
FIL file; uint8_t Status = 0; char* Words = malloc(256); char* String = "\nWrite some words to this file by STM32F407 MCU.\n"; UINT Number = 0; char Path[16] = "/File/test.txt";2、使⽤f_open关于f_open函数的具体⽤法和详细说明,参见FatFs官⽅⽂档。
这⾥可以看看我在下⽅贴出的代码作为参考来使⽤。
3、使⽤f_read关于f_read没有特别的说明,详细的⽤法去看看FatFs官⽅⽂档⽹站。
这⾥只想说⼀下第三个和第四个参数。
这⾥的第三个参数是给定的要读取的字节数,⽽第四个参数是最后读取了的字节数的存储指针。
这⾥要说明的是,不⼀定你要读取128个字节就⼀定会读取这么多,如果遇到了⽂件尾符号就会停⽌读取。
停⽌读取的时候就会把读取的字节数写⼊到第四个参数指定的存储空间⾥。
所以我们可以通过返回的读取字节数来发送到串⼝,不需要⾃⼰数读取了多少个字节。
if(!f_open(&file, Path, FA_READ | FA_OPEN_EXISTING | FA_WRITE)) { f_read(&file, Words, 256,&Number); HAL_UART_Transmit(&huart1, (uint8_t *)Words, Number, 500); }4、使⽤f_lseek我在调⽤f_write函数之前,调⽤了⼀下f_lseek函数来移动⽂件指针。
竭诚为您提供优质文档/双击可除stm32串口接收字符串函数篇一:sTm32串口库函数版例程sTm32串口库函数版例程定义:TxD1-----pA9-us1-TxRxD1-----pA10-us1-Rx速率:115200,n,8,1[cpp]viewplaincopyprint?1./*Includes------------------------------------------------------------------*/2.#include"stm32f10x.h"3.#include"platform_config.h"4.#include"stm32f10x_usart.h"5.#include"misc.h"6.#include"stdarg.h"7.8.9.10./*privatevariables---------------------------------------------------------*/ART_InitTypeDefusART_Initstructure;12.uint8_tTxbuffer1[]="usARTInterruptexample:Thisis usART1Demo";13.uint8_tRxbuffer1[],rec_f,tx_flag;14.__Iouint8_tTxcounter1=0x00;15.__Iouint8_tRxcounter1=0x00;16.17.uint32_tRec_Len;18.19.20./*privatefunctionprototypes-----------------------------------------------*/21.voidRcc_configuration(void);22.voidgpIo_configuration(void);23.voidnVIc_configuration(void);24.25.voidDelay(__Iouint32_tncount);26.voidusART_ouT(usART_TypeDef*usARTx,uint8_t*Data, ...);27.char*itoa(intvalue,char*string,intradix);28.voidusART_config(usART_TypeDef*usARTx);29.30.31.gpIo_InitTypeDefgpIo_Initstructure;ART_InitTypeDefusART_Initstruct;ART_clockInitTypeDefusART_clockInitstruct;34.35./*********************************************** *****************************36.*名称:voidili9325_Drawpicture(u16startx,u16startY,u8Dir,u8*pic)37.*功能:在指定座标范围显示一副图片38.*入口参数:startx行起始座标39.*startY列起始座标40.*Dir图像显示方向41.*pic图片头指针42.*出口参数:无43.*说明:图片取模格式为水平扫描,16位颜色模式取模软件img2LcD44.*调用方法:ili9325_Drawpicture(0,0,0,(u16*)demo);45.************************************************ ****************************/46.voidusART_config(usART_TypeDef*usARTx){ART_ART_baudRate=115200;//速率115200bpsART_ART_wordLength=usART_wordL ength_8b;//数据位8位ART_ART_stopbits=usART_stopbits_1;//停止位1位ART_ART_parity=usART_parity_no ;//无校验位ART_ART_hardwareFlowcontrol=us ART_hardwareFlowcontrol_none;//无硬件流控ART_ART_mode=usART_mode_Rx|usA RT_mode_Tx;//收发模式53.54./*configureusART1*/ART_Init(usARTx,//配置串口参数函数56.57.58./*enableusART1ReceiveandTransmitinterrupts*/ART_ITconfig(usART1,usART_IT_Rxne,enAbLe);//使能接收中断ART_ITconfig(usART1,usART_IT_Txe,enAbLe);//使能发送缓冲空中断61.62./*enabletheusART1*/ART_cmd(usART1,enAbLe);64.}65./*********************************************** *****************************66.*名称:intmain(void)67.*功能:主函数68.*入口参数:无69.*出口参数:无70.*说明:71.*调用方法:无72.****************************************************************************/73.intmain(void)74.{75.76.uint8_ta=0;77./*systemclocksconfiguration*/78.Rcc_configuration();//系统时钟设置79.80./*嵌套向量中断控制器81.说明了usART1抢占优先级级别0(最多1位),和子优先级级别0(最多7位)*/82.nVIc_configuration();//中断源配置83.84./*对控制LeD指示灯的Io口进行了初始化,将端口配置为推挽上拉输出,口线速度为50mhz。
stm32正则表达式
STM32正则表达式是指用于STM32单片机上的正则表达式。
正则表达式是一种文本模式,用于匹配字符串中的特定字符序列。
在STM32单片机中,正则表达式可以用来对串口接收到的数据进行匹配和解析。
例如,可以使用正则表达式来匹配接收到的字符串是否符合特定的格式,如邮箱地址、电话号码等。
要在STM32单片机上使用正则表达式,需要先将正则表达式转换成适合单片机处理的格式,如FPGA。
然后,将转换后的正则表达式加载到STM32单片机中,再将接收到的数据与正则表达式进行匹配。
使用STM32正则表达式可以大幅提高串口数据处理的效率和准
确性,使得STM32单片机在实际应用中更加实用和可靠。
- 1 -。
stm32串口发送字符串STM32串口发送注意问题导读:就爱阅读网友为您分享以下“STM32串口发送注意问题”资讯,希望对您有所帮助,感谢您对的支持!使用stm32f10x调试串口通讯时,发现一个出错的现象,硬件复位重启之后,发送测试数据0x01 0x02 0x03 0x04..接收端收到的数据为:0x02 0x03 0x04,第一个数据丢失。
换成发送别的数值的数据,如0x06 0x0ff,则接收到0x0ff,0x06丢失。
错误依旧。
故障排除过程:1、刚开始怀疑是接收端的错误,我是使用电脑串口,运行串口辅助调试工具接收,换成其他软件后,发现故障依旧,而且电脑软件一直是开启状态,不像和电脑软件有关。
2、使用单步调试,单步运行各个发送指令,都正常。
能收到0x01 0x02 0x03 0x04的数据。
间接的排除了不是电脑软件的问题,而是其他的错误。
3、单步调试运行虽然正常了,但连续运行时,错误依旧。
现在有点摸不到头绪了,单步运行正常,看起来编程没有出错,那故障在哪里呢?测试程序如下USART_SendData(USART2, 0x01); //Awhile(USART_GetFlagStatus(USART2,USART_FLAG_TC) == RESET); //BUSART_SendData(USART2, 0x02); //Cwhile(USART_GetFlagStatus(USART2,USART_FLAG_TC) == RESET);USART_SendData(USART2, 0x03);while(USART_GetFlagStatus(USART2,USART_FLAG_TC) == RESET);USART_SendData(USART2, 0x04);while(USART_GetFlagStatus(USART2,USART_FLAG_TC) == RESET);4、猜测,也许是因为某个特殊原因,使第二个数据覆盖了首个数据,使得首个数据丢失。
深度探讨STM32 FATFS中文编码1. 介绍STM32是一款由意法半导体推出的微控制器,广泛应用于各种嵌入式系统中。
而FATFS是一种用于处理文件系统的软件库,可以方便地在STM32上使用。
在实际开发中,中文编码是一个常见的需求,然而在使用STM32 FATFS时,对中文编码的处理可能会遇到一些问题。
本文将深入探讨在STM32 FATFS中的中文编码处理,以及解决方案和个人观点。
2. 了解中文编码中文编码是指将汉字转换成计算机能够识别和处理的代码。
常见的中文编码方式包括GBK、UTF-8、UTF-16等。
在STM32开发中,由于资源和性能的限制,一般会选择使用较为轻量级的UTF-8编码。
然而,FATFS库本身对中文编码的支持并不完善,这就需要开发者在实际应用中进行一些处理和调整。
3. STM32 FATFS中的中文编码处理在使用STM32 FATFS进行文件操作时,如果需要处理中文编码,需要考虑以下几个方面:- 文件名的编码:在创建、读取和写入文件时,需要确保文件名的编码是正确的。
FATFS库本身对中文文件名的支持并不完善,可能会出现乱码或无法识别的情况。
- 文件内容的编码:对于文件内容中包含的中文字符,同样需要注意编码的正确性。
在读取和写入文件时,需要进行正确的编码转换,以确保数据的完整性和准确性。
针对以上问题,可以通过修改FATFS库的底层代码,或者在应用层进行特定的编码处理来解决。
可以使用一些第三方的中文编码库,或者自行实现中文编码的处理逻辑。
4. 解决方案和个人观点针对STM32 FATFS中的中文编码问题,个人认为可以从以下几个方面进行解决:- 定制化开发:针对具体的应用场景,可以进行定制化开发,实现针对性的中文编码处理逻辑。
这样可以最大程度地满足需求,但相对而言工作量较大。
- 使用第三方库:可以选择一些成熟的第三方中文编码库,比如iconv 等,来简化中文编码的处理。
这样能够节省开发时间,但可能会引入一些额外的依赖问题。
f_open打开/创建⽂件f_close关闭⽂件f_read读取⽂件f_write写⼊⽂件f_lseek移动读/写指针,扩展⼤⼩f_truncate 截断⽂件f_sync 刷新缓存数据f_forward 转移⽂件数据到⼀个数据流f_expand 为⽂件分配⼀个连续的块f_gets 读取⼀个字符串(string )f_putc写⼊⼀个字符(character )f_puts写⼊⼀个字符串(string )f_printf写⼊⼀个格式化字符串f_tell获取当前读/写指针f_eof⽂件结束测试f_size获取长度f_error测试错误f_opendir 打开⼀个⽬录f_closedir 关闭⼀个已打开的⽬录f_readdir 读取⽬录f_findfirst 打开⼀个⽬录并读取匹配的第⼀个项⽬f_findnext 查找下⼀个匹配的项⽬【STM32】使⽤SDIO 进⾏SD 卡读写,包含⽂件管理FatFs (六)-FatFs 使⽤的思路介绍本篇要来介绍⽂件管理FatFs官⽅的⽹站是:这是⼀个⽇本⼈写的,除了⽂件管理以外,还有其他的,例如解码JPEG 、红外遥控等在官⽹链接内,最下⽅有个Return ,点击后就可以看到相关的开源库以下开始正题(本⽂⾥提到的媒介,其实就是设备了,我不想改图了...)打开官⽅⽹站,页⾯简单明了,就分为4个区块(以下图⽚为FatFs 官⽹上截取的图⽚)第⼀区块、介绍及特性(Features ):FatFs 是⽂件管理系统,可⽤于SD 卡、硬盘(ATA )、RTC 时钟,FTL 和etc 不清楚是什么,另外,也可以⽤于Flash 或是EEPROM第⼆区块、应⽤接⼝(Application Interface ):FatFs 提供了接⼝,使得我们的应⽤可以和它交互。
官⽹左侧为⼀些接⼝的介绍,分四个部分第⼀部分:File Access (⽂件存取)第⼆部分:Directory Access (⽬录访问)f_stat 检查⽂件或⼦⽬录是否存在f_unlink 删除⽂件或⼦⽬录f_rename 重命名/移动⽂件或⼦⽬录f_chmod 更改⽂件或⼦⽬录的属性f_utime更改⽂件或⼦⽬录的时间戳f_mkdir创建⼦⽬录f_chdir 更改当前⽬录f_chdive 更改当前驱动f_getcwd 检索当前⽬录和驱动f_mount注册/注销⼀个⼯作区(挂起与否)f_mkfs在逻辑驱动上创建⼀个FAT 卷f_fdisk 在物理驱动上创建分区f_getfree 获取卷上的可⽤空间f_getlabel 获取卷标f_setlabel 设置卷标f_setcp设置活动代码页disk_status获取设备状态disk_initialize 初始化设备disk_read读取数据disk_write写⼊数据disk_ioctl控制设备相关功能get_fattime 获取当前时间第三部分:File and Dirextor Management (⽂件和⽬录管理)第四部分:Volume Management and System Configuration (卷管理和系统配置)第三区块、媒介访问接⼝(Media Access Interface ):你想管理的存储设备,必须要和FatFs 链接。
STM32用USART发送字符串
代码含义是:当接收引脚有数据时,状态寄存器的USART_FLAG_RXNE就会为1,此时USART_GetFlagStatus(USART1,USART_FLAG_RXNE)的返回值就为1(SET),若无数据则为RESET。
代码常见写法,及其接收数据效果
1
这种写法在不是特殊(不掉电、不待机等)情况下,问题不大,USART数据会成功发送出去。
但是在上面说的特殊情况下,问题就来了,代码只将数据放到了发送缓冲区,而没有发送出去就掉电或待机了,这个时候其实最后两个字符是没有发送出去的。
2
这种写法达到的效果和上面存在不同的就是倒数第二个数据发送出去了,也就是只有最后一个字符是没有发送出去的。
3
这种写法达到的效果和上面两种写法有不一样,发送了10个字符。
4
这种写法按理说可以实现功能,但实际多次试验结果确实第一字节数据丢失了。
5
这种写法是比较完成,为了保守起见,在特殊情况下使用该写法。
STM32 串口通信数据乱码的相关问题
STM32 串口通信以及温度采集搞定,其中主要遇到STM32 系列单片机时钟树的问题,串口通信遇到串口调试助手能够接收到数据但出现乱码现象,
开始一直以为是串口配置和程序代码问题,因为是第一次上电在线调试
STM32 板子,后面主要查串口波特率配置和收发函数程序段,如下图:
波特率设置成115200 没问题,试着降低波特率改成9600 和4800 但问题依旧没有解决,紧接着如下处理:
将重定向函数注释,单独写串口发送字节和字符串函数,依旧失败。
最后锁定到系统时钟配置上,由于手上的STM32 开发板改用了12M 的晶振,根
据单片机时钟树的理解和解读,一般采用外部时钟HSE,系统时钟配置成
72M,8*9=72,,12*6=72,对于SYSCLK、HCLK、PCLK2、PCLK1 这四个时钟的配置一般是:PCLK2 = HCLK = SYSCLK=PLLCLK = 72M,PCLK1=HCLK/2= 36M。
UART1 挂载在APB2 总线,而PCLK2 = HCLK = SYSCLK=PLLCLK = 72M,
因此在system_stm32f10x.c 文件中的setsysclockto72()函数中,(system_stm32f10x.c 文件实现了STM32 的时钟配置,操作的是片上的RCC 这个外设统在上电之后,首选会执行由汇编编写的启动文件,启动文件
中的复位函数中调用systemInit 函数就在这个文件里面定义。
systemInit 函数默认调用setsysclockto72()配置系统时钟,系统的时钟就被初始化成。
STM32接收特定字符串,滤除回车符,直接得到所需字符串
分配USART2用于实现此功能
考虑很久,接收不打算用while(1)查询的方式实现了,浪费时钟周期,直接中断实现
USART配置
/******************************串口函数******************************/
void USART_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
//第1步:打开GPIO和USART部件的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); //打开GPIOA时钟允许复用
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //打开USART1时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //打开USART2时钟
// 第2步:将USART Tx的GPIO配置为推挽复用模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_9; //Pin_2 - USART2_TX Pin_9 - USART1_TX
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 第3步:将USART Rx的GPIO配置为浮空输入模式
// 由于CPU复位后,GPIO缺省都是浮空输入模式,因此下面这个步骤不是必须的
// 但是,我还是建议加上便于阅读,并且防止其它地方修改了这个口线的设置参数
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_10; //Pin_3 - USART2_RX Pin_10 - USART1_RX
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 第4步:配置USART 数据格式、波特率等参数
// - BaudRate = 115200 baud
// - Word Length = 8 Bits
// - One Stop Bit
// - No parity
// - Hardware flow control disabled (RTS and CTS signals)
// - Receive and transmit enabled
USART_ART_BaudRate = 115200; //USARTDIV=72000000/(115200*16)=39.0625对应误差率为0(查看参考手册)
USART_ART_WordLength = USART_WordLength_8b;
USART_ART_StopBits = USART_StopBits_1;
USART_ART_Parity = USART_Parity_No;
USART_ART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_ART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
USART_Init(USART2, &USART_InitStructure);
// 第5步:使能 USART,配置完毕
USART_Cmd(USART1, ENABLE);
USART_Cmd(USART2, ENABLE);
//CPU的小缺陷:串口配置好,如果直接Send,则第1个字节发送不出去
//如下语句解决第1个字节无法正确发送出去的问题
USART_ClearFlag(USART1, USART_FLAG_TC); //清发送外城标志,Transmission Complete flag USART_ClearFlag(USART2, USART_FLAG_TC);
//USART2要与wifi通信,因此需要接收命令,这里使用串口中断接收命令
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //配置优先级组1
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级2级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
//使能收发中断
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
}
我们日常所说的回车(ENTER)其实分为两步:回车:ASCII-0x0d 换行:ASCII-0x0a,接收的话必须要都滤除0x0d,0x0a,才能正常判断接收到的字符串,于是,索性接收到这两个字符串都不要,扔了就行
void USART2_IRQHandler(void)
{
uint8_t tmp;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //判断发生接收中断
{
tmp = USART_ReceiveData(USART2);
if((tmp==0x0d)||(tmp==0x0a))
{
Rx_Lenght=0;
Rx_flg=1;
USART_ClearITPendingBit(USART2, USART_IT_RXNE); //清除中断标志
}
else
{
Rx_Buffer[Rx_Lenght] = tmp;
Rx_Lenght++;
}
}
void USART2_TX(char * str)//发送就用这种方式了,发送给模块的指令并不长,所以不会浪费太多时钟{
while(*str)
{
USART_SendData(USART2, *str++);
// Loop until the end of transmission
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
}
}
完成中断接受字符串之后,就是比较特定字符串了,
int USART1_Receive(const char *str)
{
if(memcmp(U1Rx_Buffer, str , strlen(str))==0)
return 1;
else return 0;
}
Memcmp();这是C语言中对比存储空间中内容是否一样的函数(C语言中对于字符串的操作一些函数可见此博客:/justeasy123/item/baa1484602b3552911ee1e69)。
字符串对比函数如果返回1,则说明接收到了我们需要的字符串,否则没有接收到特定字符串。
接收到特定字符串之后则可以做出特定的程序反应:
if(USART1_Receive("enter WIFI config")) USART2_TX(wifi_cmd_$$$);
if(USART1_Receive("set ip address")) USART2_TX(set_ip_address);
if(USART1_Receive("set ip netmask")) USART2_TX(set_ip_netmask);
if(USART1_Receive("set ip gateway")) USART2_TX(set_ip_gateway);
if(USART1_Receive("set ip localport")) USART2_TX(set_ip_localport);
if(USART1_Receive("set ip host")) USART2_TX(set_ip_host);
if(USART1_Receive("set ip remote")) USART2_TX(set_ip_remote);
if(USART1_Receive("set ip protocol")) USART2_TX(set_ip_protocol);。