官网代码仓:BearPi-HM_Nano: 小熊派BearPi-HM Nano开发板基于HarmonyOS的源码
代码仓和全网几乎没有hi3861SPI相关的例程序,故分享给大家(首发哈哈)
这个是代码的效果视频
ws2812
驱动ws2812灯板关键点为实现ws2812时序的0/1码
在liteos上我想到有三种方法
1.GPIO翻转
实时性不够,实测的不能得到400ns宽度(0码的脉宽)的电平
2.PWM占空比
没有找到dma发送的接口(不能连续发送多个字节),每次只能设置一个占空比,现象为连续多个相同占空比的电平
3.SPI发数据
理想情况下800K*8HZ发送一个字节(8bit)模拟ws2812一个时序周期
发送0xFC(11111100)时为‘1码’
发送0xE0 (11100000)时为‘0码’
发送0x00时为低电平,用作break/reset(MOSI空闲时为高电平),放在每帧开始
以下为接线图
以下为源码
spi_example.c
[code]#include #include #include "hi_gpio.h"#include "hi_spi.h"#include #include #include "ohos_init.h"#include "cmsis_os2.h"#include "wifiiot_pwm.h"#include "wifiiot_gpio.h"#include "wifiiot_spi.h"#include "wifiiot_gpio_ex.h"#define RED_INDEX 0#define GREEN_INDEX 1#define BLUE_INDEX 2//功能:把 3BYTE 的RGB数据转换成 24BYTE SPI数据static void WS2812_send(unsigned char *rgb){ unsigned char data[24]; unsigned char i, bit; unsigned char index = 0; for(i = 0; i < 8; i++) // GREEN 按位发送 { bit = ((rgb[GREEN_INDEX] |