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

Revision:
0:a27bf0451169
Child:
2:0d3906d69a41
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sat Dec 10 08:26:36 2016 +0000
@@ -0,0 +1,253 @@
+#include "mbed.h"
+#include "USBSerial.h"
+#include "WS2812.h"
+
+#define LED_RGB     PA_1
+
+WS2812 RGB(LED_RGB, 1);
+DigitalOut test(PB_7);
+
+USBSerial serial;
+unsigned int timerValue;
+static TIM_HandleTypeDef s_TimerInstance = { 
+    .Instance = TIM2
+};
+void InitializeTimer()
+{
+    __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.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+    s_TimerInstance.Init.RepetitionCounter = 0;
+    HAL_TIM_Base_Init(&s_TimerInstance);
+    HAL_TIM_Base_Start(&s_TimerInstance);
+}
+int main(void)
+{
+       wait(3);
+       InitializeTimer();
+       serial.printf("Welcome to STM32FC RGB LED Tester\r\n");
+       while(1)
+       {
+           /*
+           timerValue = __HAL_TIM_GET_COUNTER(&s_TimerInstance);
+           test = 1;
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+           timerValue = __HAL_TIM_GET_COUNTER(&s_TimerInstance) - timerValue;
+           
+           unsigned int timerValue2 = __HAL_TIM_GET_COUNTER(&s_TimerInstance);
+           test = 0;
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            
+            asm("nop");
+            asm("nop");
+            asm("nop");
+           timerValue2 = __HAL_TIM_GET_COUNTER(&s_TimerInstance) - timerValue2;
+           
+           serial.printf("Send 0 val %u, val2 = %u \r\n",  timerValue, timerValue2);
+           ////////////////////////////////////////////////////////////////////////// 
+           timerValue = __HAL_TIM_GET_COUNTER(&s_TimerInstance);
+           test = 1;
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+           timerValue = __HAL_TIM_GET_COUNTER(&s_TimerInstance) - timerValue;
+           
+           timerValue2 = __HAL_TIM_GET_COUNTER(&s_TimerInstance);
+           test = 0;
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+            asm("nop");
+           timerValue2 = __HAL_TIM_GET_COUNTER(&s_TimerInstance) - timerValue2;
+           
+           serial.printf("Send 1 val %u, val2 = %u \r\n",  timerValue, timerValue2);
+           */
+           /*
+            RGB.writeColor(0xffffff);
+            RGB.sendReset();
+            serial.printf("R = 0x%X, G = 0x%X ,B = 0x%X\r\n", RGB.Red, RGB.Green, RGB.Blue);
+            wait(2);
+            RGB.writeColor(0xff00ff);
+            RGB.sendReset();
+            serial.printf("R = 0x%X, G = 0x%X ,B = 0x%X\r\n", RGB.Red, RGB.Green, RGB.Blue);
+            wait(2);
+            RGB.writeColor(0xffff00);
+            RGB.sendReset();
+            serial.printf("R = 0x%X, G = 0x%X ,B = 0x%X\r\n", RGB.Red, RGB.Green, RGB.Blue);
+            wait(2);
+            */
+            
+            RGB.send1Color(0xFF0000);
+            Thread::wait(1000);
+            RGB.send1Color(0xFF00);
+            Thread::wait(1000);
+            RGB.send1Color(0xFF);
+            Thread::wait(1000);
+            RGB.send1Color(0xFFFF00);
+            Thread::wait(1000);
+            RGB.send1Color(0xFFFF);
+            Thread::wait(1000);
+            RGB.send1Color(0xFF00FF);
+            Thread::wait(1000);
+            
+            RGB.send1Color(0xff8000);
+            Thread::wait(1000);
+            RGB.send1Color(0x9933ff);
+            Thread::wait(1000);
+            RGB.send1Color(0xff3300);
+            Thread::wait(1000);
+            RGB.send1Color(0x99cc00);
+            Thread::wait(1000);
+            RGB.send1Color(0xff99ff);
+            Thread::wait(1000);
+            RGB.send1Color(0x009999);
+            Thread::wait(1000);
+            
+       }
+}
\ No newline at end of file