哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于小凌派RK2206開(kāi)發(fā)板wifi-tcp通信實(shí)驗(yàn)

福州市凌睿智捷電子有限公司 ? 2022-06-14 11:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

基于小凌派RK2206開(kāi)發(fā)板wifi-tcp通信實(shí)驗(yàn)

在開(kāi)發(fā)過(guò)程中想要與開(kāi)發(fā)板進(jìn)行通信一般使用串口通信,當(dāng)開(kāi)發(fā)板使用串口與pc通信還需要專門的串口轉(zhuǎn)換工具才行。而小凌派開(kāi)發(fā)板自帶wifi功能。因此與pc通信時(shí)可以使用wifi功能進(jìn)行tcp通信這樣就不需要專門的轉(zhuǎn)換工具非常方便。

一、在使用小凌派開(kāi)發(fā)板wifi進(jìn)行tcp通信的步驟

1、要確定pc機(jī)所連接路由的wifi名稱和密碼。通過(guò)修改代碼使小凌派連接到與pc同一網(wǎng)絡(luò)。

修改文件device/rockchip/rk2206/sdk_liteos/board/src/config_network.c 中的SSID 即wifi名稱,和PASSWORD 即wifi密碼。

#define SSID "凌智電子"

#define PASSWORD "********"


2、確認(rèn)小凌派wifi功能是否開(kāi)啟

查看device/rockchip/rk2206/sdk_liteos/board/main.c 文件

是否調(diào)用ExternalTaskConfigNetwork();


3、確認(rèn)小凌派開(kāi)發(fā)板與開(kāi)發(fā)板在同一網(wǎng)段。

在修改以上配置后先編譯燒錄程序然后查看log確認(rèn)小凌派開(kāi)發(fā)板獲取到的ip地址。

c34bbe36-e735-11ec-a2f4-dac502259ad0.png

在確認(rèn)pc的ip地址,在控制臺(tái)輸入ipconfig

c3782674-e735-11ec-a2f4-dac502259ad0.png

可以看到兩個(gè)ip地址都是點(diǎn)2網(wǎng)段,說(shuō)明已經(jīng)在同一局域網(wǎng)。


4、 修改wifi_tcp 例程中服務(wù)地址及端口號(hào)

#define OC_SERVER_IP "192.168.2.49"

#define SERVER_PORT 6666

這個(gè)ip地址即PC的ip地址,修改后重新編譯燒錄程序。


5、 pc上打開(kāi)兩個(gè)網(wǎng)絡(luò)調(diào)試工具,一個(gè)客戶端和一個(gè)服務(wù)端,并設(shè)置ip地址和端口號(hào)

服務(wù)端 ip地址:0.0.0.0

端口號(hào):6666

客戶端ip地址:192.168.2.50 (之前查看到小凌派的ip地址)

端口號(hào):6666

c3b1886a-e735-11ec-a2f4-dac502259ad0.png

6 、查看log等待小凌派的tcp客戶端和服務(wù)端任務(wù)啟動(dòng)


c3de5a2a-e735-11ec-a2f4-dac502259ad0.png

可以看到客戶端連接地址192.168.2.49:6666 即pc的ip地址

服務(wù)端監(jiān)聽(tīng)端口為6666

這表示小凌派tcp客戶端和服務(wù)端任務(wù)都已經(jīng)啟動(dòng)。


7、 在pc網(wǎng)絡(luò)調(diào)試助手點(diǎn)擊啟動(dòng)客戶端和服務(wù)端

c43ac86e-e735-11ec-a2f4-dac502259ad0.png

可以觀察到網(wǎng)絡(luò)調(diào)試助手服務(wù)端有設(shè)備連接成功并且接收到了調(diào)試數(shù)據(jù)。

網(wǎng)絡(luò)調(diào)試助手的客戶端也顯示連接成功。


8、 使用網(wǎng)絡(luò)調(diào)試助手發(fā)送數(shù)據(jù)

c46782be-e735-11ec-a2f4-dac502259ad0.png

可以查看log發(fā)現(xiàn)小凌派開(kāi)發(fā)板已經(jīng)可以正常收發(fā)數(shù)據(jù)了。

這樣就可以通過(guò)使用wifi與pc進(jìn)行通信。


二、接下來(lái)分析一下代碼的工作流程。

首先包含必要的頭文件

#include "ohos_init.h"#include "cmsis_os2.h"#include "los_task.h"#include "lz_hardware.h"#include "config_network.h"#include "lwip/tcp.h"#include "lwip/ip_addr.h"#include "lwip/priv/tcp_priv.h"#include "lwip/stats.h"#include "lwip/inet_chksum.h"



這些定義主要是 ip地址和端口號(hào)以及緩存大小

#define LOG_TAG "tcp"#define OC_SERVER_IP "192.168.2.49"#define SERVER_PORT 6666#define BUFF_LEN 256



這部分是獲取wifi連接信息,通過(guò)查詢wifi連接信息確認(rèn)wifi是否連接成功。只有wifi連接成功了才能進(jìn)行tcp通信

int get_wifi_info(WifiLinkedInfo *info){ int ret = -1; int gw, netmask; memset(info, 0, sizeof(WifiLinkedInfo)); unsigned int retry = 15; while (retry) { if (GetLinkedInfo(info) == WIFI_SUCCESS) { if (info->connState == WIFI_CONNECTED) { if (info->ipAddress != 0) { LZ_HARDWARE_LOGD(LOG_TAG, "rknetwork IP (%s)", inet_ntoa(info->ipAddress)); if (WIFI_SUCCESS == GetLocalWifiGw(&gw)) { LZ_HARDWARE_LOGD(LOG_TAG, "network GW (%s)", inet_ntoa(gw)); } if (WIFI_SUCCESS == GetLocalWifiNetmask(&netmask)) { LZ_HARDWARE_LOGD(LOG_TAG, "network NETMASK (%s)", inet_ntoa(netmask)); } if (WIFI_SUCCESS == SetLocalWifiGw()) { LZ_HARDWARE_LOGD(LOG_TAG, "set network GW"); } if (WIFI_SUCCESS == GetLocalWifiGw(&gw)) { LZ_HARDWARE_LOGD(LOG_TAG, "network GW (%s)", inet_ntoa(gw)); } if (WIFI_SUCCESS == GetLocalWifiNetmask(&netmask)) { LZ_HARDWARE_LOGD(LOG_TAG, "network NETMASK (%s)", inet_ntoa(netmask)); } ret = 0; goto connect_done; } } } LOS_Msleep(1000); retry--; }

connect_done: return ret;}



這部分是tcp服務(wù)端接收消息處理

先進(jìn)入accept()會(huì)處于阻塞狀態(tài),即沒(méi)有客戶端連接時(shí)一直阻塞。

單客戶端連接后又進(jìn)入接收數(shù)據(jù)狀態(tài),此狀態(tài)也是阻塞狀態(tài)。

沒(méi)有數(shù)據(jù)時(shí)一直阻塞,不過(guò)需要注意的是在此狀態(tài)下當(dāng)客戶端斷開(kāi)連接時(shí)recv會(huì)返回-1

接收到pc客戶端的消息后通過(guò)send()發(fā)響應(yīng)消息給PC客戶端。

void tcp_server_msg_handle(int fd){ char buf[BUFF_LEN]; //接收緩沖區(qū) socklen_t client_addr_len; int cnt = 0, count; int client_fd; struct sockaddr_in client_addr = {0}; printf("waitting for client connect...\n"); /* 監(jiān)聽(tīng)socket 此處會(huì)阻塞 */ client_fd = accept(fd, (struct sockaddr*)&client_addr, &client_addr_len); // client_fd = lwip_accept(fd, (struct sockaddr*)&client_addr, &client_addr_len); printf("[tcp server] accept <%s:%d>\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port)); while (1) { memset(buf, 0, BUFF_LEN); printf("-------------------------------------------------------\n"); printf("[tcp server] waitting client msg\n"); count = recv(client_fd, buf, BUFF_LEN, 0); //read是阻塞函數(shù),沒(méi)有數(shù)據(jù)就一直阻塞 // count = lwip_read(client_fd, buf, BUFF_LEN); //read是阻塞函數(shù),沒(méi)有數(shù)據(jù)就一直阻塞 if (count == -1) { printf("[tcp server] recieve data fail!\n"); LOS_Msleep(3000); break; } printf("[tcp server] rev client msg:%s\n", buf); memset(buf, 0, BUFF_LEN); sprintf(buf, "I have recieved %d bytes data! recieved cnt:%d", count, ++cnt); printf("[tcp server] send msg:%s\n", buf); send(client_fd, buf, strlen(buf), 0); //發(fā)送信息給client // lwip_write(client_fd, buf, strlen(buf)); //發(fā)送信息給client } lwip_close(client_fd); lwip_close(fd);}



這部分是tcp服務(wù)端任務(wù)代碼

服務(wù)端處理流程

socket-->bind-->listen-->accept-->recv-->send-->lwip_close

先通過(guò)socket()接口打開(kāi)一個(gè)服務(wù)端socket文件

然后設(shè)置需要綁定的服務(wù)端ip地址及端口號(hào)。

在進(jìn)行監(jiān)聽(tīng),需要注意的是此處監(jiān)聽(tīng)不會(huì)處于阻塞態(tài)。

int wifi_server(void* arg){ int server_fd, ret;

while(1) { server_fd = socket(AF_INET, SOCK_STREAM, 0); //AF_INET:IPV4;SOCK_STREAM:TCP // server_fd = lwip_socket(AF_INET, SOCK_STREAM, 0); //AF_INET:IPV4;SOCK_STREAM:TCP if (server_fd < 0) { printf("create socket fail!\n"); return -1; }

/*設(shè)置調(diào)用close(socket)后,仍可繼續(xù)重用該socket。調(diào)用close(socket)一般不會(huì)立即關(guān)閉socket,而經(jīng)歷TIME_WAIT的過(guò)程。*/ int flag = 1; ret = setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof(int)); if (ret != 0) { printf("[CommInitTcpServer]setsockopt fail, ret[%d]!\n", ret); } struct sockaddr_in serv_addr = {0}; serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); //IP地址,需要進(jìn)行網(wǎng)絡(luò)序轉(zhuǎn)換,INADDR_ANY:本地地址 // serv_addr.sin_addr.s_addr = inet_addr(OC_SERVER_IP); //IP地址,需要進(jìn)行網(wǎng)絡(luò)序轉(zhuǎn)換,INADDR_ANY:本地地址 serv_addr.sin_port = htons(SERVER_PORT); //端口號(hào),需要網(wǎng)絡(luò)序轉(zhuǎn)換 /* 綁定服務(wù)器地址結(jié)構(gòu) */ ret = bind(server_fd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); // ret = lwip_bind(server_fd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); if (ret < 0) { printf("socket bind fail!\n"); lwip_close(server_fd); return -1; } /* 監(jiān)聽(tīng)socket 此處不阻塞 */ ret = listen(server_fd, 64); // ret = lwip_listen(server_fd, 64); if(ret != 0) { printf("socket listen fail!\n"); lwip_close(server_fd); return -1; } printf("[tcp server] listen:%d<%s:%d>\n",server_fd, inet_ntoa(serv_addr.sin_addr), ntohs(serv_addr.sin_port)); tcp_server_msg_handle(server_fd); //處理接收到的數(shù)據(jù) LOS_Msleep(1000); }}

這部分是tcp客戶端的接收消息處理函數(shù)

先進(jìn)行嘗試連接pc機(jī)的服務(wù)端,如果失敗則延遲5秒后重新連接直到連接成功。

連接成功后先發(fā)消息給PC的服務(wù)端,然后進(jìn)入接收狀態(tài),此狀態(tài)是阻塞態(tài)。

當(dāng)接收到pc的消息后進(jìn)入循環(huán)發(fā)送狀態(tài)。

void tcp_client_msg_handle(int fd, struct sockaddr* dst){ socklen_t len = sizeof(*dst);

int cnt = 0, count = 0; while (connect(fd, dst, len) < 0) { printf("connect server failed...%d\n", ++count); lwip_close(fd); LOS_Msleep(5000); fd = socket(AF_INET, SOCK_STREAM, 0); //AF_INET:IPV4;SOCK_STREAM:TCP } while (1) { char buf[BUFF_LEN]; sprintf(buf, "TCP TEST cilent send:%d", ++cnt); count = send(fd, buf, strlen(buf), 0); //發(fā)送數(shù)據(jù)給server // count = lwip_write(fd, buf, strlen(buf)); //發(fā)送數(shù)據(jù)給server printf("------------------------------------------------------------\n"); printf("[tcp client] send:%s\n", buf); printf("[tcp client] client sendto msg to server %d,waitting server respond msg!!!\n", count); memset(buf, 0, BUFF_LEN); count = recv(fd, buf, BUFF_LEN, 0); //接收來(lái)自server的信息 // count = lwip_read(fd, buf, BUFF_LEN); //接收來(lái)自server的信息 if(count == -1) { printf("[tcp client] recieve data fail!\n"); LOS_Msleep(3000); break; } printf("[tcp client] rev:%s\n", buf); } lwip_close(fd);}

這部分代碼是tcp客戶端代碼

客戶端處理流程

socket-->connect-->send-->recv-->lwip_close

先通過(guò)socket()接口創(chuàng)建客戶端的socket文件。

然后設(shè)置客戶端連接PC服務(wù)端的ip地址及端口號(hào)。

在進(jìn)行connect連接。

int wifi_client(void* arg){ int client_fd, ret; struct sockaddr_in serv_addr; while(1) { client_fd = socket(AF_INET, SOCK_STREAM, 0);//AF_INET:IPV4;SOCK_STREAM:TCP if (client_fd < 0) { printf("create socket fail!\n"); return -1; }

/*設(shè)置調(diào)用close(socket)后,仍可繼續(xù)重用該socket。調(diào)用close(socket)一般不會(huì)立即關(guān)閉socket,而經(jīng)歷TIME_WAIT的過(guò)程。*/ int flag = 1; ret = setsockopt(client_fd, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof(int)); if (ret != 0) { printf("[CommInitTcpServer]setsockopt fail, ret[%d]!\n", ret); } memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr(OC_SERVER_IP); serv_addr.sin_port = htons(SERVER_PORT); printf("[tcp client] connect:%d<%s:%d>\n",client_fd, inet_ntoa(serv_addr.sin_addr), ntohs(serv_addr.sin_port)); tcp_client_msg_handle(client_fd, (struct sockaddr*)&serv_addr); LOS_Msleep(1000); }

return 0;}

這部分是tcp創(chuàng)建客戶端和服務(wù)端任務(wù)

可以看到在創(chuàng)建客戶端和服務(wù)端任務(wù)前先阻塞判斷wifi的連接狀態(tài)。

只有wifi連接成功后才創(chuàng)建客戶端和服務(wù)端任務(wù)。

void wifi_process(void *args){ unsigned int threadID_client, threadID_server; unsigned int ret = LOS_OK; WifiLinkedInfo info;

while(get_wifi_info(&info) != 0) ;

CreateThread(&threadID_client, wifi_client, NULL, "client@ process"); CreateThread(&threadID_server, wifi_server, NULL, "server@ process");}

這部分是創(chuàng)建wifi tcp 通信任務(wù)主要是為了使用APP_FEATURE_INIT(wifi_tcp_example);

這樣當(dāng)OpenHarmony初始化完成后會(huì)自動(dòng)執(zhí)行此任務(wù)。

void wifi_tcp_example(void){ unsigned int ret = LOS_OK; unsigned int thread_id; TSK_INIT_PARAM_S task = {0}; printf("%s start ....\n", __FUNCTION__);

task.pfnTaskEntry = (TSK_ENTRY_FUNC)wifi_process; task.uwStackSize = 10240; task.pcName = "wifi_process"; task.usTaskPrio = 24; ret = LOS_TaskCreate(&thread_id, &task); if (ret != LOS_OK) { printf("Falied to create wifi_process ret:0x%x\n", ret); return; }}APP_FEATURE_INIT(wifi_tcp_example);


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 小凌派
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    1645
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    精靈(ElfBoard)技術(shù)貼|如何在ELF-RK3506開(kāi)發(fā)板上實(shí)現(xiàn)GPIO復(fù)用

    2026年全國(guó)大學(xué)生嵌入式芯片與系統(tǒng)設(shè)計(jì)競(jìng)賽報(bào)名已正式啟動(dòng)。本次瑞芯微&飛嵌入式賽題共設(shè)置了三個(gè)參賽平臺(tái)(ELF2開(kāi)發(fā)板、ELF-RV1126B開(kāi)發(fā)板、ELF-RK3506
    的頭像 發(fā)表于 03-16 14:55 ?6182次閱讀
    飛<b class='flag-5'>凌</b>精靈(ElfBoard)技術(shù)貼|如何在ELF-<b class='flag-5'>RK</b>3506<b class='flag-5'>開(kāi)發(fā)板</b>上實(shí)現(xiàn)GPIO復(fù)用

    OpenHarmony開(kāi)發(fā)開(kāi)源資料!-RK3568開(kāi)發(fā)板:從入門到實(shí)戰(zhàn)的全棧硬件平臺(tái)

    點(diǎn)的利器: - RK3568 開(kāi)發(fā)板,以及它的核心開(kāi)源資源站——Gitee 倉(cāng)庫(kù)(https://gitee.com/xie-shancai/lockzhiner-
    的頭像 發(fā)表于 02-05 13:56 ?574次閱讀
    OpenHarmony<b class='flag-5'>開(kāi)發(fā)</b>開(kāi)源資料!<b class='flag-5'>凌</b>蒙<b class='flag-5'>派</b>-<b class='flag-5'>RK</b>3568<b class='flag-5'>開(kāi)發(fā)板</b>:從入門到實(shí)戰(zhàn)的全棧硬件平臺(tái)

    性能躍遷,鴻蒙開(kāi)發(fā)新紀(jì)元!RK3566鴻蒙開(kāi)發(fā)板,開(kāi)啟全場(chǎng)景開(kāi)發(fā)之旅

    【導(dǎo)語(yǔ)】還在為鴻蒙開(kāi)發(fā)尋找強(qiáng)勁、穩(wěn)定、高效的硬件平臺(tái)?RK3566鴻蒙開(kāi)發(fā)板震撼登場(chǎng)!集高性能、全接口、強(qiáng)生態(tài)于一身,專為鴻蒙
    的頭像 發(fā)表于 12-11 17:58 ?2593次閱讀
    性能躍遷,鴻蒙<b class='flag-5'>開(kāi)發(fā)</b>新紀(jì)元!<b class='flag-5'>凌</b>羽<b class='flag-5'>派</b><b class='flag-5'>RK</b>3566鴻蒙<b class='flag-5'>開(kāi)發(fā)板</b>,開(kāi)啟全場(chǎng)景<b class='flag-5'>開(kāi)發(fā)</b>之旅

    【迅為工業(yè)RK3568穩(wěn)定可靠】itop-3568開(kāi)發(fā)板驅(qū)動(dòng)開(kāi)發(fā)第4章驅(qū)動(dòng)模塊傳參實(shí)驗(yàn)

    【迅為工業(yè)RK3568穩(wěn)定可靠】itop-3568開(kāi)發(fā)板驅(qū)動(dòng)開(kāi)發(fā)第4章驅(qū)動(dòng)模塊傳參實(shí)驗(yàn)
    的頭像 發(fā)表于 11-06 14:25 ?484次閱讀
    【迅為工業(yè)<b class='flag-5'>RK</b>3568穩(wěn)定可靠】itop-3568<b class='flag-5'>開(kāi)發(fā)板</b>驅(qū)動(dòng)<b class='flag-5'>開(kāi)發(fā)</b>第4章驅(qū)動(dòng)模塊傳參<b class='flag-5'>實(shí)驗(yàn)</b>

    RK3506開(kāi)發(fā)板Linux開(kāi)發(fā)板極致性價(jià)比之選

    RK3506開(kāi)發(fā)板Linux開(kāi)發(fā)板極致性價(jià)比之選瑞芯微RK3506開(kāi)發(fā)板,3核Cortex-A7@1.5GHz+Cortex-M0,Linu
    的頭像 發(fā)表于 09-11 16:26 ?3797次閱讀
    <b class='flag-5'>RK</b>3506<b class='flag-5'>開(kāi)發(fā)板</b>Linux<b class='flag-5'>開(kāi)發(fā)板</b>極致性價(jià)比之選

    RK3568開(kāi)發(fā)板暗藏32位兼容開(kāi)關(guān)?飛嵌入式帶你一鍵解鎖!

    RK3568是一款64位處理器,飛嵌入式為其提供的交叉編譯器也是64位的,然而部分用戶可能需要在RK3568開(kāi)發(fā)板上運(yùn)行32位應(yīng)用。本文將詳細(xì)闡述如何使用32位交叉編譯器,編譯出32
    的頭像 發(fā)表于 07-19 08:49 ?4526次閱讀
    <b class='flag-5'>RK</b>3568<b class='flag-5'>開(kāi)發(fā)板</b>暗藏32位兼容開(kāi)關(guān)?飛<b class='flag-5'>凌</b>嵌入式帶你一鍵解鎖!

    睿擎RK3506J開(kāi)發(fā)板開(kāi)箱記錄、初步調(diào)試

    睿擎基于RK3506J開(kāi)發(fā),RK3506J是一款三核A7+M0的入門級(jí)工業(yè)MPU,由于其價(jià)位低,性能優(yōu)異,近期收到熱捧,各家都出了很多RK
    的頭像 發(fā)表于 06-20 20:43 ?2582次閱讀
    睿擎<b class='flag-5'>派</b><b class='flag-5'>RK</b>3506J<b class='flag-5'>開(kāi)發(fā)板</b>開(kāi)箱記錄、初步調(diào)試

    迅為RK3568開(kāi)發(fā)板驅(qū)動(dòng)指南GPIO子系統(tǒng)三級(jí)節(jié)點(diǎn)操作函數(shù)實(shí)驗(yàn)

    迅為RK3568開(kāi)發(fā)板驅(qū)動(dòng)指南GPIO子系統(tǒng)三級(jí)節(jié)點(diǎn)操作函數(shù)實(shí)驗(yàn)
    的頭像 發(fā)表于 05-26 15:39 ?1647次閱讀
    迅為<b class='flag-5'>RK</b>3568<b class='flag-5'>開(kāi)發(fā)板</b>驅(qū)動(dòng)指南GPIO子系統(tǒng)三級(jí)節(jié)點(diǎn)操作函數(shù)<b class='flag-5'>實(shí)驗(yàn)</b>

    基于RK3576開(kāi)發(fā)板的PWN使用說(shuō)明

    RK3576開(kāi)發(fā)板使用PWN教程及Demo
    的頭像 發(fā)表于 05-07 14:07 ?2450次閱讀
    基于<b class='flag-5'>RK</b>3576<b class='flag-5'>開(kāi)發(fā)板</b>的PWN使用說(shuō)明

    基于小RK2206開(kāi)發(fā)板:OpenHarmony如何使用IoT接口控制FLASH外設(shè)

    1、實(shí)驗(yàn)簡(jiǎn)介 本實(shí)驗(yàn)將演示如何在小-RK2206開(kāi)發(fā)板上使用IOT庫(kù)的FLASH接口,進(jìn)行F
    發(fā)表于 04-22 15:02

    基于小RK2206開(kāi)發(fā)板:OpenHarmony如何使用IoT接口控制FLASH外設(shè)

    1、實(shí)驗(yàn)簡(jiǎn)介本實(shí)驗(yàn)將演示如何在小-RK2206開(kāi)發(fā)板上使用IOT庫(kù)的FLASH接口,進(jìn)行FL
    的頭像 發(fā)表于 04-22 14:49 ?1055次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開(kāi)發(fā)板</b>:OpenHarmony如何使用IoT接口控制FLASH外設(shè)

    基于小RK2206開(kāi)發(fā)板:OpenHarmony如何使用IoT接口控制UART外設(shè)

    1、實(shí)驗(yàn)簡(jiǎn)介 本實(shí)驗(yàn)將演示如何在小-RK2206開(kāi)發(fā)板上使用IOT庫(kù)的UART接口,進(jìn)行UA
    發(fā)表于 04-22 14:27

    基于小RK2206開(kāi)發(fā)板:OpenHarmony如何使用IoT接口控制UART外設(shè)

    1、實(shí)驗(yàn)簡(jiǎn)介本實(shí)驗(yàn)將演示如何在小-RK2206開(kāi)發(fā)板上使用IOT庫(kù)的UART接口,進(jìn)行UAR
    的頭像 發(fā)表于 04-22 14:22 ?1256次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開(kāi)發(fā)板</b>:OpenHarmony如何使用IoT接口控制UART外設(shè)

    基于小RK2206開(kāi)發(fā)板:OpenHarmony如何使用IoT接口控制GPIO中斷

    1、實(shí)驗(yàn)簡(jiǎn)介 本實(shí)驗(yàn)將演示如何在小-RK2206開(kāi)發(fā)板上使用IOT庫(kù)的GPIO中斷模式,進(jìn)行
    發(fā)表于 04-21 11:08

    基于小RK2206開(kāi)發(fā)板:OpenHarmony如何使用IoT接口控制GPIO中斷

    1、實(shí)驗(yàn)簡(jiǎn)介本實(shí)驗(yàn)將演示如何在小-RK2206開(kāi)發(fā)板上使用IOT庫(kù)的GPIO中斷模式,進(jìn)行G
    的頭像 發(fā)表于 04-21 10:39 ?1227次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開(kāi)發(fā)板</b>:OpenHarmony如何使用IoT接口控制GPIO中斷
    乌拉特后旗| 习水县| 邛崃市| 乐昌市| 麻城市| 侯马市| 田东县| 汪清县| 永川市| 大安市| 浦县| 手机| 宜丰县| 深水埗区| 忻城县| 江城| 安义县| 永川市| 乌拉特中旗| 甘孜县| 台湾省| 朝阳县| 莆田市| 浦县| 瓮安县| 体育| 鄂托克前旗| 金乡县| 韶关市| 青海省| 乌鲁木齐县| 锦州市| 林口县| 磐安县| 沂源县| 西华县| 永平县| 白银市| 定边县| 陇西县| 松桃|