小熊派bearpi-HM-nano(hi3861鸿蒙LiteOS)点亮WS2812灯板(spi方式) ...

打印 上一主题 下一主题

主题 531|帖子 531|积分 1593

官网代码仓: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]
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

光之使者

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表