2
2
#![ no_std]
3
3
4
4
use crate :: hal:: {
5
- fdcan:: {
6
- config:: NominalBitTiming ,
7
- filter:: { StandardFilter , StandardFilterSlot } ,
8
- frame:: { FrameFormat , TxFrameHeader } ,
9
- id:: StandardId ,
10
- FdCan ,
11
- } ,
5
+ can:: CanExt ,
12
6
gpio:: { GpioExt as _, Speed } ,
13
7
nb:: block,
14
8
rcc:: { Config , RccExt , SysClockSrc } ,
15
9
stm32:: Peripherals ,
16
10
time:: U32Ext ,
17
11
} ;
12
+ use fdcan:: {
13
+ config:: NominalBitTiming ,
14
+ filter:: { StandardFilter , StandardFilterSlot } ,
15
+ frame:: { FrameFormat , TxFrameHeader } ,
16
+ id:: StandardId ,
17
+ } ;
18
18
use stm32g4xx_hal as hal;
19
19
20
20
use core:: num:: { NonZeroU16 , NonZeroU8 } ;
@@ -59,10 +59,7 @@ fn main() -> ! {
59
59
let tx = gpiob. pb9 . into_alternate ( ) . set_speed ( Speed :: VeryHigh ) ;
60
60
61
61
info ! ( "-- Create CAN 1 instance" ) ;
62
- let can = FdCan :: new ( dp. FDCAN1 , tx, rx, & rcc) ;
63
-
64
- info ! ( "-- Set CAN 1 in Config Mode" ) ;
65
- let mut can = can. into_config_mode ( ) ;
62
+ let mut can = dp. FDCAN1 . fdcan ( tx, rx, & rcc) ;
66
63
can. set_protocol_exception_handling ( false ) ;
67
64
68
65
info ! ( "-- Configure nominal timing" ) ;
@@ -87,10 +84,8 @@ fn main() -> ! {
87
84
// let tx = gpiob.pb13.into_alternate().set_speed(Speed::VeryHigh);
88
85
89
86
// info!("-- Create CAN 2 instance");
90
- // let can = FdCan::new(dp.FDCAN2, tx, rx, &rcc);
91
-
92
- // info!("-- Set CAN in Config Mode");
93
- // let mut can = can.into_config_mode();
87
+ // let mut can = dp.FDCAN2.fdcan(tx, rx, &rcc);
88
+ // can.set_protocol_exception_handling(false);
94
89
95
90
// info!("-- Configure nominal timing");
96
91
// can.set_nominal_bit_timing(btr);
@@ -109,7 +104,7 @@ fn main() -> ! {
109
104
let mut can = can1;
110
105
111
106
info ! ( "Create Message Data" ) ;
112
- let mut buffer = [ 0xAAAAAAAA , 0xFFFFFFFF , 0x0 , 0x0 , 0x0 , 0x0 ] ;
107
+ let mut buffer: [ u8 ; 8 ] = [ 0xAA , 0xAA , 0xAA , 0xAA , 0xFF , 0xFF , 0xFF , 0xFF ] ;
113
108
info ! ( "Create Message Header" ) ;
114
109
let header = TxFrameHeader {
115
110
len : 2 * 4 ,
@@ -121,30 +116,11 @@ fn main() -> ! {
121
116
info ! ( "Initial Header: {:#X?}" , & header) ;
122
117
123
118
info ! ( "Transmit initial message" ) ;
124
- block ! ( can. transmit( header, & mut |b| {
125
- let len = b. len( ) ;
126
- b[ ..len] . clone_from_slice( & buffer[ ..len] ) ;
127
- } , ) )
128
- . unwrap ( ) ;
119
+ block ! ( can. transmit( header, & buffer) ) . unwrap ( ) ;
129
120
130
121
loop {
131
- if let Ok ( rxheader) = block ! ( can. receive0( & mut |h, b| {
132
- info!( "Received Header: {:#X?}" , & h) ;
133
- info!( "received data: {:X?}" , & b) ;
134
-
135
- for ( i, d) in b. iter( ) . enumerate( ) {
136
- buffer[ i] = * d;
137
- }
138
- h
139
- } ) ) {
140
- block ! (
141
- can. transmit( rxheader. unwrap( ) . to_tx_header( None ) , & mut |b| {
142
- let len = b. len( ) ;
143
- b[ ..len] . clone_from_slice( & buffer[ ..len] ) ;
144
- info!( "Transmit: {:X?}" , b) ;
145
- } )
146
- )
147
- . unwrap ( ) ;
122
+ if let Ok ( rxheader) = block ! ( can. receive0( & mut buffer) ) {
123
+ block ! ( can. transmit( rxheader. unwrap( ) . to_tx_header( None ) , & mut buffer) ) . unwrap ( ) ;
148
124
}
149
125
}
150
126
}
0 commit comments