鸿蒙OS2.0 设备开发之Hi3861-基础功能汇总 原创 精华
Hi3861-GPIO基础功能实现汇总
这是一篇讲解在鸿蒙2.0全量源码中开发Hi3861的常用功能汇总,可帮助我们快速配置GPIO 如,如何实现PWM、I2C、ADC等。
1.基本IO功能
1.1 输出
分两步,使能、配置输出值;
需要注意的是,有些GPIO还需要设置复用功能,可能默认不是普通GPIO模式。
这时候就需要使用hi_io_set_func函数;以GPIO9为例,设为普通IO;
1.2 输入
分三步,使能、配置输入方式(上下拉)、获取io电平;
1.3 系统延时
系统延时函数比较多,具体区别看使用效果。常用的有
2.PWM输出
Hi3861共有6路PWM。Hi3861-2.0版本PWM使用流程: 1.初始化io、2. io复用为pwm、3. 使能pwm通道、4. 开始输出pwm 、5.停止输出pwm
2.1 PWM常用API
iot_pwm.h 封装的函数中,与hi_pwm.h 封装的函数入口参数不同;
iot_pwm.h 中定义的IoTPwmStart();
hi_pwm.h 中定义的hi_pwm_start();
可以看出,函数封装后可更方便的使用PWM,直接设置占空比(1-99)。但发现iot_pwm.h封装的IoTPwmStart()频率有错误,导致pwm不正常,原因是在IoTPwmStart()中,hiFreq已经是计算后的实际频率,不是分频系数。给hi_pwm_start()传入数据时,不应该传入hiFreq,应该还是最初的freq。我已修正该封装,顺利驱动了蜂鸣器。
- 1.
pwm总结,无论使用IoTPwmStart()还是hi_pwm_start(),实际输出频率hiFreq:
pwm总结,使用IoTPwmStart(port,duty,freq)实际占空比hiDuty:
pwm总结,使用hi_pwm_start(port,duty,freq)实际占空比hiDuty:
2.2 如何控制舵机
hi3861-PWM其他信息
–理论频率 [1, 65.535]KHz
(CLK_160M / freq) < 0xFFFF(65535)
分频系数freq [2442,160M]
–实际频率不会很低,具体没测,没示波器,
数字舵机(T=20ms)无法控制。
模拟低频pwm: 延时+io输出(0-1)模拟实现 控制精度要求不是很高可以这么做。期待官方出解决方案。
3.ADC实现
Hi3861共有7路ADC , 各通道见hi3861手册表6.2(截取如下) 一共8个ADC通道,ADC0–ADC7 但通道7为参考电压,不能adc转换。
3.1 ADC常用API
Hi3861-2.0版本ADC使用流程:1.初始化io、2. io为输入、3. 配置输入模式、4. 读取AD数据。
3.2 ADC使用注意事项
Hi3861-2.0版本i2c hi_adc_read()参数解析
获取数据是指针传值。
4. 驱动i2c
4.1 i2c API
Hi3861-2.0版本i2c使用流程(两路i2c):1.初始化io、2. 复用io为i2c、3. 初始化对应i2c通道、4. 读取/发送数据。
4.2 i2c 使用提示
Hi3861-2.0版本i2c 一些重要定义:
i2c 函数的一些思考:
小总结
-
基本IO功能 -
I2C相关API -
PWM相关API -
ADC相关API
常用的头文件
我写了开发记录PPT,需要的可以去我B站私信自提点我拿资料。
5.演示案例及其链接
学会使用以上API之后,就可以实现各种功能,比如在HiSpark Wi-Fi IOT智能家居套件中提供的各种拓展板(炫彩板、环境监测板、交通灯板),学习过程中做了一些演示视频,有兴趣可点击查看:
i2c通信–连接MPU6050:点我见演示视频
ADC、PWM控制LED、蜂鸣器、舵机、各种拓展板:点我见演示视频
6.其他功能(wifi入网、web编程)
鸿蒙OS的目标是万物互联,其实更有意思的是Hi3861支持鸿蒙OS-轻量化小型系统并且具备wifi入网能力,连接上网,就可以说做很多事儿。比如视频末尾使用手机控制舵机,想想还能做啥呢? 无钥匙开门、开关灯、控制家电、控制设备……
下一期讲讲wifi入网,实现无钥匙开宿舍门。
不错 学习!!
点赞,收藏,学习
一份好资料
求教大牛 , pwm怎么驱动舵机 ,hi_pwm_start这个函数中三个参数该怎么设置。比如我要驱动 180度舵机 ,分别0-45-90-135-180,其占空比分别为2.5-5-7.5-10-12.5。用到这个里面,三个参数怎么设置
你好,hi3861的pwm频率太高,舵机一般是1000/20 = 50Hz的pwm,所以想控制舵机只好用GPIO输出高低电平来模拟,结合延时函数就可以
多谢多谢,我之前已经用你说的这个方法解决了,只是角度精度不够