RTL8710 环境搭建 编译

参考文章:

https://polyfractal.com/post/rustl8710/?from=timeline&isappinstalled=0

 

首先嫖一个模块

 

我这里用串口一直没办法下载,资料太少,说是TX脚拉高上电后可以用工具下,可惜一直没成功过

 

在卖模块的地方嫖一个SDK,里面有工具链,需要改一下makefile 将工具指定一下

G:\xuanzihao\RTL8710\sdk-ameba-rtl8710af-v3.5a_without_NDA_GCC_V1.0.0\project\realtek_ameba1_va0_example\GCC-RELEASE

 

 

 

 

MakeFile 不改,这里会判断当前有没有一个 gcc 则建一个文件夹什么鬼的,注意这里可以自己建一个空的就行,后面不会用到,先让它能过去

 

 

 

gcc地址:RTL8710\sdk-ameba-rtl8710af-v3.5a_without_NDA_GCC_V1.0.0\tools\arm-none-eabi-gcc

 

然后RTL8710\sdk-ameba-rtl8710af-v3.5a_without_NDA_GCC_V1.0.0\project\realtek_ameba1_va0_example\GCC-RELEASE\application.mk

直接指定一下工具链,我这里将gcc-arm-noxxxxxx   放到 /opt 去了

 

 

 

 

之后设置下环境变量,就可以直接make了,注意这里可能会有一个找不到 ncurses5 错误,安装一个包

 

sudo apt-get install lib32ncurses5

 

 

 

 

然后可以用J-LINK的SWD下载了

 

接线如下:

 

 

 

注意!!!!串口TX 要加下拉,否则常常看不到log,恶心死

 

 

然后,参考文章,安装linux下的jlink

多开一个终端,输入命令

/opt/SEGGER/JLink/JLinkGDBServer -device cortex-m3 -if swd  先连接上芯片

 

然后另外编译那个终端 make flash

 

搞定

 

程序上,入口在

RTL8710\sdk-ameba-rtl8710af-v3.5a_without_NDA_GCC_V1.0.0\project\realtek_ameba1_va0_example\src\main.c

注意这里不能使用printf 必须使用DiagPrintf 否则没有打印信息

 

程序默认会打开AT server 我关掉了,直接做一个简单的连接sta的demo

 

感觉代码的开放程度比较高,不同于8266封装比较好

 

撸各个流程,参考一下AT命令吧。(atcmd_lwip.c)

 

main.c

 1 #include "FreeRTOS.h"
 2 #include "task.h"
 3 #include "diag.h"
 4 #include "main.h"
 5 #include <example_entry.h>
 6 
 7 extern void console_init(void);
 8 
 9 
10 /**
11   * @brief  Main program.
12   * @param  None
13   * @retval None
14   */
15 void main(void)
16 {
17     /* Initialize log uart and at command service */
18     console_init();    
19     
20     /* pre-processor of application example */
21     pre_example_entry();
22 
23     /* wlan intialization */
24 #if defined(CONFIG_WIFI_NORMAL) && defined(CONFIG_NETWORK)
25     DiagPrintf("\r\n main wlan \r\n");
26     wlan_network();
27 #endif
28 
29     /* Execute application example */
30     //example_entry();                //这里就是AT的server 屏掉了,暂时不用
31 
32         /*Enable Schedule, Start Kernel*/
33 #if defined(CONFIG_KERNEL) && !TASK_SCHEDULER_DISABLED
34     #ifdef PLATFORM_FREERTOS
35     vTaskStartScheduler();
36     #endif
37 #else
38     RtlConsolTaskRom(NULL);
39 #endif
40 
41 
42 }

 

 

 

example_entry.c

  1 /******************************************************************************
  2  *
  3  * Copyright(c) 2007 - 2015 Realtek Corporation. All rights reserved.
  4  *
  5  *
  6  ******************************************************************************/
  7 #include <platform_opts.h>
  8 #include "main.h"
  9 #include "example_entry.h"
 10 #include "FreeRTOS.h"
 11 #include "task.h"
 12 #include <lwip_netconf.h>
 13 #include "tcpip.h"
 14 #include <dhcp/dhcps.h>
 15 
 16 
 17 
 18 
 19 /*
 20     Preprocessor of example
 21 */
 22 
 23 #define SSID "xuanzihao"
 24 #define PASSWORD "haozixuan"
 25 static unsigned char password[65] = {0};
 26 
 27 
 28 static rtw_network_info_t wifi = {
 29     {0},    // ssid
 30     {0},    // bssid
 31     0,        // security
 32     NULL,    // password
 33     0,        // password len
 34     -1        // key id
 35 };
 36 
 37 
 38 static void init_wifi_struct(void)
 39 {
 40     memset(wifi.ssid.val, 0, sizeof(wifi.ssid.val));
 41     memset(wifi.bssid.octet, 0, 6);    
 42     memset(password, 0, sizeof(password));
 43     wifi.ssid.len = 0;
 44     wifi.password = NULL;
 45     wifi.password_len = 0;
 46     wifi.key_id = -1;
 47 }
 48 
 49 static void pre_example_thread(void *param)
 50 {
 51     int ret;
 52     
 53     vTaskDelay(1000);
 54 
 55     wifi_off();
 56     vTaskDelay(20);
 57 
 58     if ((ret = wifi_on(RTW_MODE_STA)) < 0){
 59         DiagPrintf("\n\rERROR: Wifi on failed!");
 60         ret = RTW_ERROR;
 61     }
 62     DiagPrintf("\r\n Wifi on OK!\r\n ");
 63     
 64     vTaskDelay(200);
 65     
 66     init_wifi_struct();
 67     
 68     wifi.security_type = RTW_SECURITY_WPA2_AES_PSK;
 69     
 70 
 71     strcpy((char *)wifi.ssid.val, (char*)SSID);
 72     wifi.ssid.len = strlen((char*)SSID);
 73 
 74     strcpy((char *)password, (char*)PASSWORD);
 75     wifi.password=password;
 76     wifi.password_len=strlen((char*)PASSWORD);
 77 
 78     DiagPrintf("\r\n Joining BSS by SSID %s...%s...\r\n ", (char*)wifi.ssid.val,wifi.password);
 79 
 80 
 81     ret = wifi_connect((char*)wifi.ssid.val, wifi.security_type, (char*)wifi.password, wifi.ssid.len,
 82                     wifi.password_len, wifi.key_id, NULL);
 83     DiagPrintf("\r\n wifi_connect=%d \r\n",ret);
 84     if(ret==RTW_SUCCESS)
 85     {
 86         DiagPrintf("\r\n LwIP_DHCP(0, DHCP_START) \r\n");
 87         LwIP_DHCP(0, DHCP_START);
 88     }
 89 
 90     while(1)
 91     {
 92         vTaskDelay(100);
 93     }
 94 
 95 
 96 }
 97 
 98 
 99 void pre_example_entry(void)
100 {
101     //
102     DiagPrintf("\r\n pre_example_entry \r\n");
103 
104 
105     if(xTaskCreate(pre_example_thread, ((const char*)"pre_example_thread"), 1024, NULL, tskIDLE_PRIORITY+1 , NULL) != pdPASS)
106         DiagPrintf("\n\r%s xTaskCreate(uart_atcmd_thread) failed", __FUNCTION__);
107     return 0;
108     
109 }
110 
111 /*
112       All of the examples are disabled by default for code size consideration
113        The configuration is enabled in platform_opts.h
114 */
115 void example_entry(void)
116 {
117 #if CONFIG_EXAMPLE_UART_ATCMD
118     example_uart_atcmd();
119 #endif
120 }

 

posted @ 2020-06-19 17:33  XZHDJH  阅读(2070)  评论(0)    收藏  举报