@@ -13,8 +13,8 @@ Please send pull requests.
13
13
14
14
Add to the ` [dependencies] ` section in your ` Cargo.toml ` :
15
15
``` rust
16
- stm32f4xx - hal = { version = " * " , features = [" stm32f429" ] }
17
- stm32 - eth = { version = " 0.1.1 " , features = [" nucleo-f429zi " ] }
16
+ stm32f4xx - hal = { version = " 0.8.3 " , features = [" stm32f429" ] }
17
+ stm32 - eth = { version = " 0.2.0 " , features = [" stm32f429 " ] }
18
18
```
19
19
20
20
In ` src/main.rs ` add:
@@ -28,33 +28,45 @@ use stm32_eth::{Eth, RingEntry};
28
28
fn main () {
29
29
let p = Peripherals :: take (). unwrap ();
30
30
31
- // Setup pins and initialize clocks.
32
- stm32_eth :: setup (& p . RCC , & p . SYSCFG );
31
+ let rcc = p . RCC . constrain ();
32
+ // HCLK must be between 25MHz and 168MHz to use the ethernet peripheral
33
+ let clocks = rcc . cfgr. sysclk (32. mhz ()). hclk (32. mhz ()). freeze ();
34
+
33
35
let gpioa = p . GPIOA . split ();
34
36
let gpiob = p . GPIOB . split ();
35
37
let gpioc = p . GPIOC . split ();
36
38
let gpiog = p . GPIOG . split ();
37
- stm32_eth :: setup_pins (
38
- gpioa . pa1, gpioa . pa2, gpioa . pa7, gpiob . pb13, gpioc . pc1,
39
- gpioc . pc4, gpioc . pc5, gpiog . pg11, gpiog . pg13
40
- );
41
- // Allocate the ring buffers
42
- let mut rx_ring : [RingEntry <_ >; 8 ] = Default :: default ();
43
- let mut tx_ring : [RingEntry <_ >; 2 ] = Default :: default ();
44
- // Instantiate driver
45
- let mut eth = Eth :: new (
46
- p . ETHERNET_MAC , p . ETHERNET_DMA ,
47
- & mut rx_ring [.. ], & mut tx_ring [.. ]
48
- );
49
- // If you have a handler, enable interrupts
50
- eth . enable_interrupt (& mut cp . NVIC );
51
39
40
+ let eth_pins = EthPins {
41
+ ref_clk : gpioa . pa1,
42
+ md_io : gpioa . pa2,
43
+ md_clk : gpioc . pc1,
44
+ crs : gpioa . pa7,
45
+ tx_en : gpiog . pg11,
46
+ tx_d0 : gpiog . pg13,
47
+ tx_d1 : gpiob . pb13,
48
+ rx_d0 : gpioc . pc4,
49
+ rx_d1 : gpioc . pc5,
50
+ };
51
+
52
+ let mut rx_ring : [RingEntry <_ >; 16 ] = Default :: default ();
53
+ let mut tx_ring : [RingEntry <_ >; 8 ] = Default :: default ();
54
+ let mut eth = Eth :: new (
55
+ p . ETHERNET_MAC ,
56
+ p . ETHERNET_DMA ,
57
+ & mut rx_ring [.. ],
58
+ & mut tx_ring [.. ],
59
+ PhyAddress :: _0 ,
60
+ clocks ,
61
+ eth_pins ,
62
+ )
63
+ . unwrap ();
64
+ eth . enable_interrupt ();
52
65
53
66
if let Ok (pkt ) = eth . recv_next () {
54
67
// handle received pkt
55
68
}
56
69
57
-
58
70
eth . send (size , | buf | {
59
71
// write up to `size` bytes into buf before it is being sent
60
72
}). expect (" send" );
0 commit comments