@@ -33,12 +33,12 @@ TIM_HandleTypeDef htim3;
33
33
DMA_HandleTypeDef hdma_tim3_ch2 ;
34
34
35
35
ALIGN (4 )
36
- uint8_t led_buffer [( LED_NUM + 1 ) * 24 * 2 ];
36
+ uint8_t led_buffer [LED_NUM * 24 * 2 ];
37
37
38
38
extern void HAL_TIM_MspPostInit (TIM_HandleTypeDef * htim );
39
39
40
- // 模拟bit码: 3为逻辑0 , 7为逻辑1
41
- const uint8_t tile [] = {3 , 7 };
40
+ // 模拟bit码: 2为逻辑0 , 7为逻辑1
41
+ const uint8_t tile [] = {2 , 7 };
42
42
43
43
44
44
// 常见颜色定义
@@ -48,10 +48,15 @@ const RGBColor_TypeDef GREEN = {255, 0, 0};
48
48
const RGBColor_TypeDef RED = {0 , 255 , 0 };
49
49
const RGBColor_TypeDef BLUE = {0 , 0 , 255 };
50
50
const RGBColor_TypeDef WHITE = {255 , 255 , 255 };
51
+ const RGBColor_TypeDef LT_RED = {0 , 32 , 0 };
52
+ const RGBColor_TypeDef LT_GREEN = {32 , 0 , 0 };
53
+ const RGBColor_TypeDef LT_BLUE = {0 , 0 , 32 };
54
+ const RGBColor_TypeDef LT_WHITE = {16 , 16 , 16 };
51
55
52
56
// 灯颜色缓存
53
57
RGBColor_TypeDef RGB_Data [LED_NUM ] = {0 };
54
58
59
+ void led_matrix_rst ();
55
60
/**
56
61
* @brief This function handles DMA2 stream3 global interrupt.
57
62
*/
@@ -64,7 +69,7 @@ void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
64
69
{
65
70
if (htim -> Channel == HAL_TIM_ACTIVE_CHANNEL_2 )
66
71
{
67
- rt_kprintf ( "pulse finished\n" );
72
+ __HAL_TIM_SetCompare ( htim , TIM_CHANNEL_2 , 0 ); //占空比清0
68
73
}
69
74
}
70
75
/**
@@ -81,9 +86,9 @@ static int matrix_init(void)
81
86
__HAL_RCC_TIM3_CLK_ENABLE ();
82
87
83
88
htim3 .Instance = TIM3 ;
84
- htim3 .Init .Prescaler = 11 - 1 ;
89
+ htim3 .Init .Prescaler = 10 - 1 ;
85
90
htim3 .Init .CounterMode = TIM_COUNTERMODE_UP ;
86
- htim3 .Init .Period = 10 - 1 ; // 760kHz
91
+ htim3 .Init .Period = 10 - 1 ; // 840kHz
87
92
htim3 .Init .ClockDivision = TIM_CLOCKDIVISION_DIV1 ;
88
93
htim3 .Init .RepetitionCounter = 0 ;
89
94
htim3 .Init .AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE ;
@@ -134,7 +139,7 @@ static int matrix_init(void)
134
139
135
140
rt_pin_mode (LED_MATRIX_EN_PIN , PIN_MODE_OUTPUT );
136
141
rt_pin_write (LED_MATRIX_EN_PIN , PIN_LOW );
137
-
142
+ led_matrix_rst ();
138
143
return RT_EOK ;
139
144
140
145
}
@@ -191,9 +196,6 @@ void RGB_Reflash(void)
191
196
dat_b >>=1 ;
192
197
}
193
198
}
194
- led_buffer [sizeof (led_buffer )- 2 ] = 0 ;
195
- led_buffer [sizeof (led_buffer )- 1 ] = 0 ;
196
- rt_memset (led_buffer + (LED_NUM * 24 * 2 ), 0x00 , 48 );
197
199
TIM_Send_WS2812 (led_buffer , sizeof (led_buffer ) / 2 );
198
200
199
201
}
@@ -204,12 +206,41 @@ void led_matrix_rst()
204
206
led_buffer [ (i <<1 ) ] = 3 ;
205
207
led_buffer [ (i <<1 ) + 1 ] = 0 ;
206
208
}
207
- rt_memset (led_buffer + (LED_NUM * 24 * 2 ), 0x00 , 48 );
208
209
TIM_Send_WS2812 (led_buffer , sizeof (led_buffer ) / 2 );
209
210
}
210
211
211
212
MSH_CMD_EXPORT (led_matrix_rst , Test led matrix on board )
212
213
214
+ void led_matrix_fill (RGBColor_TypeDef Color )
215
+ {
216
+ rt_memset (RGB_Data , 0x00 , sizeof (RGB_Data ));
217
+ for (uint8_t i = 0 ; i < LED_NUM ; i ++ )
218
+ {
219
+ Set_LEDColor (i , Color );
220
+ }
221
+ RGB_Reflash ();
222
+ }
223
+
224
+ void led_matrix_fill_test (uint8_t index )
225
+ {
226
+ switch (index )
227
+ {
228
+ case 0 :
229
+ led_matrix_fill (LT_RED );
230
+ break ;
231
+ case 1 :
232
+ led_matrix_fill (LT_GREEN );
233
+ break ;
234
+ case 2 :
235
+ led_matrix_fill (LT_BLUE );
236
+ break ;
237
+ case 3 :
238
+ led_matrix_fill (LT_WHITE );
239
+ break ;
240
+ default :
241
+ break ;
242
+ }
243
+ }
213
244
214
245
void led_matrix_test1 ()
215
246
{
@@ -255,15 +286,18 @@ MSH_CMD_EXPORT(led_matrix_test2, Test led matrix on board)
255
286
256
287
void led_matrix_test3 ()
257
288
{
258
- rt_memset (RGB_Data , 0x00 , sizeof (RGB_Data ));
259
- for (uint8_t i = 0 ; i < 20 ; i ++ )
289
+ for (uint8_t i = 0 ; i < 4 ; i ++ )
260
290
{
261
- Set_LEDColor (i * 3 , RED );
262
- Set_LEDColor (i * 3 + 1 , GREEN );
263
- Set_LEDColor (i * 3 + 2 , BLUE );
291
+ led_matrix_fill_test (i );
292
+ rt_thread_mdelay (1000 );
264
293
}
265
-
266
- RGB_Reflash ();
294
+ led_matrix_rst ();
267
295
}
268
296
269
297
MSH_CMD_EXPORT (led_matrix_test3 , Test led matrix on board )
298
+
299
+ void led_matrix_show_color (uint8_t r , uint8_t g , uint8_t b )
300
+ {
301
+ RGBColor_TypeDef color = {g ,r ,b };
302
+ led_matrix_fill (color );
303
+ }
0 commit comments