久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1520|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

stm32單片機(jī)控制ws2812b燈帶的燈數(shù) 程序問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1016455 發(fā)表于 2023-3-13 20:29 來(lái)自觸屏版 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
從嗶哩嗶哩上找了一個(gè)代碼,修改了代碼燈的數(shù)量以及其它的變量,但還是出錯(cuò)了,請(qǐng)教一下這該怎么改

原作者代碼
  1. #include "stm32f10x.h"
  2. #include "timer.h"
  3. #include "DMA1.h"
  4. #include "time.h"
  5. #include "WS2812B.h"
  6. #define WS2812B_LED_QUANTITY        60

  7. uint32_t WS2812B_Buf[WS2812B_LED_QUANTITY];        //0xGGRRBB ws2812b每個(gè)燈顏色共60個(gè)元素?cái)?shù)組、、定義一個(gè)以燈珠數(shù)的大數(shù)組用于存放每個(gè)燈的grb值
  8. uint16_t WS2812B_Bit[24*WS2812B_LED_QUANTITY+1];/62812b每一位比較值數(shù)組共24*60個(gè)元 素、、定義一個(gè)數(shù)組用于存放每個(gè)燈的每個(gè)位的值
  9. uint8_t WS2812B_Flag;

  10. void WS2812B_IRQHandler(void);

  11. void WS2812B_Init(void)
  12. {
  13.         DMA1_SetIRQHandler(WS2812B_IRQHandler);
  14.         DMA1_Init((uint32_t)(&WS2812B_Bit));
  15. //        TIM2_Init();
  16.         TIM2_Int_Init(90-1,0);
  17.         
  18. }

  19. void WS2812B_ClearBuf(void)
  20. {
  21.         uint8_t i;
  22.         for(i=0;i<WS2812B_LED_QUANTITY;i++)
  23.         {
  24.                 WS2812B_Buf[i]=0x000000;
  25.         }
  26. }

  27. void WS2812B_SetBuf(uint32_t Color)
  28. {
  29.         uint8_t i;
  30.         for(i=0;i<WS2812B_LED_QUANTITY;i++)
  31.         {
  32.                 WS2812B_Buf[i]=Color;
  33.         }
  34. }

  35. void WS2812B_UpdateBuf(void)
  36. {
  37.         uint8_t i,j;
  38.         for(j=0;j<WS2812B_LED_QUANTITY;j++)
  39.         {
  40.                 for(i=0;i<24;i++)
  41.                 {
  42.                         if(WS2812B_Buf[j]&(0x800000>>i)){WS2812B_Bit[j*24+i+1]=60;}
  43.                         else{WS2812B_Bit[j*24+i+1]=30;}
  44.                 }
  45.         }
  46.         DMA1_Init((uint32_t)(&WS2812B_Bit));//new
  47.         DMA1_Start(24*WS2812B_LED_QUANTITY+1);
  48.         TIM2_Cmd(ENABLE);
  49.         while(WS2812B_Flag==0);
  50.         WS2812B_Flag=0;
  51. }
  52. void WS2812B_IRQHandler(void)
  53. {
  54.         TIM2_SetCompare1(0);//設(shè)置tim2 ccr寄存器為0
  55.         TIM2_Cmd(DISABLE);//關(guān)閉tim2
  56.         WS2812B_Flag=1;
  57. }

  58. 修改后的代碼
  59. #include "stm32f10x.h"
  60. #include "timer.h"
  61. #include "DMA1.h"
  62. #include "time.h"
  63. #include "WS2812B.h"
  64. #define WS2812B_LED_QUANTITY        300

  65. uint32_t WS2812B_Buf[WS2812B_LED_QUANTITY];        //0xGGRRBB ws2812b每個(gè)燈顏色共300個(gè)元素?cái)?shù)組、、定義一個(gè)以燈珠數(shù)的大數(shù)組用于存放每個(gè)燈的grb值
  66. uint16_t WS2812B_Bit[24*WS2812B_LED_QUANTITY+1];/62812b每一位比較值數(shù)組共24*300個(gè)元 素、、定義一個(gè)數(shù)組用于存放每個(gè)燈的每個(gè)位的值
  67. uint8_t WS2812B_Flag;

  68. void WS2812B_IRQHandler(void);

  69. void WS2812B_Init(void)
  70. {
  71.         DMA1_SetIRQHandler(WS2812B_IRQHandler);
  72.         DMA1_Init((uint32_t)(&WS2812B_Bit));
  73. //        TIM2_Init();
  74.         TIM2_Int_Init(90-1,0);
  75.         
  76. }

  77. void WS2812B_ClearBuf(void)
  78. {
  79.         uint16_t i;
  80.         for(i=0;i<WS2812B_LED_QUANTITY;i++)
  81.         {
  82.                 WS2812B_Buf[i]=0x000000;
  83.         }
  84. }

  85. void WS2812B_SetBuf(uint32_t Color)
  86. {
  87.         uint16_t i;
  88.         for(i=0;i<WS2812B_LED_QUANTITY;i++)
  89.         {
  90.                 WS2812B_Buf[i]=Color;
  91.         }
  92. }

  93. void WS2812B_UpdateBuf(void)
  94. {
  95.         uint16_t i,j;
  96.         for(j=0;j<WS2812B_LED_QUANTITY;j++)
  97.         {
  98.                 for(i=0;i<24;i++)
  99.                 {
  100.                         if(WS2812B_Buf[j]&(0x800000>>i)){WS2812B_Bit[j*24+i+1]=60;}
  101.                         else{WS2812B_Bit[j*24+i+1]=30;}
  102.                 }
  103.         }
  104.         DMA1_Init((uint32_t)(&WS2812B_Bit));//new
  105.         DMA1_Start(24*WS2812B_LED_QUANTITY+1);
  106.         TIM2_Cmd(ENABLE);
  107.         while(WS2812B_Flag==0);
  108.         WS2812B_Flag=0;
  109. }
  110. void WS2812B_IRQHandler(void)
  111. {
  112.         TIM2_SetCompare1(0);//設(shè)置tim2 ccr寄存器為0
  113.         TIM2_Cmd(DISABLE);//關(guān)閉tim2
  114.         WS2812B_Flag=1;
  115. }
復(fù)制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1096989 發(fā)表于 2023-10-23 14:54 | 只看該作者
可能是超出內(nèi)存了
回復(fù)

使用道具 舉報(bào)

板凳
ID:108361 發(fā)表于 2023-10-26 18:09 | 只看該作者
DMA的buffer長(zhǎng)度跟要發(fā)數(shù)據(jù)的長(zhǎng)度匹配上了嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩精品一区二区 | 最新中文字幕在线 | 欧美精品日韩精品 | 天堂久久一区 | 免费黄色a视频 | 欧美日韩网站 | 美国a级毛片免费视频 | 色就是色欧美 | 国产午夜在线 | 亚洲精品色| 99九九久久 | 欧美日韩手机在线观看 | 欧美日韩国产中文 | av国产精品 | 国产精品久久久久久久久久免费看 | 国产毛片久久久久久久久春天 | 亚洲a视频 | 亚洲国产精品一区二区久久 | 欧美一区二区三区在线观看视频 | 亚洲人在线 | 精品久久久久一区二区国产 | julia中文字幕久久一区二区 | 亚洲永久 | 韩三级在线观看 | 亚洲精品国产第一综合99久久 | 99久久婷婷国产亚洲终合精品 | 日韩av成人在线 | 久久最新| 免费激情 | 日韩欧美亚洲 | 亚洲aⅴ| 久久久.com| 久久人操 | 国产激情视频在线免费观看 | 亚洲美女在线一区 | 亚洲视频在线一区 | 午夜影院免费体验区 | 成av人电影在线 | 久久国产精品偷 | 91亚洲欧美| 欧美一级黄 |