2
2
//!
3
3
//! For more docs, see https://docs.rs/stm32h7xx-hal/latest/stm32h5xx_hal/spi/index.html
4
4
//!
5
- #![ deny( warnings) ]
5
+ // #![deny(warnings)]
6
6
#![ no_main]
7
7
#![ no_std]
8
8
@@ -12,10 +12,13 @@ use core::mem::MaybeUninit;
12
12
13
13
use cortex_m_rt:: entry;
14
14
use cortex_m_semihosting:: debug;
15
+ use embedded_hal:: delay:: DelayNs ;
15
16
use stm32h5xx_hal:: {
17
+ delay:: Delay ,
16
18
pac,
17
19
prelude:: * ,
18
20
spi:: { self , Config as SpiConfig } ,
21
+ time:: MilliSeconds ,
19
22
} ;
20
23
21
24
static mut SOURCE_BYTES : MaybeUninit < [ u8 ; 40 ] > = MaybeUninit :: uninit ( ) ;
@@ -47,6 +50,7 @@ fn u8_buf_pair() -> (&'static [u8; 40], &'static mut [u8; 40]) {
47
50
fn main ( ) -> ! {
48
51
utilities:: logger:: init ( ) ;
49
52
53
+ let cp = cortex_m:: Peripherals :: take ( ) . unwrap ( ) ;
50
54
let dp = pac:: Peripherals :: take ( ) . unwrap ( ) ;
51
55
52
56
// Select highest power mode for max possible clock frequency
@@ -90,14 +94,20 @@ fn main() -> ! {
90
94
91
95
let mut spi = spi. use_dma_duplex ( tx_ch, rx_ch) ;
92
96
93
- let ( tx, rx) = spi. start_dma_duplex_transfer ( dest_buf, source_buf) . unwrap ( ) ;
94
- tx. wait_for_transfer_complete ( ) . unwrap ( ) ;
95
- rx. wait_for_transfer_complete ( ) . unwrap ( ) ;
97
+ let mut delay = Delay :: new ( cp. SYST , & ccdr. clocks ) ;
98
+ let duration = MilliSeconds :: secs ( 1 ) . to_millis ( ) ;
96
99
97
- assert_eq ! ( source_buf, dest_buf) ;
98
-
99
- log:: info!( "Success!" ) ;
100
100
loop {
101
- debug:: exit ( debug:: EXIT_SUCCESS )
101
+ let ( tx, rx) =
102
+ spi. start_dma_duplex_transfer ( dest_buf, source_buf) . unwrap ( ) ;
103
+
104
+ tx. wait_for_transfer_complete ( ) . unwrap ( ) ;
105
+ rx. wait_for_transfer_complete ( ) . unwrap ( ) ;
106
+
107
+ spi. finish_transfer ( Ok ( ( ) ) ) . unwrap ( ) ;
108
+ assert_eq ! ( source_buf, dest_buf) ;
109
+
110
+ log:: info!( "Success!" ) ;
111
+ delay. delay_ms ( duration) ;
102
112
}
103
113
}
0 commit comments