标题: sk6812蓝牙灯带控制stm32源码 [打印本页]

作者: prefect_long    时间: 2017-12-14 19:26
标题: sk6812蓝牙灯带控制stm32源码
蓝牙控制,格式是(first位置,finally位置,颜色32位数据),控制任一一段灯的颜色,还有跑马灯可以修改,由于我的灯带数目是60 ,所以位置是0到60设置。

单片机源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "timer.h"
  6.   
  7. int main(void)
  8. {
  9.         u8 r,g,b,w;  //4个字节  32位
  10.   u32 lednum[60];
  11.         u32 yanse;
  12.         u8 t;
  13.         u8 len,r1,r2,g1,g2,b1,b2,w1,w2,R,G,B,W;       
  14.         u16 led_first,led_end;
  15.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
  16.         delay_init(168);  //初始化延时函数
  17.         LED_Init();                                //初始化LED端口
  18.         uart_init(9600);        //串口初始化波特率为115200   
  19.         while(1)
  20.         {
  21.                                 if(USART_RX_STA!=0)  //判断是否接收到数据
  22.                 {                                          
  23.                
  24.                         len=num;//得到此次接收到的数据长度
  25.                         printf("\r\n\r\n");//插入换行
  26.                         
  27.                         if(data_buff[8]>87)  r1=data_buff[8]-87;       
  28.                         else                 r1=data_buff[8]-48;         
  29.                        
  30.                         if(data_buff[9]>87)  r2=data_buff[9]-87;  
  31.       else                 r2=data_buff[9]-48;
  32.                
  33.                         if(data_buff[10]>87)  g1=data_buff[10]-87;       
  34.                         else                 g1=data_buff[10]-48;         
  35.                         if(data_buff[11]>87)  g2=data_buff[11]-87;  
  36.       else                 g2=data_buff[11]-48;
  37.                        
  38.                         if(data_buff[12]>87)  b1=data_buff[12]-87;       
  39.                         else                 b1=data_buff[12]-48;         
  40.                         if(data_buff[13]>87)  b2=data_buff[13]-87;  
  41.       else                 b2=data_buff[13]-48;
  42.                        
  43.                         if(data_buff[14]>87)  w1=data_buff[14]-87;       
  44.                         else                 w1=data_buff[14]-48;         
  45.                         if(data_buff[15]>87)  w2=data_buff[15]-87;  
  46.       else                 w2=data_buff[15]-48;
  47.                        
  48.                        
  49.                   R=r1<<4|r2;
  50.         G=g1<<4|g2;                       
  51.                              B=b1<<4|b2;
  52.                               W=w1<<4|w2;
  53.                         yanse=R<<24|G<<16|B<<8|W;
  54.                         led_first=100*(data_buff[0]-48)+10*(data_buff[1]-48)+1*(data_buff[2]-48);
  55.                   led_end=100*(data_buff[4]-48)+10*(data_buff[5]-48)+1*(data_buff[6]-48);
  56.                         printf("%d\r\n",led_first);
  57.                         printf("%d\r\n",led_end);       
  58.                         printf("%d\r\n",r1);
  59.                         printf("%d\r\n",r2);
  60.                         printf("%d\r\n",g1);
  61.                         printf("%d\r\n",g2);
  62.                         printf("%d\r\n",b1);
  63.                         printf("%d\r\n",b2);
  64.                         printf("%d\r\n",w1);
  65.                         printf("%d\r\n",w2);
  66.                         printf("%d\r\n",R);
  67.                   printf("%d\r\n",G);
  68.                         printf("%d\r\n",B);
  69.                         printf("%d\r\n",W);
  70.                         printf("%d\r\n",led_first);
  71.                         printf("%d\r\n",led_end);
  72.                         printf("yanse=%x",yanse);
  73.                         USART_RX_STA=0;
  74.                         num=0;
  75.                 }
  76. paoma_led(yanse,led_first-1,led_end-1,1);//跑马灯,颜色,个数
  77.         }
  78. }
复制代码

所有资料51hei提供下载:
sk6812灯带控制.rar (453.76 KB, 下载次数: 208)



作者: 是啊啊啊    时间: 2017-12-20 09:14
挺好的
作者: aa8473229    时间: 2018-1-3 09:23
不错呢
作者: HaoLiufu    时间: 2018-1-5 18:34
谢谢分享
作者: HaoLiufu    时间: 2018-1-5 18:35
谢谢分享
作者: janson    时间: 2018-1-6 20:49
谢谢分享
作者: ansonwn    时间: 2018-2-1 23:42
謝謝分享
作者: 110691    时间: 2018-2-12 22:01
谢谢分享
作者: ECHO_ECHE    时间: 2018-2-13 13:18
谢谢分享

作者: allielxh    时间: 2018-2-13 23:43

谢谢分享
作者: yinlianger    时间: 2018-4-1 23:40
你好,请教个问题。我准备用STM32F429 来控制sk6812,但尝试了很久都点不亮灯,看到你的程序给了我启发,有几点不明白,希望指点下。
1. sk6812规格书 信号1 信号0 如下,但你程序延时好像没有按规格书来

2.__nop()延时问题
f429 主频180MHZ 我在调试状态查看一个nop 耗时100ns(大的不可理解),这是为什么呢?
从你程序来看,168MHZ 一个nop 是14ns左右
  1. void delay_ns(u16 ns)  //ÑÓʱ;ns*14ns
  2. {       
  3. u16 num=ns;       
  4. for(num;num>0;num--)
  5.         {
  6. __NOP();   

  7.         }
  8.                
  9. }
复制代码
3. 我调试发现GPIO 反转都要200ns 时间,这让我已经无法控制stm32产生精确的时序了
  1. PAout_GPIO_PORT->BSRRH = PAout_GPIO_PIN
复制代码

希望不吝赐教,这个问题困扰我好几天了。谢谢


作者: yinlianger    时间: 2018-4-1 23:43
你好,请教个问题。我准备用STM32F429 来控制sk6812,但尝试了很久都点不亮灯,看到你的程序给了我启发,有几点不明白,希望指点下。
1. sk6812规格书 信号1 信号0 如下,但你程序延时好像没有按规格书来

2.__nop()延时问题
f429 主频180MHZ 我在调试状态查看一个nop 耗时100ns(大的不可理解),这是为什么呢?
从你程序来看,168MHZ 一个nop 是14ns左右

    void delay_ns(u16 ns) //ÑÓʱ;ns*14ns
    {
    u16 num=ns;
    for(num;num>0;num--)
    {
    __NOP();

    }

    }

3. 我调试发现GPIO 反转都要200ns 时间,这让我已经无法控制stm32产生精确的时序了

    PAout_GPIO_PORT->BSRRH = PAout_GPIO_PIN


希望不吝赐教,这个问题困扰我好几天了。谢谢
作者: prefect_long    时间: 2018-6-7 09:53
yinlianger 发表于 2018-4-1 23:40
你好,请教个问题。我准备用STM32F429 来控制sk6812,但尝试了很久都点不亮灯,看到你的程序给了我启发,有 ...

好久没看论坛 不好意思 可以加1098477243 一起探讨
作者: prefect_long    时间: 2018-6-7 09:54
yinlianger 发表于 2018-4-1 23:43
你好,请教个问题。我准备用STM32F429 来控制sk6812,但尝试了很久都点不亮灯,看到你的程序给了我启发,有 ...

当时我是用示波器测得时间
作者: JUCAT    时间: 2018-6-20 15:45
给力啊大佬,这网站往往能下载到有用的资料!
作者: zxgpy    时间: 2018-11-14 19:15
谢谢分享
作者: hilam    时间: 2018-12-28 08:52
谢谢分享!请问手机APP可以控制吗?用哪个APP合适
作者: prefect_long    时间: 2019-1-14 03:21
hilam 发表于 2018-12-28 08:52
谢谢分享!请问手机APP可以控制吗?用哪个APP合适

手机app蓝牙可以控制
作者: jxchen    时间: 2019-2-4 15:06
感謝分享 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
作者: PatrickStar    时间: 2019-6-16 21:08
感谢大佬
作者: PatrickStar    时间: 2019-6-16 21:23
这里的RGB值具体是如何计算的呢
作者: robe    时间: 2019-7-16 23:42
正在调试这个,感谢
作者: zhang1994    时间: 2019-9-24 07:51
感谢分享
作者: hei51ppp    时间: 2019-10-11 14:54
感谢分享学习下。。。
作者: zgf123456    时间: 2019-10-16 16:57
谢谢分享

作者: zgf123456    时间: 2019-10-16 17:38
谢谢分享





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1