用HarmonyOS点亮LED - 基于RISC-V Hi3861开发板
一、 Hi3861模组的介绍
1. 外观和基本功能
Hi3861开发板模组大小约2cm*5cm,是一款高度集成的2.4GHz WLAN SoC。
Hi3861芯片集成高性能32bit微处理器、拥有丰富的外设接口,芯片内置SRAM(Static Random Access Memory)和Flash,并支持在Flash上运行程序。
Hi3861模组有2MB FLASH,352KB RAM。但我们编写代码时,要注意对有限资源的合理利用。
Hi3861可以说是麻雀虽小,五脏俱全。Hi3861的外设接口包括(外部主晶振为40M或者24M):
- 2个SPI(Synchronous Peripheral Interface)
- 3个UART(Universal Asynchronous Receiver & Transmitter)
- 2个I2C(The Inter-Integrated Circuit)
- 6路PWM(Pulse Width Modulation)
- 15个GPIO(General Purpose Input/Output)
- 7路ADC(Analog to Digital Converter)
- 1个I2S接口
- 1个高速SDIO2.0(Secure Digital Input/Output)接口,最高时钟可达50MHz;
1.1 模组外观图:
![用HarmonyOS点亮LED - 基于RISC-V Hi3861开发板-鸿蒙HarmonyOS技术社区](https://s2.51cto.com/oss/202109/15/922f6c9b8dbddffeac474322f4002fb8.jpg)
1.2 Hi3861主控功能框架图:
![用HarmonyOS点亮LED - 基于RISC-V Hi3861开发板-鸿蒙HarmonyOS技术社区](https://s5.51cto.com/oss/202109/15/c02fbe1981a3bb3c0e816be981deaef2.jpg)
1.3 Hi3861原理图
![用HarmonyOS点亮LED - 基于RISC-V Hi3861开发板-鸿蒙HarmonyOS技术社区](https://s4.51cto.com/oss/202109/15/81e2b46333c3e9d9908dadd5088c1210.jpg)
![用HarmonyOS点亮LED - 基于RISC-V Hi3861开发板-鸿蒙HarmonyOS技术社区](https://s4.51cto.com/oss/202109/15/e96f007224bf43785111aaea7a7a1979.jpg)
二、Hi3861开发环境的搭建
1. 概览
因为截至本文发布,Linux平台下的开发工具不支持Hi3861的烧录(且Windows平台中的编译环境比较难搭建),所以我们得使用windows的工具来烧录,Linux平台编译。
- Ubuntu20.04来编译源码
- Windows10通过网络从Ubuntu中下载二进制文件,并烧录二进制文件到Hi3861中
![用HarmonyOS点亮LED - 基于RISC-V Hi3861开发板-鸿蒙HarmonyOS技术社区](https://s4.51cto.com/oss/202109/15/7c73db1bc27094eb08f24d257ae1fe9f.jpg)
2. Ubuntu20.04开发环境的搭建
可以在windows10中使用virtual box虚拟机软件来安装一个下载好的Ubuntu20.04镜像,从而拥有Ubuntu20.04基本的开发环境。这里忽略。
假设
- 已有Ubuntu20.04系统;
- 可以联网;
- 可以使用ssh连接;
- 其空闲存储空间(推荐)在30G以上。
2.1 执行以下命令来搭建Ubuntu20.04的环境
- // Ubuntu20+
- sudo apt update
- sudo apt install -y vim gcc g++ flex bison texinfo make zlib* libffi-dev git git-lfs iputils-ping iproute2 net-tools
- sudo apt install -y build-essential python3 python3-pip python3.8-venv scons python3-testresources
- pip3 install scons ; scons -v
- pip3 install kconfiglib
- pip3 install pycryptodome
- pip3 install six --upgrade --ignore-installed six
- pip3 install ecdsa
- // 安装hb
- python3 -m pip install --user ohos-build
- // 安装编译链gcc_riscv32整合包, // 或者自行下载gcc_riscv32各个组件 并且编译, N/A
- wget https://repo.huaweicloud.com/harmonyos/compiler/gcc_riscv32/7.3.0/linux/gcc_riscv32-linux-7.3.0.tar.gz
- // 使用~/.bashrc来配置环境变量
- export PATH=$PATH:~/work/tools/gcc_riscv32/bin
- source ~/.bashrc
- //检查编译链是否安装好
- $ riscv32-unknown-elf-gcc -v
- ...
- gcc version 7.3.0 (GCC)
- // downloads devicetool-linux-tool
- wget https://contentcenter-vali-drcn.dbankcdn.com/pvt_2/DeveloperAlliance_package_901_9/50/v3/3iXerz92RfqKxMyzEXHblg/devicetool-linux-tool-2.1.0.0.zip?HW-CC-KV=V1&HW-CC-Date=20210531T110021Z&HW-CC-Expire=315360000&HW-CC-Sign=24AFCA46B37541ED3A936186EEDF627CFD397B7C202FFEEF564D820897F75822
- //install vscode, install node.js & hpm
- N/A
- // unzip & install the tool
- bash deveco-device-tool-2.2.0+285431.76f4090e.run
- // 最后可能有个warning信息,我们按照提示来安装一个软件即可
- sudo apt install authbind
- ...
- // downloads the source codes
- wget https://repo.huaweicloud.com/harmonyos/os/1.1.2/code-v1.1.2-LTS.tar.gz
- tar -xvf code-v1.1.2-LTS.tar.gz
2.2 进入源代码根路径 进行配置和编译
“build success” 就意味着编译环境搭建成功。
- $ cd code-v1.1.2-LTS
- $ hb set
- [OHOS INFO] Input code path: .
- OHOS Which product do you need? wifiiot_hispark_pegasus
- $ hb build
- ...
- [OHOS INFO] wifiiot_hispark_pegasus build success
- [OHOS INFO] cost time: 0:00:37
- $ ls out/hispark_pegasus/wifiiot_hispark_pegasus/ -alh
- total 31M
- drwxrwxr-x 7 henry henry 4.0K 9月 2 14:52 .
- drwxrwxr-x 3 henry henry 4.0K 9月 2 14:51 ..
- -rw-rw-r-- 1 henry henry 462 9月 2 14:51 args.gn
- -rw-rw-r-- 1 henry henry 47K 9月 2 14:52 build.log
- -rw-rw-r-- 1 henry henry 26K 9月 2 14:51 build.ninja
- -rw-rw-r-- 1 henry henry 5.3K 9月 2 14:51 build.ninja.d
- drwxrwxr-x 3 henry henry 4.0K 9月 2 14:51 gen
- -rw-rw-r-- 1 henry henry 24K 9月 2 14:52 Hi3861_boot_signed_B.bin
- -rw-rw-r-- 1 henry henry 24K 9月 2 14:52 Hi3861_boot_signed.bin
- -rw-rw-r-- 1 henry henry 15K 9月 2 14:52 Hi3861_loader_signed.bin
- -rw-rw-r-- 1 henry henry 1.2M 9月 2 14:52 Hi3861_wifiiot_app_allinone.bin
- -rw-rw-r-- 1 henry henry 22M 9月 2 14:52 Hi3861_wifiiot_app.asm
- -rw-rw-r-- 1 henry henry 1.2M 9月 2 14:52 Hi3861_wifiiot_app_burn.bin
- -rw-rw-r-- 1 henry henry 25K 9月 2 14:52 Hi3861_wifiiot_app_flash_boot_ota.bin
- -rw-rw-r-- 1 henry henry 3.5M 9月 2 14:52 Hi3861_wifiiot_app.map
- -rw-rw-r-- 1 henry henry 570K 9月 2 14:52 Hi3861_wifiiot_app_ota.bin
- -rwxrwxr-x 1 henry henry 2.2M 9月 2 14:52 Hi3861_wifiiot_app.out
- -rw-rw-r-- 1 henry henry 8 9月 2 14:52 Hi3861_wifiiot_app_vercfg.bin
- drwxrwxr-x 2 henry henry 4.0K 9月 2 14:51 libs
- -rw-rw-r-- 1 henry henry 37K 9月 2 14:52 .ninja_log
- drwxrwxr-x 4 henry henry 4.0K 9月 2 14:51 NOTICE_FILE
- drwx------ 12 henry henry 4.0K 9月 2 14:51 obj
- drwxrwxr-x 3 henry henry 4.0K 9月 2 14:51 suites
- -rw-rw-r-- 1 henry henry 34K 9月 2 14:51 toolchain.ninja
3. Windows10开发环境的搭建
3.1 安装hpm
- // 建议将npm源配置为国内镜像,例如设置为华为云镜像源。
- npm config set registry https://repo.huaweicloud.com/repository/npm/
- // 打开命令行工具,执行如下命令安装最新版本hpm。
- npm install -g @ohos/hpm-cli
- //如果已安装hpm,可以执行命令升级hpm至最新版本。
- npm update -g @ohos/hpm-cli
3.2 问题 - DevEco Device Tool安装失败:
“[Errno 13] Permission denied: ‘xxx\.deveco-device-tool\core\tool_openlogic_openjdk_jre\jre\bin\ucrtbase.dll’”
解决:
- 退出了360安全卫士,关闭杀毒软件和所有其他不相关软件:vscode, OpenJDK…
- 手动删除C:Users
AppDataLocaldeveco-device-tool-installer和C:Users .deveco-device-tool这两个目录; - 重新安装
- 重启vscode后,在左侧功能图标中有deveco的图标出现,即表示deveco安装成功
三、点亮Hi3861的LED
0. Hi3861的gpio功能列表
![用HarmonyOS点亮LED - 基于RISC-V Hi3861开发板-鸿蒙HarmonyOS技术社区](https://s2.51cto.com/oss/202109/15/7ee9a59d3e682756efc94149a255365c.jpg)
1. 首先我们应该找到Hi3861的原理图,LED1对应的是GPIO09
根据这个原理图,我们只要保持J3的跳冒是连接的,从cpu引过来的GPIO09保持低电平,那么LED1就会点亮了。
![用HarmonyOS点亮LED - 基于RISC-V Hi3861开发板-鸿蒙HarmonyOS技术社区](https://s6.51cto.com/oss/202109/15/85ca1342eaf25fbc5bb14753f2113523.jpg)
HarmonyOS的gpio操作流程为:
![用HarmonyOS点亮LED - 基于RISC-V Hi3861开发板-鸿蒙HarmonyOS技术社区](https://s6.51cto.com/oss/202109/15/de58ba876e11308cff097ff0e66474cd.jpg)
因为我们不是操作gpio来获取/控制/响应gpio的中断,所以只需要关心读写gpio的流程即可。
2. HarmonyOS中提供了LED的demo, 可以供我们使用
code-v1.1.2-LTS/applications/sample/wifi-iot/app/iothardware/led_example.c
我们需要修改配置文件:app/BUILD.gn
添加相对路径"iothardware"下的库"led_example",中间以":"分隔开
![用HarmonyOS点亮LED - 基于RISC-V Hi3861开发板-鸿蒙HarmonyOS技术社区](https://s6.51cto.com/oss/202109/15/96cdc5f8fa1954e142cca7a539fbe75b.jpg)
修改好后,我们就可以到源码的根目录中使用"hb build"来编译了
注:"led_example"库名称是由iothardware/BUILD.gn来指定的
![用HarmonyOS点亮LED - 基于RISC-V Hi3861开发板-鸿蒙HarmonyOS技术社区](https://s2.51cto.com/oss/202109/15/f0b39cb16f8103e0188f4734982cf35e.jpg)
四、烧录二进制文件到Hi3861
1. 下载Ubuntu中的源码二进制文件到windows10中
所有的生成文件在:code-v1.1.2-LTS/out 目录中
我们使用mobaxterm(https://mobaxterm.mobatek.net/download.html)工具,
ssh访问到我们的Ubuntu20.04后,就可以用其sftp功能下载out目录到我们的win10的download目录中.
2. 在windows10中已经安装好deveco工具的vscode打开
- 一定要打开包含out目录的上一级目录:如我们的下载目录downloads文件夹
- 直接可以作为一个项目打开
- 选择framework为:hb
- 平台为: hi3861
![用HarmonyOS点亮LED - 基于RISC-V Hi3861开发板-鸿蒙HarmonyOS技术社区](https://s4.51cto.com/oss/202109/15/7cb3efe923d531bd232ac47dbe9fd4da.jpg)
3. 配置项目的下载信息
连接好自己的hi3861模组,如果电脑没有装ch340串口驱动,一定别忘了装。
4. 点击烧录
烧录的过程中,会在vscode的终端提示重启开始烧录,请按下hi3861的reset键开始烧录。
烧录成功后,重新上电即可立即运行。
![用HarmonyOS点亮LED - 基于RISC-V Hi3861开发板-鸿蒙HarmonyOS技术社区](https://s5.51cto.com/oss/202109/15/4abe471c97f4cab958809b781edb86cc.jpg)
5. 耶 - 布灵布灵 - 亮咯
![用HarmonyOS点亮LED - 基于RISC-V Hi3861开发板-鸿蒙HarmonyOS技术社区](https://s6.51cto.com/oss/202109/15/1ef7607cf02513443b2a1be19ad2e4a5.jpg)
相关文章
- 热点推荐:成功程序员的8个习惯
- 成为优秀程序员的10条黄金法则
- 新型僵尸网络目标锁定Hadoop服务器,利用“肉鸡”发动DDoS攻击
- 最全面的C/C++编码规范总结
- 每一个程序员都是自学成才
- 数据挖掘领域十大经典算法之—CART算法(附代码)
- 技术巨头们如何传播开源编程之精神
- Commvault助力山东省立医院搭建一体化数据管理平台
- 测试是浪费时间,我的程序肯定没问题
- PHP爬虫:百万级别知乎用户数据爬取与分析
- GrowingIO B轮融资3000万美元 打造更懂用户和增长的行为分析产品
- PHP中的随机性——你觉得自己幸运吗?
- Java EE 7当中的编程式Websocket端点
- 15 位健在的牛叉程序员,你知道哪几位?
- Web端PHP代码函数覆盖率测试解决方案
- 全球调研报告:分析洞察依旧受制于技术复杂和人才瓶颈
- 为什么我要用C写游戏
- 如何才能够写出优美的C代码呢?
- 大数据的阴暗面
- PHP实现基于文本的莫斯电码生成器