@@ -6,42 +6,40 @@ use panic_halt as _;
6
6
use stm32f4xx_hal as hal;
7
7
8
8
use cortex_m_rt:: entry;
9
- use hal:: { gpio:: NoPin , pac, prelude:: * } ;
9
+ use hal:: { gpio:: NoPin , pac, prelude:: * , spi :: Error } ;
10
10
use smart_leds:: { brightness, hsv:: RGB8 , SmartLedsWrite } ;
11
11
use ws2812_spi as ws2812;
12
12
13
13
#[ entry]
14
14
fn main ( ) -> ! {
15
15
let dp = pac:: Peripherals :: take ( ) . expect ( "cannot take peripherals" ) ;
16
16
17
- // Configure APB bus clock to 56MHz , cause ws2812b requires 3.5Mbps SPI
17
+ // Configure APB bus clock to 48 MHz , cause ws2812b requires 3 Mbps SPI
18
18
let rcc = dp. RCC . constrain ( ) ;
19
- let clocks = rcc. cfgr . use_hse ( 25 . MHz ( ) ) . sysclk ( 56 . MHz ( ) ) . freeze ( ) ;
19
+ let clocks = rcc. cfgr . use_hse ( 25 . MHz ( ) ) . sysclk ( 48 . MHz ( ) ) . freeze ( ) ;
20
20
21
21
let mut delay = dp. TIM1 . delay_us ( & clocks) ;
22
22
let gpioa = dp. GPIOA . split ( ) ;
23
23
24
24
let spi = dp. SPI1 . spi (
25
25
( gpioa. pa5 , NoPin , gpioa. pa7 ) ,
26
26
ws2812:: MODE ,
27
- 3500 . kHz ( ) ,
27
+ 3000 . kHz ( ) ,
28
28
& clocks,
29
29
) ;
30
30
31
- let mut ws = ws2812:: Ws2812 :: new ( spi) ;
32
-
33
- const NUM_LEDS : usize = 8 ;
34
- let mut data = [ RGB8 :: default ( ) ; NUM_LEDS ] ;
31
+ const NUM_LEDS : usize = 20 ;
32
+ let mut buffer = [ 0 ; NUM_LEDS * 12 + 20 ] ;
33
+ let mut ws = ws2812:: prerendered:: Ws2812 :: new ( spi, buffer. as_mut_slice ( ) ) ;
35
34
36
35
// Wait before start write for syncronization
37
36
delay. delay ( 200 . micros ( ) ) ;
38
37
39
38
loop {
40
39
for j in 0 ..( 256 * 5 ) {
41
- for ( i, b) in data. iter_mut ( ) . enumerate ( ) {
42
- * b = wheel ( ( ( ( i * 256 ) as u16 / NUM_LEDS as u16 + j as u16 ) & 255 ) as u8 ) ;
43
- }
44
- ws. write ( brightness ( data. iter ( ) . cloned ( ) , 32 ) ) . unwrap ( ) ;
40
+ let data = ( 0 ..NUM_LEDS )
41
+ . map ( |i| wheel ( ( ( ( i * 256 ) as u16 / NUM_LEDS as u16 + j as u16 ) & 255 ) as u8 ) ) ;
42
+ ws. write ( brightness ( data, 32 ) ) . unwrap ( ) ;
45
43
delay. delay ( 10 . millis ( ) ) ;
46
44
}
47
45
}
0 commit comments