This is an example program of WS2812 library https://developer.mbed.org/users/devararendy/code/WS2812/ in main program, i also put some line to measure how many asm NOP do we need. I have test it on STM32F411RE (Nucleo 411RE). if you would like to use another microcontroller, you need to adjust the asm("nop") in the library.

Dependencies:   USBDevice WS2812 mbed-os

Files at this revision

API Documentation at this revision

Comitter:
devararendy
Date:
Sat Dec 10 09:21:00 2016 +0000
Parent:
1:c18078160be3
Commit message:
added some explanation of using TIM to measure asm("NOP") execution time and an example of using sendColors for sending all colors in buffer to all LEDs

Changed in this revision

WS2812.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r c18078160be3 -r 0d3906d69a41 WS2812.lib
--- a/WS2812.lib	Sat Dec 10 08:38:13 2016 +0000
+++ b/WS2812.lib	Sat Dec 10 09:21:00 2016 +0000
@@ -1,1 +1,1 @@
-https://developer.mbed.org/users/devararendy/code/WS2812/#f080cb888db6
+https://developer.mbed.org/users/devararendy/code/WS2812/#8910a1fcbdb0
diff -r c18078160be3 -r 0d3906d69a41 main.cpp
--- a/main.cpp	Sat Dec 10 08:38:13 2016 +0000
+++ b/main.cpp	Sat Dec 10 09:21:00 2016 +0000
@@ -4,11 +4,12 @@
 
 #define LED_RGB     PA_1
 
-WS2812 RGB(LED_RGB, 1);
-DigitalOut test(PB_7);
+WS2812 RGB(LED_RGB, 3);
+uint32_t colors[3]={0xFF0000,0xFFfe00,0xFF00FF};
+//DigitalOut test(PB_7);
 
-USBSerial serial;
-unsigned int timerValue;
+USBSerial serial; //Im using STM32F411RE. USB Serial USB Full Speed D+ = PA12, D- PA11. D+ Pulled Up w/ 1k5 resistor (1K ohm is working too)
+
 static TIM_HandleTypeDef s_TimerInstance = { 
     .Instance = TIM2
 };
@@ -17,7 +18,7 @@
     __TIM2_CLK_ENABLE();
     s_TimerInstance.Init.Prescaler = 1;
     s_TimerInstance.Init.CounterMode = TIM_COUNTERMODE_UP;
-    s_TimerInstance.Init.Period = 45000000; //tim clock = 45MHz, 1Sec = 1 Period
+    s_TimerInstance.Init.Period = 45000000; //Timer clock = 45MHz
     s_TimerInstance.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
     s_TimerInstance.Init.RepetitionCounter = 0;
     HAL_TIM_Base_Init(&s_TimerInstance);
@@ -31,7 +32,9 @@
        while(1)
        {
            /*
-           timerValue = __HAL_TIM_GET_COUNTER(&s_TimerInstance);
+           //to convert timer val to nanoSecond = val/45*1000
+           //example timer val for one asm("nop") is 3. convert to nanoSecond: 3/45*1000 = 66.666nS
+           unsigned int timerValue = __HAL_TIM_GET_COUNTER(&s_TimerInstance);
            test = 1;
             asm("nop");
             asm("nop");
@@ -223,6 +226,7 @@
             wait(2);
             */
             
+            /*
             RGB.send1Color(0xFF0000);
             Thread::wait(1000);
             RGB.send1Color(0xFF00);
@@ -248,6 +252,9 @@
             Thread::wait(1000);
             RGB.send1Color(0x009999);
             Thread::wait(1000);
+            */
             
+            RGB.sendColors(colors);
+            wait(1);
        }
 }
\ No newline at end of file