赞
踩
欢迎入群共同学习交流
时间记录:2023/12/2
__NOP();宏为空操作,大概1/72us
GPIO口可直接控制
1 数据传输时序图
2 数据传输时间
3 数据传输方式
4 24bit数据结构(高位先发)
头文件(.h)
#ifndef __WS2812X_H__
#define __WS2812X_H__
#include <stm32f10x.h>
#include "delay.h"
#include "sys.h"
void vWs2812xInit(void);
void vWs2812xWrite3Byte(u32 colorData);
void vWs2812xReset(void);
#endif
源文件(.c)
#include "ws2812x.h" static void vDelay21Nop(void); static void vWriteBit0(void); static void vWriteBit1(void); void vWs2812xInit(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStruct); GPIO_SetBits(GPIOA,GPIO_Pin_0); Delay_Init(); } static void vDelay21Nop(void) { __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); __NOP(); } static void vWriteBit0(void) { PAout(0)=1; vDelay21Nop(); PAout(0)=0; vDelay21Nop(); vDelay21Nop(); vDelay21Nop(); } static void vWriteBit1(void) { PAout(0)=1; vDelay21Nop(); vDelay21Nop(); vDelay21Nop(); PAout(0)=0; vDelay21Nop(); } void vWs2812xWrite3Byte(u32 colorData) { for(u8 index=0;index<24;index++){ if((colorData << index) & 0x800000) vWriteBit1(); else vWriteBit0(); } } void vWs2812xReset(void) { PAout(0)=0; Delay_Us(500); }
蹦迪灯
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。