STM32F407控制SK9822灯珠驱动

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.时序

        高位先发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SudoReboot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值