@@ -38,7 +38,7 @@ use crate::pac::SPI5;
38
38
#[ cfg( feature = "spi6" ) ]
39
39
use crate :: pac:: SPI6 ;
40
40
41
- use crate :: gpio:: Alternate ;
41
+ use crate :: gpio:: { Alternate , NoPin } ;
42
42
43
43
use crate :: rcc:: Clocks ;
44
44
use crate :: time:: Hertz ;
@@ -69,11 +69,15 @@ where
69
69
}
70
70
71
71
/// A filler type for when the SCK pin is unnecessary
72
- pub struct NoSck ;
72
+ pub type NoSck = NoPin ;
73
73
/// A filler type for when the Miso pin is unnecessary
74
- pub struct NoMiso ;
74
+ pub type NoMiso = NoPin ;
75
75
/// A filler type for when the Mosi pin is unnecessary
76
- pub struct NoMosi ;
76
+ pub type NoMosi = NoPin ;
77
+
78
+ impl < SPI > PinSck < SPI > for NoPin where SPI : Instance { }
79
+ impl < SPI > PinMiso < SPI > for NoPin where SPI : Instance { }
80
+ impl < SPI > PinMosi < SPI > for NoPin where SPI : Instance { }
77
81
78
82
macro_rules! pins {
79
83
( $( $SPIX: ty: SCK : [ $( $SCK: ty) ,* ] MISO : [ $( $MISO: ty) ,* ] MOSI : [ $( $MOSI: ty) ,* ] ) +) => {
@@ -94,34 +98,28 @@ macro_rules! pins {
94
98
pins ! {
95
99
SPI1 :
96
100
SCK : [
97
- NoSck ,
98
101
gpioa:: PA5 <Alternate <5 >>,
99
102
gpiob:: PB3 <Alternate <5 >>
100
103
]
101
104
MISO : [
102
- NoMiso ,
103
105
gpioa:: PA6 <Alternate <5 >>,
104
106
gpiob:: PB4 <Alternate <5 >>
105
107
]
106
108
MOSI : [
107
- NoMosi ,
108
109
gpioa:: PA7 <Alternate <5 >>,
109
110
gpiob:: PB5 <Alternate <5 >>
110
111
]
111
112
112
113
SPI2 :
113
114
SCK : [
114
- NoSck ,
115
115
gpiob:: PB10 <Alternate <5 >>,
116
116
gpiob:: PB13 <Alternate <5 >>
117
117
]
118
118
MISO : [
119
- NoMiso ,
120
119
gpiob:: PB14 <Alternate <5 >>,
121
120
gpioc:: PC2 <Alternate <5 >>
122
121
]
123
122
MOSI : [
124
- NoMosi ,
125
123
gpiob:: PB15 <Alternate <5 >>,
126
124
gpioc:: PC3 <Alternate <5 >>
127
125
]
@@ -131,17 +129,14 @@ pins! {
131
129
pins ! {
132
130
SPI3 :
133
131
SCK : [
134
- NoSck ,
135
132
gpiob:: PB3 <Alternate <6 >>,
136
133
gpioc:: PC10 <Alternate <6 >>
137
134
]
138
135
MISO : [
139
- NoMiso ,
140
136
gpiob:: PB4 <Alternate <6 >>,
141
137
gpioc:: PC11 <Alternate <6 >>
142
138
]
143
139
MOSI : [
144
- NoMosi ,
145
140
gpiob:: PB5 <Alternate <6 >>,
146
141
gpioc:: PC12 <Alternate <6 >>
147
142
]
@@ -172,17 +167,14 @@ pins! {
172
167
MOSI : [ gpiod:: PD6 <Alternate <5 >>]
173
168
SPI4 :
174
169
SCK : [
175
- NoSck ,
176
170
gpioe:: PE2 <Alternate <5 >>,
177
171
gpioe:: PE12 <Alternate <5 >>
178
172
]
179
173
MISO : [
180
- NoMiso ,
181
174
gpioe:: PE5 <Alternate <5 >>,
182
175
gpioe:: PE13 <Alternate <5 >>
183
176
]
184
177
MOSI : [
185
- NoMosi ,
186
178
gpioe:: PE6 <Alternate <5 >>,
187
179
gpioe:: PE14 <Alternate <5 >>
188
180
]
@@ -232,15 +224,12 @@ pins! {
232
224
pins ! {
233
225
SPI5 :
234
226
SCK : [
235
- NoSck ,
236
227
gpiob:: PB0 <Alternate <6 >>
237
228
]
238
229
MISO : [
239
- NoMiso ,
240
230
gpioa:: PA12 <Alternate <6 >>
241
231
]
242
232
MOSI : [
243
- NoMosi ,
244
233
gpioa:: PA10 <Alternate <6 >>,
245
234
gpiob:: PB8 <Alternate <6 >>
246
235
]
@@ -295,32 +284,26 @@ pins! {
295
284
pins ! {
296
285
SPI5 :
297
286
SCK : [
298
- NoSck ,
299
287
gpiof:: PF7 <Alternate <5 >>,
300
288
gpioh:: PH6 <Alternate <5 >>
301
289
]
302
290
MISO : [
303
- NoMiso ,
304
291
gpiof:: PF8 <Alternate <5 >>,
305
292
gpioh:: PH7 <Alternate <5 >>
306
293
]
307
294
MOSI : [
308
- NoMosi ,
309
295
gpiof:: PF9 <Alternate <5 >>,
310
296
gpiof:: PF11 <Alternate <5 >>
311
297
]
312
298
313
299
SPI6 :
314
300
SCK : [
315
- NoSck ,
316
301
gpiog:: PG13 <Alternate <5 >>
317
302
]
318
303
MISO : [
319
- NoMiso ,
320
304
gpiog:: PG12 <Alternate <5 >>
321
305
]
322
306
MOSI : [
323
- NoMosi ,
324
307
gpiog:: PG14 <Alternate <5 >>
325
308
]
326
309
}
@@ -396,12 +379,20 @@ macro_rules! spi {
396
379
}
397
380
}
398
381
399
- impl <PINS > Spi <$SPI, PINS >
382
+ impl <SCK , MISO , MOSI > Spi <$SPI, ( SCK , MISO , MOSI ) >
400
383
where
401
- PINS : Pins <$SPI>,
384
+ SCK : PinSck <$SPI>,
385
+ MISO : PinMiso <$SPI>,
386
+ MOSI : PinMosi <$SPI>,
402
387
{
403
388
#[ deprecated( since = "0.10.0" , note = "Please use new instead" ) ]
404
- pub fn $spi( spi: $SPI, pins: PINS , mode: Mode , freq: Hertz , clocks: Clocks ) -> Self {
389
+ pub fn $spi(
390
+ spi: $SPI,
391
+ pins: ( SCK , MISO , MOSI ) ,
392
+ mode: Mode ,
393
+ freq: Hertz ,
394
+ clocks: Clocks ,
395
+ ) -> Self {
405
396
Self :: new( spi, pins, mode, freq, clocks)
406
397
}
407
398
}
@@ -423,12 +414,14 @@ spi! { SPI5: (spi5, pclk2) }
423
414
#[ cfg( feature = "spi6" ) ]
424
415
spi ! { SPI6 : ( spi6, pclk2) }
425
416
426
- impl < SPI , PINS > Spi < SPI , PINS >
417
+ impl < SPI , SCK , MISO , MOSI > Spi < SPI , ( SCK , MISO , MOSI ) >
427
418
where
428
419
SPI : Instance ,
429
- PINS : Pins < SPI > ,
420
+ SCK : PinSck < SPI > ,
421
+ MISO : PinMiso < SPI > ,
422
+ MOSI : PinMosi < SPI > ,
430
423
{
431
- pub fn new ( spi : SPI , pins : PINS , mode : Mode , freq : Hertz , clocks : Clocks ) -> Self {
424
+ pub fn new ( spi : SPI , pins : ( SCK , MISO , MOSI ) , mode : Mode , freq : Hertz , clocks : Clocks ) -> Self {
432
425
unsafe {
433
426
// NOTE(unsafe) this reference will only be used for atomic writes with no side effects.
434
427
let rcc = & ( * RCC :: ptr ( ) ) ;
0 commit comments