stm8s003控制WS2812彩虹呼吸灯

前言

	买了亚博科技的树莓派智能贴身管家,自带固件使用i2c通信控制风扇和RGB灯,上电不能自扇热,需要树莓派i2c控制。RGB官方也只提供三个颜色变化根本就不酷炫。所以决定自己重写固件。(RGB代码在最后)

一、风扇扇热

static void TIM2_Config(void)
{
  /* Time base configuration */
  TIM2_TimeBaseInit(TIM2_PRESCALER_1, 999);
  /* PWM1 Mode configuration: Channel1 */ 
  TIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,CCR1_Val, TIM2_OCPOLARITY_HIGH);
  TIM2_OC1PreloadConfig(ENABLE);
  TIM2_ARRPreloadConfig(ENABLE);
  /* TIM2 enable counter */
  TIM2_Cmd(ENABLE);
}

没啥可说的使用PWM,需要找到对应引脚的对应PWM通道,使用CCR1_Val设置占空比控制转速。

二、WS2812

下面是从数据手册提取的重要信息
在这里插入图片描述
查资料时发现6引脚RGBLED资料比较多,四引脚WS2812较少。
在这里插入图片描述

在这里插入图片描述
上面是数据发送时序,以及三个级联LED电路和数据传输方法。第一个灯的数据输入接单片机引脚,第一个灯的数据输出引脚接下一个灯的数据输入端,以此类推。下面是代码实现:
1.定义数据引脚拉高拉低的宏

#define RGB_PIN_H() GPIO_WriteHigh(GPIOC, (GPIO_Pin_TypeDef) GPIO_PIN_4);
#define RGB_PIN_L() GPIO_WriteLow(GPIOC, (GPIO_Pin_TypeDef) GPIO_PIN_4);

2.mian函数中引脚初始化

GPIO_Init(GPIOC, (GPIO_Pin_TypeDef) GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);
RGB_PIN_L();

3.引脚发送数据
延时根据系统定义
发送 数据1:
RGB_PIN_H();
(延时 ) ; //系统采用16Mhz 需要10到25个_asm(“nop”)
RGB_PIN_L();
(延时 ) ; //系统采用16Mhz 需要4到6个_asm(“nop”)
发送 数据0:
RGB_PIN_H();
(延时 ) //系统采用16Mhz 需要4到6个_asm(“nop”)
RGB_PIN_L();
(延时 ) //系统采用16Mhz 需要10到25个_asm(“nop”)
4.判断24位每一位是1还是0
因为一般颜色RGB与发送数据的GRB顺序不同,八位数据顺序需要注意。
附 完整工程 及RGB颜色网站https://www.sioe.cn/yingyong/yanse-rgb-16/
main函数主要是颜色的移位

//FF0000到ffff00 红变黄
   	for(RGB_i = 0;RGB_i<0xff;RGB_i++){
   		color = color + 0x100;set_color_3(color);
   		DelyMs(20);
   	}
   	//ffff00到00ff00 黄变绿
   	for(RGB_i = 0;RGB_i<0xff;RGB_i++){
   		color = color - 0x10000;set_color_3(color);
   		DelyMs(20);
   	}
   	//00ff00 到00ffff 绿变青
   	for(RGB_i = 0;RGB_i<0xff;RGB_i++){
   		color++;set_color_3(color);
   		DelyMs(20);
   	}
   	//00ffff 到0000ff 青变蓝
   	for(RGB_i = 0;RGB_i<0xff;RGB_i++){
   		color = color - 0x100;set_color_3(color);
   		DelyMs(20);
   	}
   	//0000ff 到ff00ff 蓝变紫
   	for(RGB_i = 0;RGB_i<0xff;RGB_i++){
   		color = color + 0x10000;set_color_3(color);
   		DelyMs(20);
   	}
   	//ff00ff 到0000ff 紫变红
   	for(RGB_i = 0;RGB_i<0xff;RGB_i++){
   		color--;set_color_3(color);
   		DelyMs(20);
   	}
   	```
   完整工程https://github.com/XiHuanMY/STM8S003-ws2812.git
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值