ToB企服应用市场:ToB评测及商务社交产业平台

标题: 小熊派bearpi-HM-nano(hi3861鸿蒙LiteOS)点亮WS2812灯板(spi方式) [打印本页]

作者: 光之使者    时间: 2022-6-24 05:34
标题: 小熊派bearpi-HM-nano(hi3861鸿蒙LiteOS)点亮WS2812灯板(spi方式)
官网代码仓: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]




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4