5个版本 (破坏性)

0.5.0 2024年7月29日
0.4.0 2020年12月2日
0.3.0 2020年2月9日
0.2.0 2019年5月3日
0.1.0 2019年3月5日

#265嵌入式开发

Download history 113/week @ 2024-05-03 137/week @ 2024-05-10 103/week @ 2024-05-17 357/week @ 2024-05-24 147/week @ 2024-05-31 159/week @ 2024-06-07 155/week @ 2024-06-14 83/week @ 2024-06-21 167/week @ 2024-06-28 64/week @ 2024-07-05 130/week @ 2024-07-12 202/week @ 2024-07-19 295/week @ 2024-07-26 146/week @ 2024-08-02 177/week @ 2024-08-09 259/week @ 2024-08-16

每月969次下载
用于 3 crates

MIT/Apache

5MB
340

嵌入式-hal spi traits的Ws2812驱动器

smart-leds crate一起使用。

使用SPI作为时序提供者的嵌入式-hal驱动器,用于ws2812 LED。

rainbow on stm32f0

它提供了三种变体

  • 常规使用

    您的SPI外设必须以2MHz至3.8MHz的速度运行,SPI数据将在现场生成。这意味着您的核心必须足够快(48 MHz应该足够)。

  • 预渲染

    如果您的核心速度太慢(例如,AVR系列),您可能想使用这个。它事先创建所有数据,然后发送。这意味着您必须提供一个足够大的数据数组,以便存储所有SPI数据。

  • 托管

    适用于Raspberry Pi或其他Linux SBC等设备。类似于预渲染,它事先创建所有数据,但使用单个调用发送。它不起作用!!!

它不起作用!!!

  • 您使用的是常规变体?您的SPI是否在正确的频率下运行?

    您的CPU可能太慢,但这也可能取决于HAL实现和您的Iterator链。使用prerendered变体可能有所帮助。对于许多SPI外设,时钟生成要简单得多,例如UART外设。您应该验证它是否以可接受的频率运行,可以通过研究数据手册和HAL代码,或者使用逻辑分析仪。一个fx2基于的,通常在10美元以下,效果很好。

  • 如果第一个LED始终开启,无论您放入什么数据,您的SPI可能没有在空闲时将mosi线设为低(您可以用万用表检查)。这还可能是第一个发送的位的时间问题,这是stm32f030在2MHz时的情况。

    您可以尝试使用mosi_idle_high功能,这可能有所帮助。

  • 您的设备是否足够快?您的迭代器是否足够快?如果花费时间过长,可能会完全破坏正常版本的时序。尝试使用预渲染的变体。

  • 一切都是白色吗?这可能是由于SPI外围设备速度过慢,或者在字节之间花费了太多时间。

  • 当您的第一个LED亮度/颜色不正确,而其他LED表现如预期时,这是由于数据线电压低,或者Vin和Din电压之间电压差太大,使得一些“高”位被芯片读作“低”位。由于芯片电路,这些电压在传递到线上的下一个LED时被调节,这就是为什么其他LED表现如预期。(关于这里具体发生的事情,请参阅Hackaday | Cheating at 5V WS2812 Control to Use 3.3V Data

  • 您是否使用了--release编译器标志?

    通过SPI传递的每个字节的时序非常敏感,使用没有完全优化的代码编译可能会破坏您的时序。始终使用与您的cargo <command>一起的--release标志,或者另设[profile.dev] opt-level = "3"以确保时序与您的编程相匹配。一个明显的迹象是所有像素在每种颜色下都达到全亮度。

当提交关于错误/奇怪数据的issue时,如果包括您的代码(当然)以及从示波器/逻辑分析仪捕获的MOSI和SCK,这将有所帮助。

许可

根据您的选择,许可如下

贡献

除非您明确说明,否则任何有意提交给作品以包含在内的贡献,如Apache-2.0许可中定义的,应如上所述双许可,不附加任何额外的条款或条件。

依赖