打印
[uCOS/RTOS]

【RTOS】雅特力AT32F403A开发板跑一波RT-Thread

[复制链接]
2949|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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[40]="AT+CIPSEND=";
//                char *cmd_str=table;
        if(strcmp(argv[1],"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[1],"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[1],"CWMODE")==0)//设置模式,1-station模式,2-AP模式,3-AP+station模式
        {
                if(strcmp(argv[2],"1")==0)
                {
                        at_exec_cmd(resp,"AT+CWMODE=1");//station模式
                }
                else if(strcmp(argv[2],"2")==0)
                {
                        at_exec_cmd(resp,"AT+CWMODE=2");//AP模式
                }
                else if(strcmp(argv[2],"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[1],"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[1],"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[1],"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[1],"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[1],"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[1],"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[1],"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[1],"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[1],"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[1],"CIPSEND")==0)//发送数据
        {
                char cmd_table[40]="AT+CIPSEND=";
                at_exec_cmd(resp,strcat(cmd_table,argv[2]));
                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组件测试成功。




使用特权

评论回复

相关帖子

沙发
21ic小喇叭| | 2020-5-9 16:48 | 只看该作者
再送您1000家园币,可以兑换礼品。

以及论坛给您寄出一份礼品,以示鼓励~

您继续加油,尽快把帖子更新、继续完善,上传方案文档哦~

使用特权

评论回复
板凳
21ic小喇叭| | 2020-6-5 11:10 | 只看该作者
大大,我看您写的非常专业,您如果完成了作品,千万别忘记按比赛要求,做成文档,上传到论坛

文档模板在咱们参赛群里有,如果没找到,联系大掌柜单独发给您

提交作品以后,大掌柜给您寄礼品

使用特权

评论回复
地板
sch_l| | 2020-6-20 15:00 | 只看该作者

使用特权

评论回复
5
hua_ren| | 2020-6-29 10:20 | 只看该作者
厉害了,现在的芯片基本相当于一个系统了。想象空间无穷。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

240

帖子

1

粉丝