从零开始 DIY 智能家居 - AC791N通过单线SPI驱动WS2812


前言

今天被疫情管控在家,因为太过突然,完全没准备,也没办法远程办公访问,正好闲下来一天整理一下前段时间弄的一个小玩意。
一个智能灯带,这玩意看起来简单,但是坑蛮多的,特别是我选择了一个比较少见的模块。那坑就更多了。
在这里插入图片描述
因为这次是被管控在家,我设备和代码啥都没有,只能通过之前的文档和笔记给大家分享一下这次开发遇到的坑,所以没办法像之前那样直接将代码分享给大家,但是我还是会尽量讲清楚WS2812要如何使用的。


一、硬件选择

首先,就是翼辉的 边缘计算机 Spirit 1 边缘计算机,这玩意给开发者用确实好使,我已经习惯用这个玩意协助开发调试设备了。

至于开发板,这次终于不是祖传的ESP32了,是杰里科技的AC791N开发板!当然,本穷逼只买得起最便宜的单独的开发板模块,这玩意单板子就特么100块啊!

灯带我选择的是WS2812B一种很常见,资料很多的灯带,但是实际上网上的资料很多都不对。我查着资料用示波器抓了半天波形才搞定。

因为设备不在家,这里没办法给大家配图了QWQ

驱动WS2812一般就三种方法
直接控制IO口拉高拉低来产生波形,但是WS2812对电平翻转速度要求有点高,很难达到这么高的速度,而且直接这么控制误差比较大,所以我没采用。

我在网上看见用得比较多的是 PWM+DMA的方式,然后蛋疼的地方来了,AC791N开发板开发板的资料比较少,只有官方的一个文档,官方文档只简单的说了一下PWM的使用,有很多的功能和宏并没有介绍,我折腾了半天,实在是调不通,去找他们的官方支持才知道,他们的PWM是直连的,没有DMA。

最后在官方人员的帮助下,我才终于成功使用SPI单线模式+DMA的方式驱动WS2812,官方文档上没有SPI单线模式的介绍,就很蛋疼

接线:
5V->5V
PH1(SPI DO)->DO
GND->GND

二、代码讲解

1.SPI配置

因为这次代码不在身边,我只能找我笔记里的关键部分来讲了

采用SPI单线模式+DMA,主要是SPI_UNIDIR_MODE这个宏将SPI配置为单线模式
使用SPI2 portA
SPI速率为8M
输出引脚为 :IO_PORTH_01

SPI配置代码如下(示例):
在这里插入图片描述
port A 的引脚定义
在这里插入图片描述

/************************** SPI config ****************************/
SPI2_PLATFORM_DATA_BEGIN(spi2_data)
    .clk    = 8000000,
    .mode   = SPI_1WIRE_MODE,
    .port   = 'A',
    .attr   = SPI_SCLK_L_UPH_SMPH | SPI_UNIDIR_MODE,
SPI2_PLATFORM_DATA_END()

注册SPI设备:
REGISTER_DEVICES(device_table) = {
   
   
	{
   
   "uart2", &uart_dev_ops, 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值