|
搞了一晚上,好辛苦,上代码先。
void Set_LED_High()
{
int i=0;
PAout(4)=1;
i=6;
while(i--);
PAout(4)=0;
//i=1;
while(0);
}
void Set_LED_Down()
{
int i=0;
PAout(4)=1;
while(0);
PAout(4)=0;
i=6;
while(i--);
}
void RST_LED()
{
PAout(4)=0;
delay_us(50);
}
int main(void)
{ int i=0;
GPIO_InitTypeDef GPIOStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIOStruct.GPIO_Mode=GPIO_Mode_Out_PP;
GPIOStruct.GPIO_Pin=GPIO_Pin_4;
GPIOStruct.GPIO_Speed=GPIO_Speed_50MHz;
delay_init();
GPIO_Init(GPIOA,&GPIOStruct);
LED_Init();
RST_LED();
while(1) {
i=24;
while(i--)
{
Set_LED_High();
//delay_us(10);
}
RST_LED();
}
PAout(4)=0;
while(1)
{
LED0=0;
LED1=1;
delay_ms(300); //ÑÓʱ300ms
LED0=1;
LED1=0;
delay_ms(300); //ÑÓʱ300ms
}
}
有点乱大家不要介意。
SET_Led_High是发送1字码,850ns高电平,400ns低电平。0字码则相反。这两个函数里面的时序我用示波器看过了,最好不要乱改。
顺便说一下:WS2812B不能维持电平逻辑,要反复扫描,也就是发送了0xfff(白光) 并不能一直显示白光,只是会显示一下然后就灭了,所以要一直扫,或者要一直有数据输入进去。我以为是能够锁存数据的结果搞了一晚上。。。本来用dsp已经搞定了。看来dsp的io速度还是可以的。
推测2812B里面维持电平的十有八九是什么电容电路。。。。
|
|