代码,应该也没有什么好讲的了,还是把它贴上吧,另外我有用DMA(减少CPU负担) 下图main函数里while(1)里面的0805LED,只是普通的LED,和WS2812没关系,啊,另外,我用的是STM32F4的芯片 代码链接:https://pan.baidu.com/s/1S33m7tx9Tfg8e3WKphGuNQ 提取码:s82g...
选择8 位 SPI 位数 显然,使用更多的位提供了更广泛的 SPI 位率范围。这很重要,因为 STM32 设备上的 SPI 位率被分为 2 的幂,这极大地限制了可能的值。例如,使用 170MHz 运行的 STM32G474,在 1-10 Mb/s 范围内的 SPI 位率只能是 5.3 Mb/s (/32),2.7 Mb/s (/64) 或 1.3 Mb/s (/128)。
STM32 SPI+DMA实现WS2812灯的驱动 WS2812的时序频率比较高,STM32芯片使用软件生成WS2812的时序是没有问题的,但是要屏蔽所有中断,防止时序被干扰,但是这样当刷新频率很高的时候会导致CPU的占用率增高很多,STM32也没有控制WS2812的专门外设,所以为了解决这个棘手的问题,我提出了一个使用SPI+DMA的方式进行WS2812的控制。
1.设置SPI的通信参数,如图1所示 图1 SPI2的参数设置 2.SPI2的DMA的设置,如图2所示 图2 SPI2的DMA的设置 关于这些设置,我们在SPI接口和DMA中都已经给出了详细的解释,所以这里就不再啰嗦了。 二、主函数的内容 int main(void) { /* USER CODE BEGIN 1 */ uint32_t col[12] = {0xff,0x00ff00,0xf...
三.WS2812B驱动方式:DMA+SPI 接上节我们介绍了一种STM32控制WS2812最常用,也是最用一想到的方法,就是用PWM来模式控制信号,并通过DMA传输数组数据,来保证信号传输的连续性。接下来来介绍一个不常用的方法——用SPI单总线控制 估计好多不熟悉STM32的小伙伴都没通过这种通信方式吧,其实我也不熟,只是知道这种模式从...
今天看到一位同学在群里面的留言,要我写一个长串WS2812点亮的程序,因为时间不多,于是简单地写了一个,该程序使用DMA+SPI2来发送数据,使用的是环芯智能科技的开发板(淘宝店铺:环芯智能实验室),灯珠是淘宝买的,一共12颗。下面分享一下: 一、STM32CubeMX的设置 ...
A1: STM32虽然只能输出3.3V,但是控WS2811是可以的。另外3.3V升到5V,三极管或是MOS管的信号上升时间相对而言太长了,跟不上控制信号的变化,导致几乎输不出信号 Q2: 直接用IO口翻转可以控制吗 A2: 不太行。用封装库函数翻转IO的执行速度,很难满足几百ns到1us级别的时间要求,虽然可以直接操作寄存器,但即使是对着...
#include "stm32f10x.h" #define PIXEL_NUM 24 //硬件spi模拟ws2811时序(用spi的8位数据模拟ws281x的一位数据)//要将系统时钟设置为56M,分频数设置为8,则SPI的通信频率为7M,传输一位数据的时间约为143纳秒(ns)//3*143 = 429ns 5*143 = 715ns 符合WS281X芯片的通信时序。// ___ // | |___...
STM32定时器驱动WS2812 最近在学STM32F103的定时器的标准库驱动,在学到定时器的比较输出功能时发现它可以和DMA配合一起使用产生一连串占空比各不同的PWM波,于是我立刻想到用这个东西来驱动WS2812,手边正好有一串30颗灯珠的WS2812灯带。 WS2812的通信协议 数据格式 W
之前曾写过SPI协议的verilog实现,其实单片机也有很多地方用到了SPI,今天我们说一个比较冷门的SPI用法——控制WS2812灯带。 本文主要介绍STM32CubeMx的使用,WS2812灯带的控制。通过WS2812的例程,简单展示STM32CubeMx的方便,快捷 玩过单片机的人或多或少都知道STM32单片机,而STM32单片机因为其相对而言强大的性能,操作也...