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

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

QQ登錄

只需一步,快速開始

搜索
查看: 6702|回復(fù): 3
收起左側(cè)

ws2812b芯片驅(qū)動(dòng)程序

[復(fù)制鏈接]
ID:576951 發(fā)表于 2019-7-3 10:36 | 顯示全部樓層 |閱讀模式
ws2812b驅(qū)動(dòng)程序

單片機(jī)源程序如下:
  1. #include "bsp_ws2812b.h"
  2. #include "bsp.h"


  3. #define TIM4CCR1ADDR        0x40000834
  4. #define TIM4CCR2ADDR        0x40000838

  5. volatile  uint8_t LEDbuffer[LED_BUFFER_SIZE];



  6. static GPIO_InitTypeDef tim4ch1pwm =
  7. {
  8.     .GPIO_Pin = GPIO_Pin_6,
  9.     .GPIO_Speed = GPIO_Speed_50MHz,
  10.     .GPIO_Mode = GPIO_Mode_AF_PP
  11. };
  12. static GPIO_InitTypeDef tim4ch2pwm =
  13. {
  14.     .GPIO_Pin = GPIO_Pin_7,
  15.     .GPIO_Speed = GPIO_Speed_50MHz,
  16.     .GPIO_Mode = GPIO_Mode_AF_PP
  17. };


  18. static DMA_InitTypeDef dmachan1 =
  19. {
  20.     .DMA_PeripheralBaseAddr = ( uint32_t )&TIM4->CCR1,
  21.     .DMA_MemoryBaseAddr = ( uint32_t ) ( &LEDbuffer[0] ),
  22.     .DMA_DIR = DMA_DIR_PeripheralDST,
  23.     .DMA_BufferSize = LED_BUFFER_SIZE + 1,
  24.     .DMA_PeripheralInc = DMA_PeripheralInc_Disable,
  25.     .DMA_MemoryInc = DMA_MemoryInc_Enable,
  26.     .DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord,
  27.     .DMA_MemoryDataSize = DMA_MemoryDataSize_Byte,
  28.     .DMA_Mode = DMA_Mode_Circular,
  29.     .DMA_Priority = DMA_Priority_High,
  30.     .DMA_M2M = DMA_M2M_Disable
  31. };

  32. static DMA_InitTypeDef dmachan4 =
  33. {
  34.     .DMA_PeripheralBaseAddr = ( uint32_t )&TIM4->CCR2,
  35.     .DMA_MemoryBaseAddr = ( uint32_t ) ( &LEDbuffer[0] ),
  36.     .DMA_DIR = DMA_DIR_PeripheralDST,
  37.     .DMA_BufferSize = LED_BUFFER_SIZE + 1,
  38.     .DMA_PeripheralInc = DMA_PeripheralInc_Disable,
  39.     .DMA_MemoryInc = DMA_MemoryInc_Enable,
  40.     .DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord,
  41.     .DMA_MemoryDataSize = DMA_MemoryDataSize_Byte,
  42.     .DMA_Mode = DMA_Mode_Circular,
  43.     .DMA_Priority = DMA_Priority_High,
  44.     .DMA_M2M = DMA_M2M_Disable
  45. };

  46. static TIM_TimeBaseInitTypeDef tim4 =
  47. {
  48.     .TIM_Period = TIMER_PERIOD - 1,
  49.     .TIM_Prescaler = 0,
  50.     .TIM_ClockDivision = TIM_CKD_DIV1,
  51.     .TIM_CounterMode = TIM_CounterMode_Up
  52. };
  53. static TIM_OCInitTypeDef timingmode =
  54. {
  55.     .TIM_OCMode = TIM_OCMode_PWM1,
  56.     .TIM_OutputState = TIM_OutputState_Enable,
  57.     .TIM_Pulse = 0,
  58.     .TIM_OCPolarity = TIM_OCPolarity_High
  59. };



  60. /*************************************************************
  61. * 函 數(shù) 名 : WS2812_Init
  62. * 函數(shù)描述 : 初始化
  63. * 返 回 值 : none
  64. * 輸入?yún)?shù) : none
  65. * 輸出參數(shù) : none

  66. *************************************************************/

  67. void WS2812_Init ()
  68. {

  69.     RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE );
  70. //    RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOB, ENABLE );

  71.     RCC_APB1PeriphClockCmd ( RCC_APB1Periph_TIM4, ENABLE );
  72.     GPIO_Init ( GPIOB, &tim4ch1pwm );
  73.     GPIO_Init ( GPIOB, &tim4ch2pwm );

  74.     /* 初始化時(shí)基 */
  75.     TIM_TimeBaseInit ( TIM4, &tim4 );

  76.     /* 初始化channel1 */
  77.     TIM_OC1PreloadConfig ( TIM4, TIM_OCPreload_Enable );
  78.     TIM_OC1Init ( TIM4, &timingmode );

  79.     /* 初始化channel2 */
  80.     TIM_OC2PreloadConfig ( TIM4, TIM_OCPreload_Enable );
  81.     TIM_OC2Init ( TIM4, &timingmode );

  82. //    /* 初始化DMA1 */
  83.     RCC_AHBPeriphClockCmd ( RCC_AHBPeriph_DMA1, ENABLE );

  84.     /* 初始化DMA1通道 */
  85.     DMA_Init ( DMA1_Channel1, &dmachan1 );
  86.     DMA_Init ( DMA1_Channel4, &dmachan4 );

  87.     TIM_DMACmd ( TIM4, TIM_DMA_CC1, ENABLE );
  88.     TIM_DMACmd ( TIM4, TIM_DMA_CC2, ENABLE );

  89.     /* 使能DMA中斷 */
  90.     DMA_ITConfig ( DMA1_Channel1, DMA_IT_TC | DMA_IT_TE, ENABLE );
  91.     DMA_ITConfig ( DMA1_Channel4, DMA_IT_TC | DMA_IT_TE, ENABLE );


  92. //    TIM_Cmd ( TIM4, ENABLE );

  93. }

  94. /*************************************************************
  95. * 函 數(shù) 名 : WS2812_update
  96. * 函數(shù)描述 : DMA發(fā)送數(shù)據(jù)
  97. * 輸入?yún)?shù) : none
  98. * 輸出參數(shù) : none
  99. * 返 回 值 : none
  100. *************************************************************/

  101. void WS2812_update ( uint8_t group )
  102. {

  103.     TIM_Cmd ( TIM4, ENABLE );

  104.     if ( group == GROUP_A )                                             // GROUP_A只有1盞LED燈
  105.     {


  106.         DMA_SetCurrDataCounter ( DMA1_Channel1, LED_BUFFER_SIZE );      

  107.         DMA_Cmd ( DMA1_Channel1, ENABLE );                              

  108.         TIM_DMACmd ( TIM4, TIM_DMA_Update, ENABLE );                    // 使能TIM4 DMA請(qǐng)求
  109.     }
  110.     else
  111.     {


  112.         DMA_SetCurrDataCounter ( DMA1_Channel4, LED_BUFFER_SIZE );      

  113.         DMA_Cmd ( DMA1_Channel4, ENABLE );                              

  114.         TIM_DMACmd ( TIM4, TIM_DMA_Update, ENABLE );                    // 使能TIM4 DMA請(qǐng)求

  115.     }
  116. }

  117. /*************************************************************
  118. * 函 數(shù) 名 : SetLedColor
  119. * 函數(shù)描述 : 設(shè)置某一盞LED顏色
  120. * 輸入?yún)?shù) : index  需要點(diǎn)亮的LED序號(hào)(第一盞、第二盞.....)
  121. * 輸出參數(shù) : none
  122. * 返 回 值 : none
  123. *************************************************************/

  124. void SetLedColor ( uint8_t index, uint8_t RED, uint8_t GREEN, uint8_t BLUE )
  125. {
  126.     uint8_t tempBuffer[24] = {0};
  127.     uint8_t i;

  128.     for ( i = 0; i < 8; i++ ) // GREEN data
  129.         tempBuffer[i] = ( ( GREEN << i ) & 0x80 ) ? WS2812_1 : WS2812_0;

  130.     for ( i = 0; i < 8; i++ ) // RED
  131.         tempBuffer[8 + i] = ( ( RED << i ) & 0x80 ) ? WS2812_1 : WS2812_0;

  132.     for ( i = 0; i < 8; i++ ) // BLUE
  133.         tempBuffer[16 + i] = ( ( BLUE << i ) & 0x80 ) ? WS2812_1 : WS2812_0;

  134.     for ( i = 0; i < 24; i++ )
  135.         LEDbuffer[RESET_SLOTS_BEGIN + index * 24 + i] = tempBuffer[i];



  136. }

  137. void SetWholeColor ( uint8_t group, uint8_t red, uint8_t green, uint8_t blue )
  138. {
  139.     uint32_t index;

  140.     if ( group == GROUP_A ) // GROUP_A只有一盞LED燈
  141.     {
  142. //        SetLedColor ( 0, RED, GREEN, BLUE );

  143.         for ( index = 0; index < LED_NUMBER; index++ )
  144.             SetLedColor ( index, red, green, blue );

  145.     }
  146.     else
  147.     {
  148.         for ( index = 0; index < LED_NUMBER; index++ )
  149.             SetLedColor ( index, red, green, blue );

  150.     }
  151. }




  152. /****************************************************************
  153. * 函 數(shù) 名:DMA1_Channel1_IRQHandler
  154. * 函數(shù)描述:channel1中斷處理
  155. * 輸入?yún)?shù):none
  156. * 輸出參數(shù):none
  157. * 返回類型:void
  158. *****************************************************************/

  159. void DMA1_Channel1_IRQHandler()
  160. {
  161.     OSIntEnter();

  162.     TIM_Cmd ( TIM4, DISABLE );

  163.     TIM_DMACmd ( TIM4, TIM_DMA_Update, DISABLE );           // 禁止請(qǐng)求
  164.     DMA_Cmd ( DMA1_Channel1, DISABLE );                     
  165.     DMA_ClearFlag ( DMA1_FLAG_TC1 );
  166.     memset ( ( char * ) LEDbuffer, 0, LED_BUFFER_SIZE );
  167. ……………………

  168. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
ws2812b.rar (3.5 KB, 下載次數(shù): 99)


回復(fù)

使用道具 舉報(bào)

ID:59830 發(fā)表于 2020-5-6 17:22 | 顯示全部樓層
手上一塊 8個(gè)WS2812彩燈,沒有資料不知道怎么驅(qū)動(dòng),想找一下資料。參考一下.謝謝你的分享
回復(fù)

使用道具 舉報(bào)

ID:877820 發(fā)表于 2021-1-15 14:55 | 顯示全部樓層
參考一下
回復(fù)

使用道具 舉報(bào)

ID:861657 發(fā)表于 2021-1-27 10:03 | 顯示全部樓層
16個(gè)WS2812也可以驅(qū)動(dòng)嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲免费小视频 | 欧美一级在线观看 | 欧美性色网 | 免费看黄色网址 | 黄色一级视频在线观看 | 欧美在线亚洲 | 久久国产精 | 99久热| 99久久婷婷国产综合精品草原 | 亚洲免费小视频 | 男男巨肉啪啪动漫3d | 免费视频a| 五月婷婷 | 在线观看网址你懂的 | 成人综合网站 | 日韩免费网站 | 在线观看av的网站 | 99热播 | 欧美激情视频一区二区 | 91色国产 | 久久av资源| 国产福利一区二区 | 在线观看av的网站 | 日本天堂在线观看 | 99久久精品国产一区二区三区 | 日本伊人久久 | 蜜桃成人av | av大片在线观看 | 天天看天天爽 | 波多野结衣乳巨码无在线观看 | 欧美在线观看一区 | 国产一级视频在线观看 | 欧美黄色一级大片 | 成人在线视频观看 | 国产精品久久一区 | 日韩a在线 | 少妇一级片 | 风间由美一区二区三区 | 日韩在线观看中文字幕 | 精品日韩一区二区三区 | 成人三级晚上看 |