在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于小凌派RK2206開發板:OpenHarmony如何使用IoT接口控制UART外設

福州市凌睿智捷電子有限公司 ? 2025-04-22 14:22 ? 次閱讀

1、實驗簡介

本實驗將演示如何在小凌派-RK2206開發板上使用IOT庫的UART接口,進行UART編程開發。

例程將創建一個任務,通過配置UART引腳,實現UART讀寫操作。

例程源代碼:https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk2206-openharmony3.0lts/tree/master/vendor/lockzhiner/rk2206/samples/b20_iot_uart

2、基礎知識

UART在日常設備中非常常見,以下我們將演示IOT庫的UART接口如何進行UART口配置,以及UART口讀寫操作。

2.1、頭文件

base/iot_hardware/peripheral/interfaces/kits/iot_uart.h

2.2、UART設備初始化:IoTUartInit

unsignedintIoTUartInit(unsignedintid,constIotUartAttribute*param);

描述:

UART設備初始化。

參數:

參數類型描述
idunsigned intUART ID
paramconst IotUartAttribute *UART配置參數

UART ID配置和IO復用如下表:

串口idTXRX
UART0EUART0_M0GPIO0_PB7GPIO0_PB6
UART0EUART0_M1GPIO0_PC7GPIO0_PC6
UART1EUART1_M0GPIO0_PC3GPIO0_PC2
UART1EUART1_M1GPIO0_PA7GPIO0_PA6
UART2EUART2_M1GPIO0_PB3GPIO0_PB2

返回值:

返回值描述
IOT_SUCCESS成功
IOT_FAILURE失敗

實現:

hal_iot_uart.c文件在device/rockchip/rk2206/adapter/hals/iot_hardware/wifiiot_lite目錄下。

unsignedintIoTUartInit(unsignedintid,constIotUartAttribute*param)
{
unsignedintret=0;
UartAttribute*temp_prt=(constUartAttribute*)param;

if(id>=EUARTDEV_MAX)
{
PRINT_ERR("id(%d) >= EUARTDEV_MAX(%d)\n",id,EUARTDEV_MAX);
returnIOT_FAILURE;
}

PinctrlSet(m_uart_bus_info[id].uart_bus.rx.gpio,m_uart_bus_info[id].uart_bus.rx.func,m_uart_bus_info[id].uart_bus.rx.type,m_uart_bus_info[id].uart_bus.rx.drv);
PinctrlSet(m_uart_bus_info[id].uart_bus.tx.gpio,m_uart_bus_info[id].uart_bus.tx.func,m_uart_bus_info[id].uart_bus.tx.type,m_uart_bus_info[id].uart_bus.tx.drv);

if(param->parity==IOT_UART_PARITY_NONE)
{
temp_prt->parity=UART_PARITY_NONE;
}
elseif(param->parity==IOT_UART_PARITY_EVEN)
{
temp_prt->parity=UART_PARITY_EVEN;
}
elseif(param->parity==IOT_UART_PARITY_ODD)
{
temp_prt->parity=UART_PARITY_ODD;
}

if(m_uart_bus_info[id].id==0)
{
LzUartDeinit(m_uart_bus_info[id].id);
uint32_t*pUart0=(uint32_t*)(0x40070000U);
HAL_UART_DeInit(pUart0);
}

ret=LzUartInit(m_uart_bus_info[id].id,temp_prt);
if(ret!=LZ_HARDWARE_SUCCESS)
{
returnIOT_FAILURE;
}

returnIOT_SUCCESS;
}

2.3、取消初始化UART設備:IoTUartDeinit

unsignedintIoTUartDeinit(unsignedintid);

描述:

取消初始化UART設備。

參數:

參數類型描述
idunsigned intUART ID

UART ID配置和IO復用如下表:

串口idTXRX
UART0EUART0_M0GPIO0_PB7GPIO0_PB6
UART0EUART0_M1GPIO0_PC7GPIO0_PC6
UART1EUART1_M0GPIO0_PC3GPIO0_PC2
UART1EUART1_M1GPIO0_PA7GPIO0_PA6
UART2EUART2_M1GPIO0_PB3GPIO0_PB2

返回值:

返回值描述
IOT_SUCCESS成功
IOT_FAILURE失敗

實現:

hal_iot_uart.c文件在device/rockchip/rk2206/adapter/hals/iot_hardware/wifiiot_lite目錄下。

unsignedintIoTUartDeinit(unsignedintid)
{
unsignedintret=0;

if(id>=EUARTDEV_MAX)
{
PRINT_ERR("id(%d) >= EUARTDEV_MAX(%d)\n",id,EUARTDEV_MAX);
returnIOT_FAILURE;
}

ret=LzUartDeinit(m_uart_bus_info[id].id);
if(ret!=LZ_HARDWARE_SUCCESS)
{
returnIOT_FAILURE;
}

returnIOT_SUCCESS;
}

2.4、UART設備讀取指定長度的數據:IoTUartRead

intIoTUartRead(unsignedintid,unsignedchar*data,unsignedintdataLen);

描述:

UART設備讀取指定長度的數據。

參數:

參數類型描述
idunsigned intUART ID
dataunsigned char *數據指針
dataLenunsigned int數據長度

UART ID配置和IO復用如下表:

串口idTXRX
UART0EUART0_M0GPIO0_PB7GPIO0_PB6
UART0EUART0_M1GPIO0_PC7GPIO0_PC6
UART1EUART1_M0GPIO0_PC3GPIO0_PC2
UART1EUART1_M1GPIO0_PA7GPIO0_PA6
UART2EUART2_M1GPIO0_PB3GPIO0_PB2

返回值:

返回值描述
IOT_SUCCESS成功
IOT_FAILURE失敗

實現:

hal_iot_uart.c文件在device/rockchip/rk2206/adapter/hals/iot_hardware/wifiiot_lite目錄下。

intIoTUartRead(unsignedintid,unsignedchar*data,unsignedintdataLen)
{
unsignedintret=0;

if(id>=EUARTDEV_MAX)
{
PRINT_ERR("id(%d) >= EUARTDEV_MAX(%d)\n",id,EUARTDEV_MAX);
returnIOT_FAILURE;
}

ret=LzUartRead(m_uart_bus_info[id].id,data,dataLen);

returnret;
}

2.5、UART設備寫指定長度的數據:IoTUartWrite

intIoTUartWrite(unsignedintid,constunsignedchar*data,unsignedintdataLen);

描述:

UART設備讀取指定長度的數據。

參數:

參數類型描述
idunsigned intUART ID
dataconst unsigned char *數據指針
dataLenunsigned int數據長度

UART ID配置和IO復用如下表:

串口idTXRX
UART0EUART0_M0GPIO0_PB7GPIO0_PB6
UART0EUART0_M1GPIO0_PC7GPIO0_PC6
UART1EUART1_M0GPIO0_PC3GPIO0_PC2
UART1EUART1_M1GPIO0_PA7GPIO0_PA6
UART2EUART2_M1GPIO0_PB3GPIO0_PB2

返回值:

返回值描述
IOT_SUCCESS成功
IOT_FAILURE失敗

實現:

hal_iot_uart.c文件在device/rockchip/rk2206/adapter/hals/iot_hardware/wifiiot_lite目錄下。

intIoTUartWrite(unsignedintid,constunsignedchar*data,unsignedintdataLen)
{
unsignedintret=0;

if(id>=EUARTDEV_MAX)
{
PRINT_ERR("id(%d) >= EUARTDEV_MAX(%d)\n",id,EUARTDEV_MAX);
returnIOT_FAILURE;
}

ret=LzUartWrite(m_uart_bus_info[id].id,data,dataLen);
if(ret!=LZ_HARDWARE_SUCCESS)
{
returnIOT_FAILURE;
}

returnIOT_SUCCESS;
}

3、程序設計

主要代碼分析

在uart_example函數中,創建一個任務。

voiduart_example()
{
unsignedintthread_id;
TSK_INIT_PARAM_Stask={0};
unsignedintret =LOS_OK;

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

uart_thread任務中調用IOT庫的UART接口配置、讀寫UART。

voiduart_thread()
{
unsignedintret;
IotUartAttributeattr;
unsignedcharstr[] ="HelloWorld!";
unsignedcharrecv_buffer[STRING_MAXSIZE]={0};
unsignedintrecv_length =0;

IoTUartDeinit(UART_ID);

attr.baudRate=115200;
attr.dataBits=IOT_UART_DATA_BIT_8;
attr.pad =IOT_FLOW_CTRL_NONE;
attr.parity =IOT_UART_PARITY_NONE;
attr.rxBlock =IOT_UART_BLOCK_STATE_NONE_BLOCK;
attr.stopBits=IOT_UART_STOP_BIT_1;
attr.txBlock =IOT_UART_BLOCK_STATE_NONE_BLOCK;

/* 初始化串口 */
ret=IoTUartInit(UART_ID,&attr);
if(ret!=IOT_SUCCESS) {
printf("%s, %d: IoTUartInit(%d) failed!\n",__FILE__,__LINE__,ret);
return;
}
/* 休眠1秒 */
LOS_Msleep(1000);

while(1) {
printf("%s, %d: uart write and str(%s), len(%d)!\n",__FILE__,__LINE__,str,strlen(str));
// IoTUartWrite是異步發送,非阻塞發送
IoTUartWrite(UART_ID,str,strlen(str));
// 等待發送完畢
LOS_Msleep(1000);

recv_length=0;
memset(recv_buffer,0,sizeof(recv_buffer));
recv_length=IoTUartRead(UART_ID,recv_buffer,sizeof(recv_buffer));
printf("%s, %d: uart recv and str(%s), len(%d)\n",__FILE__,__LINE__,recv_buffer,recv_length);

/* 休眠1秒 */
LOS_Msleep(1000);
}
}

4、編譯調試

修改vendor/lockzhiner/rk2206/sample路徑下 BUILD.gn 文件,指定iot_uart_example參與編譯。

"./b20_iot_uart:iot_uart_example",

修改device/lockzhiner/rk2206/sdk_liteos路徑下 Makefile 文件,添加-liot_uart_example參與編譯。

hardware_LIBS=-lhal_iothardware-lhardware-lshellcmd-liot_uart_example

5、運行結果

示例代碼編譯燒錄代碼后,按下開發板的RESET按鍵,使用杜邦線連接TX和RX,通過串口助手查看日志,顯示如下:

enteringkernelinit...
hilogwillinit.
[MAIN:D]Main:LOS_Start...
Enteringscheduler
OHOS# hiview init success.[UART:E]LzUartDeinit: id 0, controller has NOT been initialized
[UART:E]LzUartDeinit:id0,controllerhasNOTbeeninitialized
../../../vendor/lockzhiner/rk2206/samples/b20_iot_uart/iot_uart_example.c,63:uartwriteandstr(HelloWorld!),len(11)!
../../../vendor/lockzhiner/rk2206/samples/b20_iot_uart/iot_uart_example.c,72:uartrecvandstr(HelloWorld!),len(11)
../../../vendor/lockzhiner/rk2206/samples/b20_iot_uart/iot_uart_example.c,63:uartwriteandstr(HelloWorld!),len(11)!
../../../vendor/lockzhiner/rk2206/samples/b20_iot_uart/iot_uart_example.c,72:uartrecvandstr(HelloWorld!),len(11)
../../../vendor/lockzhiner/rk2206/samples/b20_iot_uart/iot_uart_example.c,63:uartwriteandstr(HelloWorld!),len(11)!
../../../vendor/lockzhiner/rk2206/samples/b20_iot_uart/iot_uart_example.c,72:uartrecvandstr(HelloWorld!),len(11)
../../../vendor/lockzhiner/rk2206/samples/b20_iot_uart/iot_uart_example.c,63:uartwriteandstr(HelloWorld!),len(11)!
../../../vendor/lockzhiner/rk2206/samples/b20_iot_uart/iot_uart_example.c,72:uartrecvandstr(HelloWorld!),len(11)

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 開發板
    +關注

    關注

    25

    文章

    5389

    瀏覽量

    100914
  • OpenHarmony
    +關注

    關注

    26

    文章

    3804

    瀏覽量

    17869
  • RK2206
    +關注

    關注

    0

    文章

    38

    瀏覽量

    2053
收藏 人收藏

    評論

    相關推薦

    基于OpenHarmony+小RK2206開發板制作的簡易示波器

    基于OpenHarmony + 小RK2206開發板制作的簡易示波器,實時采集波形,實時計算并實時顯示對應的波形。
    的頭像 發表于 05-10 09:02 ?4971次閱讀

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制PWM外設

    1、案例簡介本案例是在小-RK2206開發板上使用IoT庫PWM接口,進行PWM編程
    的頭像 發表于 04-09 08:59 ?548次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>:<b class='flag-5'>OpenHarmony</b>如何使用<b class='flag-5'>IoT</b><b class='flag-5'>接口</b><b class='flag-5'>控制</b>PWM<b class='flag-5'>外設</b>

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制UART外設

    1、實驗簡介 本實驗將演示如何在小-RK2206開發板上使用IOT庫的UART
    發表于 04-22 14:27

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制FLASH外設

    1、實驗簡介 本實驗將演示如何在小-RK2206開發板上使用IOT庫的FLASH接口,進行F
    發表于 04-22 15:02

    輕量系統開發套件介紹:睿智捷 | 小-RK2206 開發板套件

    睿智捷 | 小-RK2206 開發板套件是由福州市睿智捷電子有限公司出品,主控器為瑞芯微
    發表于 04-21 13:39

    【小RK2206開發板試用體驗】鴻蒙應用開發和鴻蒙線程創建

    開發系統:Ubuntu 20.04開發板:小-RK2206開發板
    發表于 05-25 01:32

    【小RK2206開發板試用體驗】OpenHarmony華為云IoT應用開發-智慧井蓋

    本帖最后由 周安平 于 2022-6-4 10:07 編輯 【小RK2206開發板試用體驗】OpenHarmony華為云
    發表于 06-03 20:48

    RK2206開發板搭載OpenHarmony操作系統簡介

    1、小-RK2206開發板簡介小-RK2206
    發表于 07-28 17:28

    基于OpenHarmony系統和小RK2206開發板的避障小車

    這是一款基于OpenHarmony系統和小-RK2206開發板的避障小車。同時,小車上搭載了超聲波測距模塊、舵機模塊、紅外尋跡模塊、直流
    的頭像 發表于 04-21 07:58 ?5671次閱讀

    基于小RK2206開發板所制作的簡易示波器

    基于OpenHarmony + 小RK2206開發板制作的簡易示波器,實時采集波形,實時計算并實時顯示對應的波形。
    的頭像 發表于 05-06 17:09 ?2033次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>所制作的簡易示波器

    -RK2206開發板UART控制案例

    -RK2206開發板UART控制案例一、簡介通用異步收發傳輸器(UniversalAsy
    的頭像 發表于 06-14 11:12 ?1300次閱讀
    小<b class='flag-5'>凌</b><b class='flag-5'>派</b>-<b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>:<b class='flag-5'>UART</b><b class='flag-5'>控制</b>案例

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制ADC外設

    1、案例簡介本案例主要講解如何在小-RK2206開發板上使用IoT庫的ADC接口,進行ADC
    的頭像 發表于 04-10 16:00 ?240次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>:<b class='flag-5'>OpenHarmony</b>如何使用<b class='flag-5'>IoT</b><b class='flag-5'>接口</b><b class='flag-5'>控制</b>ADC<b class='flag-5'>外設</b>

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制GPIO外設

    1、案例簡介本案例主要是如何在小-RK2206開發板上使用IOT庫的GPIO接口,進行GPI
    的頭像 發表于 04-11 15:36 ?340次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>:<b class='flag-5'>OpenHarmony</b>如何使用<b class='flag-5'>IoT</b><b class='flag-5'>接口</b><b class='flag-5'>控制</b>GPIO<b class='flag-5'>外設</b>

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制GPIO中斷

    1、實驗簡介本實驗將演示如何在小-RK2206開發板上使用IOT庫的GPIO中斷模式,進行GPIO編程
    的頭像 發表于 04-21 10:39 ?240次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>:<b class='flag-5'>OpenHarmony</b>如何使用<b class='flag-5'>IoT</b><b class='flag-5'>接口</b><b class='flag-5'>控制</b>GPIO中斷

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制FLASH外設

    1、實驗簡介本實驗將演示如何在小-RK2206開發板上使用IOT庫的FLASH接口,進行FL
    的頭像 發表于 04-22 14:49 ?177次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>:<b class='flag-5'>OpenHarmony</b>如何使用<b class='flag-5'>IoT</b><b class='flag-5'>接口</b><b class='flag-5'>控制</b>FLASH<b class='flag-5'>外設</b>
    主站蜘蛛池模板: 午夜刺激爽爽视频免费观看 | 天天草夜夜草 | 四虎影视在线影院在线观看 | 欧美女人天堂 | 四虎影院永久网址 | 免费欧美黄色 | 日本a级特黄三级三级三级 日本边添边爱边摸边做边爱 | 狠狠干免费视频 | 综合免费一区二区三区 | 国产美女精品一区二区三区 | 四虎影视在线影院4hutv | 美女视频黄免费 | 2017天天操| 天堂网在线视频 | 性欧美高清久久久久久久 | 福利你懂的 | 中文字幕在线乱码免费毛片 | 看黄视频免费 | 久久人精品 | 亚洲人成网站999久久久综合 | 国产日本在线观看 | 五月婷婷综合激情网 | 精品卡一卡二 卡四卡视频 精品噜噜噜噜久久久久久久久 | 高清性色生活片欧美在线 | 国产美女作爱全过程免费视频 | 黄色片免费看视频 | 国产免费卡1卡2卡 | 国产免费爽爽视频免费可以看 | 一区在线免费观看 | www.黄视频| 中文字幕一区二区三区不卡 | 夜夜骑日日操 | 电影一区二区三区 | 亚洲第一在线播放 | 日韩毛片免费视频一级特黄 | 成人女人a毛片在线看 | 能看毛片的网址 | 久久综合九色综合97_ 久久久 | 日本黄色免费电影 | 免费观看黄视频网站 | 毛片的网站 |