这一节来具体分析如何代码实现,利用开发板,来实现上节课的手机与开发板的通信。
一、调试
先学习一下如何进行调试。
1.简述
我们可以根据学习手册上的步骤将MINI开发板升级为ST-Link,之后我们可以直接用ST-Link下载程序了,就不需要使用配套工具的一键下载功能了。
开发板连上ST-Link后,就可以直接用keil软件的Download下载程序。
2.CubeMX
如果我们使用CubeMX生成代码的话,开发板的调试引脚会被CubeMX默认设置为GPIO,需要我们改回来。而如果直接用keil编写代码,上电后就默认为调试引脚,不需要修改。
CubeMX配置
在CubeMX中,我们需要选择Debug选项为Serial Wire。
二、代码实现
1.在单片机代码中,我们需要验证AT指令是否发送成功,成功再继续发送下一个指令。当我们发送正确指令时,WIFI模块的回复是OK
,错误指令则回复是ERROR
。
2.同时我们还要注意到,有些指令要等一段时间才会回复OK
,因此我们在发送函数中要定义一个超时时间。
3.在WIFI模块接收的AT指令,需要通过换行符来区分每条指令,所以我们必须在每个指令的后面添加\r\n
。
4.根据上面提到的,我们需要编写一个合适的发送函数来发送数据,包括但不限于验证是否发送成功、超时控制、检测换行符。
5.为了用手机上的小程序进行通信,我们必须打印出WIFI模块的IP地址,因此需要编写一个用于获取IP地址的函数。
6.同时还需要一个函数用于发送UDP数据,发送的数据是JSON格式的,与AT指令不同。
7.最后还要一个函数用于接收数据,点亮或者点灭开发板上的LED灯。
下面解析一下部分代码:
1.发送数据函数
strcat
:字符串拼接函数,这里我们直接利用拼接函数把命令cmd把到buf中。包括第2步中的,将换行符添加到命令中。
strstr
:字符串查找函数,用于查找换行符\r\n
,当该函数找到后面的参数中的内容,就会返回该位置。
2.发送UDP数据
sprintf
:把数据写入到字符串中,因为我们获取到的字符串长度len是整型变量,而指令是字符串数据,因此不能像上面一样使用strcat
。
3.程序框架
最后再附上程序框架图。