0.定义
#define sk9822_CLK PBout(5)
#define sk9822_DAT PBout(6)
1.初始化
void sk9822_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStruct);
sk9822_CLK = 1;
}
2.发送数据
void send_data_sk9822(u32 data)
{
u8 i = 0;
sk9822_CLK = 1;
delay_us(1);
for (i = 0; i < 32; i++)
{
sk9822_CLK = 0;
delay_us(1);
sk9822_DAT = data>>(31-i) & 0x01;
delay_us(1);
sk9822_CLK = 1;
delay_us(1);
}
}
3.帧头
void led_send_start(void)
{
send_data_sk9822(0x00000000);
}
4.帧尾
void led_send_end(void)
{
send_data_sk9822(0xFFFFFFFF);
}
5.数据格式
帧头是32位0,即0x00000000
帧尾是32位1,即0xffffffff
LED帧,位[31:29]固定为:111
位[28:24]:0 0000 ~ 1 1111,表示灯的亮度
位[23:16]:0000 0000 ~ 1111 1111,表示蓝色的值
位[15:8]: 0000 0000 ~ 1111 1111,表示绿色的值
位[7:0]: 0000 0000 ~ 1111 1111,表示红色的值
6.时序
高位先发。