【RTOS】雅特力AT32F403A开发板跑一波RT-Thread
本帖最后由 xinmeng_wit 于 2020-4-27 20:38 编辑废话就不多说了,直接上干货~~
一、硬件环境
->AT32F403A开发板
->usb现一根(话说雅特力居然没有提供usb线)
->usb转TTL模块一个
->wifi模块一个(我的是正点原子的ESP8266)
二、软件环境
->RT-Thread-master源码
->env工具
->串口调试助手
->网络调试助手
->keil mdk
->雅特力 keil支持包
三、使用env工具编译源码并下载程序到开发板
①env切换到源码bsp目录
②编译生成mdk5的工程
使用命令 scons --target=mdk5
③用mdk5打开编译后的工程
配置好at-link后直接烧录就可以看到流水灯现象了,同时串口会有数据输出
④增加AT组件
env工具输入命令menuconfig,进入rt-thread配置界面,激活AT组件client功能
⑤增加如下.c文件并加入到keil工程中,这个c文件是我自己写的,用来测试的。
#include <rtthread.h>
#include <rtdevice.h>
#include <string.h>
#include "board.h"
#include "drv_gpio.h"
#include "at.h"
at_response_t resp = RT_NULL;
void at_init(void)
{
at_client_init("uart2",512);
//创建响应结构体,最大长度为512字节,数据行数无限制,超时时间为5s
resp = at_create_resp(512,0,rt_tick_from_millisecond(5000));
if(!resp)
{
rt_kprintf("No memory for response structure!\r\n");
}
}
INIT_APP_EXPORT(at_init);
void at_test(int argc,char *argv[])
{
char *str;
// char table="AT+CIPSEND=";
// char *cmd_str=table;
if(strcmp(argv,"AT")==0)
{
at_exec_cmd(resp,"AT");//测试命令
if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
{
rt_kprintf("success\r\n");
}
else
{
rt_kprintf("fail\r\n");
}
}
else if(strcmp(argv,"RST")==0)
{
at_exec_cmd(resp,"AT+RST");//重启模块
if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
{
rt_kprintf("RST success\r\n");
}
else
{
rt_kprintf("RST fail\r\n");
}
}
else if(strcmp(argv,"CWMODE")==0)//设置模式,1-station模式,2-AP模式,3-AP+station模式
{
if(strcmp(argv,"1")==0)
{
at_exec_cmd(resp,"AT+CWMODE=1");//station模式
}
else if(strcmp(argv,"2")==0)
{
at_exec_cmd(resp,"AT+CWMODE=2");//AP模式
}
else if(strcmp(argv,"3")==0)
{
at_exec_cmd(resp,"AT+CWMODE=3");//AP+station模式
}
if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
{
rt_kprintf("CWMODE success\r\n");
}
else
{
rt_kprintf("CWMODE fail\r\n");
}
}
else if(strcmp(argv,"CWSAP")==0)//配置AP参数
{
at_exec_cmd(resp,"AT+CWSAP=\"test426\",\"12345678\",1,3");
if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
{
rt_kprintf("success\r\n");
}
else
{
rt_kprintf("fail\r\n");
}
}
else if(strcmp(argv,"CIFSR")==0)//查看本机ip
{
at_exec_cmd(resp,"AT+CIFSR");
if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
{
//rt_kprintf("success\r\n");
at_resp_parse_line_args_by_kw(resp, ".","%s" ,str);
rt_kprintf("ip=%s\r\n",str);
}
else
{
rt_kprintf("fail\r\n");
}
}
else if(strcmp(argv,"CWMODE?")==0)//查看应用模式
{
at_exec_cmd(resp,"AT+CWMODE?");
if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
{
//rt_kprintf("success\r\n");
at_resp_parse_line_args_by_kw(resp, ":","%s" ,str);
rt_kprintf("%s\r\n1-STATION,2-AP,3-STATION+AP\r\n",str);
}
else
{
rt_kprintf("fail\r\n");
}
}
else if(strcmp(argv,"CIPMUX?")==0)//查看是否建立多连接
{
at_exec_cmd(resp,"AT+CIPMUX?");
if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
{
//rt_kprintf("success\r\n");
at_resp_parse_line_args_by_kw(resp, ":","%s" ,str);
rt_kprintf("%s\r\n0-single,1-mux\r\n",str);
}
else
{
rt_kprintf("fail\r\n");
}
}
else if(strcmp(argv,"CIPMODE?")==0)//查看是透传还是非透传
{
at_exec_cmd(resp,"AT+CIPMODE?");
if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
{
//rt_kprintf("success\r\n");
at_resp_parse_line_args_by_kw(resp, ":","%s" ,str);
rt_kprintf("%s\r\n0-non-Penetrate,1-Penetrate\r\n",str);
}
else
{
rt_kprintf("fail\r\n");
}
}
else if(strcmp(argv,"CIPMUX")==0)//开启多连接模式
{
at_exec_cmd(resp,"AT+CIPMUX=1");
if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
{
rt_kprintf("success\r\n");
}
else
{
rt_kprintf("fail\r\n");
}
}
else if(strcmp(argv,"CIPSERVER")==0)//创建服务器
{
at_exec_cmd(resp,"AT+CIPSERVER=1,8080");
if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
{
rt_kprintf("success\r\n");
}
else
{
rt_kprintf("fail\r\n");
}
}
else if(strcmp(argv,"CIPSERVER_OFF")==0)//关闭服务器
{
at_exec_cmd(resp,"AT+CIPSERVER=0");
if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
{
rt_kprintf("success\r\n");
}
else
{
rt_kprintf("fail\r\n");
}
}
else if(strcmp(argv,"CIPSTATUS")==0)//查看当前连接
{
at_exec_cmd(resp,"AT+CIPSTATUS");
if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
{
//rt_kprintf("success\r\n");
at_resp_parse_line_args_by_kw(resp, ":","%s" ,str);
rt_kprintf("%s\r\n",str);
at_resp_parse_line_args_by_kw(resp, "+CIPSTATUS:","%s" ,str);
rt_kprintf("%s\r\n",str);
}
else
{
rt_kprintf("fail\r\n");
}
}
else if(strcmp(argv,"CIPSEND")==0)//发送数据
{
char cmd_table="AT+CIPSEND=";
at_exec_cmd(resp,strcat(cmd_table,argv));
if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
{
rt_kprintf("success\r\n");
at_exec_cmd(resp,"1234");
// at_resp_parse_line_args_by_kw(resp, ":","%s" ,str);
// rt_kprintf("%s\r\n",str);
// at_resp_parse_line_args_by_kw(resp, "+CIPSTATUS:","%s" ,str);
// rt_kprintf("%s\r\n",str);
}
else
{
rt_kprintf("fail\r\n");
}
}
}
MSH_CMD_EXPORT(at_test, AT Client send commands to AT Server and get response data);
⑥编译下载验证
编译下载后,连接好wifi模块,wifi模块必须接到uart2上,也就是PA2和PA3
先测试一下AT命令
返回success,说明单片机与wifi模块已打通
再测试一下其他指令:
到目前为止,wifi模块已设置为服务器并已开启
wifi的用户名为
test426
密码为
12345678
将电脑连接到该热点上,然后开发网络调试助手,就可以进行数据收发了,如下
到此,RT-Thread的AT组件测试成功。
再送您1000家园币,可以兑换礼品。
以及论坛给您寄出一份礼品,以示鼓励~
您继续加油,尽快把帖子更新、继续完善,上传方案文档哦~ 大大,我看您写的非常专业,您如果完成了作品,千万别忘记按比赛要求,做成文档,上传到论坛
文档模板在咱们参赛群里有,如果没找到,联系大掌柜单独发给您
提交作品以后,大掌柜给您寄礼品 厉害了,现在的芯片基本相当于一个系统了。想象空间无穷。。。
页:
[1]