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

[复制链接]
3421|5
 楼主| xinmeng_wit 发表于 2020-4-27 20:34 | 显示全部楼层 |阅读模式
本帖最后由 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文件是我自己写的,用来测试的。

  1. #include <rtthread.h>
  2. #include <rtdevice.h>
  3. #include <string.h>
  4. #include "board.h"
  5. #include "drv_gpio.h"
  6. #include "at.h"

  7. at_response_t resp = RT_NULL;

  8. void at_init(void)
  9. {
  10.         at_client_init("uart2",  512);
  11.         
  12.         //创建响应结构体,最大长度为512字节,数据行数无限制,超时时间为5s
  13.         resp = at_create_resp(512,0,rt_tick_from_millisecond(5000));
  14.         if(!resp)
  15.         {
  16.                 rt_kprintf("No memory for response structure!\r\n");
  17.         }
  18. }
  19. INIT_APP_EXPORT(at_init);

  20. void at_test(int argc,char *argv[])
  21. {
  22.         char *str;
  23. //                        char table[40]="AT+CIPSEND=";
  24. //                char *cmd_str=table;
  25.         if(strcmp(argv[1],"AT")==0)
  26.         {
  27.                 at_exec_cmd(resp,"AT");//测试命令
  28.                 if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
  29.                 {
  30.                         rt_kprintf("success\r\n");
  31.                 }
  32.                 else
  33.                 {
  34.                         rt_kprintf("fail\r\n");
  35.                 }               
  36.                
  37.         }
  38.         else if(strcmp(argv[1],"RST")==0)
  39.         {
  40.                 at_exec_cmd(resp,"AT+RST");//重启模块
  41.                 if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
  42.                 {
  43.                         rt_kprintf("RST success\r\n");
  44.                 }
  45.                 else
  46.                 {
  47.                         rt_kprintf("RST fail\r\n");
  48.                 }               
  49.         }
  50.         else if(strcmp(argv[1],"CWMODE")==0)//设置模式,1-station模式,2-AP模式,3-AP+station模式
  51.         {
  52.                 if(strcmp(argv[2],"1")==0)
  53.                 {
  54.                         at_exec_cmd(resp,"AT+CWMODE=1");//station模式
  55.                 }
  56.                 else if(strcmp(argv[2],"2")==0)
  57.                 {
  58.                         at_exec_cmd(resp,"AT+CWMODE=2");//AP模式
  59.                 }
  60.                 else if(strcmp(argv[2],"3")==0)
  61.                 {
  62.                         at_exec_cmd(resp,"AT+CWMODE=3");//AP+station模式
  63.                 }
  64.                 if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
  65.                 {
  66.                         rt_kprintf("CWMODE success\r\n");
  67.                 }
  68.                 else
  69.                 {
  70.                         rt_kprintf("CWMODE fail\r\n");
  71.                 }               
  72.         }               
  73.         else if(strcmp(argv[1],"CWSAP")==0)//配置AP参数
  74.         {
  75.                 at_exec_cmd(resp,"AT+CWSAP="test426","12345678",1,3");
  76.                 if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
  77.                 {
  78.                         rt_kprintf("success\r\n");
  79.                 }
  80.                 else
  81.                 {
  82.                         rt_kprintf("fail\r\n");
  83.                 }               
  84.         }        
  85.         else if(strcmp(argv[1],"CIFSR")==0)//查看本机ip
  86.         {
  87.                 at_exec_cmd(resp,"AT+CIFSR");
  88.                 if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
  89.                 {
  90.                         //rt_kprintf("success\r\n");
  91.                         at_resp_parse_line_args_by_kw(resp, ".","%s" ,str);
  92.                         rt_kprintf("ip=%s\r\n",str);
  93.                 }
  94.                 else
  95.                 {
  96.                         rt_kprintf("fail\r\n");
  97.                 }               
  98.         }                        
  99.         else if(strcmp(argv[1],"CWMODE?")==0)//查看应用模式
  100.         {
  101.                 at_exec_cmd(resp,"AT+CWMODE?");
  102.                 if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
  103.                 {
  104.                         //rt_kprintf("success\r\n");
  105.                         at_resp_parse_line_args_by_kw(resp, ":","%s" ,str);
  106.                         rt_kprintf("%s\r\n1-STATION,2-AP,3-STATION+AP\r\n",str);
  107.                 }
  108.                 else
  109.                 {
  110.                         rt_kprintf("fail\r\n");
  111.                 }               
  112.         }               
  113.         else if(strcmp(argv[1],"CIPMUX?")==0)//查看是否建立多连接
  114.         {
  115.                 at_exec_cmd(resp,"AT+CIPMUX?");
  116.                 if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
  117.                 {
  118.                         //rt_kprintf("success\r\n");
  119.                         at_resp_parse_line_args_by_kw(resp, ":","%s" ,str);
  120.                         rt_kprintf("%s\r\n0-single,1-mux\r\n",str);
  121.                 }
  122.                 else
  123.                 {
  124.                         rt_kprintf("fail\r\n");
  125.                 }               
  126.         }               
  127.         else if(strcmp(argv[1],"CIPMODE?")==0)//查看是透传还是非透传
  128.         {
  129.                 at_exec_cmd(resp,"AT+CIPMODE?");
  130.                 if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
  131.                 {
  132.                         //rt_kprintf("success\r\n");
  133.                         at_resp_parse_line_args_by_kw(resp, ":","%s" ,str);
  134.                         rt_kprintf("%s\r\n0-non-Penetrate,1-Penetrate\r\n",str);
  135.                 }
  136.                 else
  137.                 {
  138.                         rt_kprintf("fail\r\n");
  139.                 }               
  140.         }        
  141.         else if(strcmp(argv[1],"CIPMUX")==0)//开启多连接模式
  142.         {
  143.                 at_exec_cmd(resp,"AT+CIPMUX=1");
  144.                 if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
  145.                 {
  146.                         rt_kprintf("success\r\n");
  147.                 }
  148.                 else
  149.                 {
  150.                         rt_kprintf("fail\r\n");
  151.                 }               
  152.         }        
  153.         else if(strcmp(argv[1],"CIPSERVER")==0)//创建服务器
  154.         {
  155.                 at_exec_cmd(resp,"AT+CIPSERVER=1,8080");
  156.                 if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
  157.                 {
  158.                         rt_kprintf("success\r\n");
  159.                 }
  160.                 else
  161.                 {
  162.                         rt_kprintf("fail\r\n");
  163.                 }               
  164.         }               
  165.         else if(strcmp(argv[1],"CIPSERVER_OFF")==0)//关闭服务器
  166.         {
  167.                 at_exec_cmd(resp,"AT+CIPSERVER=0");
  168.                 if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
  169.                 {
  170.                         rt_kprintf("success\r\n");
  171.                 }
  172.                 else
  173.                 {
  174.                         rt_kprintf("fail\r\n");
  175.                 }               
  176.         }               
  177.         else if(strcmp(argv[1],"CIPSTATUS")==0)//查看当前连接
  178.         {
  179.                 at_exec_cmd(resp,"AT+CIPSTATUS");
  180.                 if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
  181.                 {
  182.                         //rt_kprintf("success\r\n");
  183.                         at_resp_parse_line_args_by_kw(resp, ":","%s" ,str);
  184.                         rt_kprintf("%s\r\n",str);
  185.                         at_resp_parse_line_args_by_kw(resp, "+CIPSTATUS:","%s" ,str);
  186.                         rt_kprintf("%s\r\n",str);                        
  187.                 }
  188.                 else
  189.                 {
  190.                         rt_kprintf("fail\r\n");
  191.                 }               
  192.         }        
  193.         else if(strcmp(argv[1],"CIPSEND")==0)//发送数据
  194.         {
  195.                 char cmd_table[40]="AT+CIPSEND=";
  196.                 at_exec_cmd(resp,strcat(cmd_table,argv[2]));
  197.                 if(at_resp_get_line_by_kw(resp, "OK")!=RT_NULL)
  198.                 {
  199.                         rt_kprintf("success\r\n");
  200.                         at_exec_cmd(resp,"1234");
  201. //                        at_resp_parse_line_args_by_kw(resp, ":","%s" ,str);
  202. //                        rt_kprintf("%s\r\n",str);
  203. //                        at_resp_parse_line_args_by_kw(resp, "+CIPSTATUS:","%s" ,str);
  204. //                        rt_kprintf("%s\r\n",str);                        
  205.                 }
  206.                 else
  207.                 {
  208.                         rt_kprintf("fail\r\n");
  209.                 }               
  210.         }               
  211. }

  212. 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 | 显示全部楼层
hua_ren 发表于 2020-6-29 10:20 | 显示全部楼层
厉害了,现在的芯片基本相当于一个系统了。想象空间无穷。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

279

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部