Skip to content

Commit 91770b3

Browse files
committed
【LED阵列】调整LED驱动参数,增强稳定性。
1 parent 1e9b2e1 commit 91770b3

File tree

1 file changed

+52
-18
lines changed

1 file changed

+52
-18
lines changed

libraries/Board_Drivers/led_matrix/drv_matrix_led.c

+52-18
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ TIM_HandleTypeDef htim3;
3333
DMA_HandleTypeDef hdma_tim3_ch2;
3434

3535
ALIGN(4)
36-
uint8_t led_buffer[(LED_NUM + 1) * 24 * 2];
36+
uint8_t led_buffer[LED_NUM * 24 * 2];
3737

3838
extern void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
3939

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};
4242

4343

4444
// 常见颜色定义
@@ -48,10 +48,15 @@ const RGBColor_TypeDef GREEN = {255, 0, 0};
4848
const RGBColor_TypeDef RED = {0, 255, 0};
4949
const RGBColor_TypeDef BLUE = {0, 0, 255};
5050
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};
5155

5256
// 灯颜色缓存
5357
RGBColor_TypeDef RGB_Data[LED_NUM] = {0};
5458

59+
void led_matrix_rst();
5560
/**
5661
* @brief This function handles DMA2 stream3 global interrupt.
5762
*/
@@ -64,7 +69,7 @@ void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
6469
{
6570
if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2)
6671
{
67-
rt_kprintf("pulse finished\n");
72+
__HAL_TIM_SetCompare(htim, TIM_CHANNEL_2,0); //占空比清0
6873
}
6974
}
7075
/**
@@ -81,9 +86,9 @@ static int matrix_init(void)
8186
__HAL_RCC_TIM3_CLK_ENABLE();
8287

8388
htim3.Instance = TIM3;
84-
htim3.Init.Prescaler = 11-1;
89+
htim3.Init.Prescaler = 10-1;
8590
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
86-
htim3.Init.Period = 10-1; // 760kHz
91+
htim3.Init.Period = 10-1; // 840kHz
8792
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
8893
htim3.Init.RepetitionCounter = 0;
8994
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
@@ -134,7 +139,7 @@ static int matrix_init(void)
134139

135140
rt_pin_mode(LED_MATRIX_EN_PIN, PIN_MODE_OUTPUT);
136141
rt_pin_write(LED_MATRIX_EN_PIN, PIN_LOW);
137-
142+
led_matrix_rst();
138143
return RT_EOK;
139144

140145
}
@@ -191,9 +196,6 @@ void RGB_Reflash(void)
191196
dat_b >>=1;
192197
}
193198
}
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);
197199
TIM_Send_WS2812(led_buffer, sizeof(led_buffer) / 2);
198200

199201
}
@@ -204,12 +206,41 @@ void led_matrix_rst()
204206
led_buffer[ (i<<1) ] = 3;
205207
led_buffer[ (i<<1) + 1] = 0;
206208
}
207-
rt_memset(led_buffer + (LED_NUM * 24 *2), 0x00, 48);
208209
TIM_Send_WS2812(led_buffer, sizeof(led_buffer) / 2 );
209210
}
210211

211212
MSH_CMD_EXPORT(led_matrix_rst, Test led matrix on board)
212213

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+
}
213244

214245
void led_matrix_test1()
215246
{
@@ -255,15 +286,18 @@ MSH_CMD_EXPORT(led_matrix_test2, Test led matrix on board)
255286

256287
void led_matrix_test3()
257288
{
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++)
260290
{
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);
264293
}
265-
266-
RGB_Reflash();
294+
led_matrix_rst();
267295
}
268296

269297
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

Comments
 (0)