Skip to content

Commit fb0e559

Browse files
committed
Introduce new Cargo features generated with cube-parse
This PR introduces four new `io-*` features that can be used to differentiate between different GPIO peripheral versions. This is required to properly implement pin mappings for I/O pins (including Serial, I²C, SPI, etc). Additionally, because the GPIO peripheral version don't map cleanly to the previously used families (stm32l0x1, stm32l0x2, stm32l0x3), I added aliases for every MCU in the STM32L0 family where the marketing status is marked as active. Those `mcu-*` features are purely used as aliases and thus do not need to be included in the testing matrix. The features are provided as a shortcut to the user, so that the different HAL parameters (like GPIO peripheral version, MCU subfamily, chip package, etc) do not need to be determined manually. Since the HAL already uses chip packages as features (in the ADC module), I also added a dependency from the MCU feature to the corresponding chip package feature. All features are generated using https://github.com/dbrgn/cube-parse: cargo run -- features STM32L0 -d /path/to/stm32cubemx/db/mcu/defines
1 parent 2999dcc commit fb0e559

File tree

2 files changed

+189
-19
lines changed

2 files changed

+189
-19
lines changed

Cargo.toml

Lines changed: 186 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -51,28 +51,198 @@ usbd-serial = "0.1.0"
5151
# Miscellaneaous features
5252
rt = ["stm32l0/rt"]
5353
disable-linker-script = []
54-
# MCUs
54+
55+
# PAC families
56+
# (Warning: Some peripherals, e.g. GPIO, don't follow this family grouping.)
5557
stm32l0x1 = ["stm32l0/stm32l0x1"]
5658
stm32l0x2 = ["stm32l0/stm32l0x2"]
5759
stm32l0x3 = ["stm32l0/stm32l0x3"]
58-
stm32l052 = ["stm32l0x2"]
59-
stm32l053 = ["stm32l0x3"]
60-
stm32l062 = ["stm32l0x2"]
61-
stm32l072 = ["stm32l0x2"]
62-
stm32l082 = ["stm32l0x2"]
63-
# Chip packages
64-
lqfp32 = []
65-
lqfp48 = []
66-
lqfp64 = []
67-
lqfp100 = []
68-
tfbga64 = []
69-
ufbga64 = []
70-
ufbg100 = []
60+
61+
# Features based on the GPIO peripheral version.
62+
# This determines the pin function mapping of the MCU.
63+
io-STM32L021 = []
64+
io-STM32L031 = []
65+
io-STM32L051 = []
66+
io-STM32L071 = []
67+
68+
# Physical packages
69+
ewlcsp49 = []
70+
lqfp32 = []
71+
lqfp48 = []
72+
lqfp64 = []
73+
lqfp100 = []
74+
tfbga64 = []
75+
tssop14 = []
76+
tssop20 = []
77+
ufbga64 = []
78+
ufbga100 = []
79+
ufqfpn20 = []
80+
ufqfpn28 = []
7181
ufqfpn32 = []
7282
ufqfpn48 = []
73-
wlcsp36 = []
74-
wlcsp49 = []
83+
wlcsp25 = []
84+
wlcsp36 = []
85+
wlcsp49 = []
7586

87+
# MCUs
88+
mcu-STM32L010C6Tx = ["io-STM32L031", "lqfp48"]
89+
mcu-STM32L010F4Px = ["io-STM32L021", "tssop20"]
90+
mcu-STM32L010K4Tx = ["io-STM32L021", "lqfp32"]
91+
mcu-STM32L010K8Tx = ["io-STM32L051", "lqfp32"]
92+
mcu-STM32L010R8Tx = ["io-STM32L051", "lqfp64"]
93+
mcu-STM32L010RBTx = ["io-STM32L071", "lqfp64"]
94+
mcu-STM32L011D3Px = ["io-STM32L021", "stm32l0x1", "tssop14"]
95+
mcu-STM32L011D4Px = ["io-STM32L021", "stm32l0x1", "tssop14"]
96+
mcu-STM32L011E3Yx = ["io-STM32L021", "stm32l0x1", "wlcsp25"]
97+
mcu-STM32L011E4Yx = ["io-STM32L021", "stm32l0x1", "wlcsp25"]
98+
mcu-STM32L011F3Px = ["io-STM32L021", "stm32l0x1", "tssop20"]
99+
mcu-STM32L011F3Ux = ["io-STM32L021", "stm32l0x1", "ufqfpn20"]
100+
mcu-STM32L011F4Px = ["io-STM32L021", "stm32l0x1", "tssop20"]
101+
mcu-STM32L011F4Ux = ["io-STM32L021", "stm32l0x1", "ufqfpn20"]
102+
mcu-STM32L011G3Ux = ["io-STM32L021", "stm32l0x1", "ufqfpn28"]
103+
mcu-STM32L011G4Ux = ["io-STM32L021", "stm32l0x1", "ufqfpn28"]
104+
mcu-STM32L011K3Tx = ["io-STM32L021", "stm32l0x1", "lqfp32"]
105+
mcu-STM32L011K3Ux = ["io-STM32L021", "stm32l0x1", "ufqfpn32"]
106+
mcu-STM32L011K4Tx = ["io-STM32L021", "stm32l0x1", "lqfp32"]
107+
mcu-STM32L011K4Ux = ["io-STM32L021", "stm32l0x1", "ufqfpn32"]
108+
mcu-STM32L021D4Px = ["io-STM32L021", "stm32l0x1", "tssop14"]
109+
mcu-STM32L021F4Px = ["io-STM32L021", "stm32l0x1", "tssop20"]
110+
mcu-STM32L021F4Ux = ["io-STM32L021", "stm32l0x1", "ufqfpn20"]
111+
mcu-STM32L021G4Ux = ["io-STM32L021", "stm32l0x1", "ufqfpn28"]
112+
mcu-STM32L021K4Tx = ["io-STM32L021", "stm32l0x1", "lqfp32"]
113+
mcu-STM32L021K4Ux = ["io-STM32L021", "stm32l0x1", "ufqfpn32"]
114+
mcu-STM32L031C4Tx = ["io-STM32L031", "stm32l0x1", "lqfp48"]
115+
mcu-STM32L031C6Tx = ["io-STM32L031", "stm32l0x1", "lqfp48"]
116+
mcu-STM32L031C6Ux = ["io-STM32L031", "stm32l0x1", "ufqfpn48"]
117+
mcu-STM32L031E4Yx = ["io-STM32L031", "stm32l0x1", "wlcsp25"]
118+
mcu-STM32L031E6Yx = ["io-STM32L031", "stm32l0x1", "wlcsp25"]
119+
mcu-STM32L031F4Px = ["io-STM32L031", "stm32l0x1", "tssop20"]
120+
mcu-STM32L031F6Px = ["io-STM32L031", "stm32l0x1", "tssop20"]
121+
mcu-STM32L031G4Ux = ["io-STM32L031", "stm32l0x1", "ufqfpn28"]
122+
mcu-STM32L031G6Ux = ["io-STM32L031", "stm32l0x1", "ufqfpn28"]
123+
mcu-STM32L031G6UxS = ["io-STM32L031", "stm32l0x1", "ufqfpn28"]
124+
mcu-STM32L031K4Tx = ["io-STM32L031", "stm32l0x1", "lqfp32"]
125+
mcu-STM32L031K4Ux = ["io-STM32L031", "stm32l0x1", "ufqfpn32"]
126+
mcu-STM32L031K6Tx = ["io-STM32L031", "stm32l0x1", "lqfp32"]
127+
mcu-STM32L031K6Ux = ["io-STM32L031", "stm32l0x1", "ufqfpn32"]
128+
mcu-STM32L041C4Tx = ["io-STM32L031", "stm32l0x1", "lqfp48"]
129+
mcu-STM32L041C6Tx = ["io-STM32L031", "stm32l0x1", "lqfp48"]
130+
mcu-STM32L041E6Yx = ["io-STM32L031", "stm32l0x1", "wlcsp25"]
131+
mcu-STM32L041F6Px = ["io-STM32L031", "stm32l0x1", "tssop20"]
132+
mcu-STM32L041G6Ux = ["io-STM32L031", "stm32l0x1", "ufqfpn28"]
133+
mcu-STM32L041G6UxS = ["io-STM32L031", "stm32l0x1", "ufqfpn28"]
134+
mcu-STM32L041K6Tx = ["io-STM32L031", "stm32l0x1", "lqfp32"]
135+
mcu-STM32L041K6Ux = ["io-STM32L031", "stm32l0x1", "ufqfpn32"]
136+
mcu-STM32L051C6Tx = ["io-STM32L051", "stm32l0x1", "lqfp48"]
137+
mcu-STM32L051C8Tx = ["io-STM32L051", "stm32l0x1", "lqfp48"]
138+
mcu-STM32L051K6Tx = ["io-STM32L051", "stm32l0x1", "lqfp32"]
139+
mcu-STM32L051K6Ux = ["io-STM32L051", "stm32l0x1", "ufqfpn32"]
140+
mcu-STM32L051K8Tx = ["io-STM32L051", "stm32l0x1", "lqfp32"]
141+
mcu-STM32L051K8Ux = ["io-STM32L051", "stm32l0x1", "ufqfpn32"]
142+
mcu-STM32L051R6Hx = ["io-STM32L051", "stm32l0x1", "tfbga64"]
143+
mcu-STM32L051R6Tx = ["io-STM32L051", "stm32l0x1", "lqfp64"]
144+
mcu-STM32L051R8Hx = ["io-STM32L051", "stm32l0x1", "tfbga64"]
145+
mcu-STM32L051R8Tx = ["io-STM32L051", "stm32l0x1", "lqfp64"]
146+
mcu-STM32L051T6Yx = ["io-STM32L051", "stm32l0x1", "wlcsp36"]
147+
mcu-STM32L051T8Yx = ["io-STM32L051", "stm32l0x1", "wlcsp36"]
148+
mcu-STM32L052C6Tx = ["io-STM32L051", "stm32l0x2", "lqfp48"]
149+
mcu-STM32L052C8Tx = ["io-STM32L051", "stm32l0x2", "lqfp48"]
150+
mcu-STM32L052K6Tx = ["io-STM32L051", "stm32l0x2", "lqfp32"]
151+
mcu-STM32L052K6Ux = ["io-STM32L051", "stm32l0x2", "ufqfpn32"]
152+
mcu-STM32L052K8Tx = ["io-STM32L051", "stm32l0x2", "lqfp32"]
153+
mcu-STM32L052K8Ux = ["io-STM32L051", "stm32l0x2", "ufqfpn32"]
154+
mcu-STM32L052R6Hx = ["io-STM32L051", "stm32l0x2", "tfbga64"]
155+
mcu-STM32L052R6Tx = ["io-STM32L051", "stm32l0x2", "lqfp64"]
156+
mcu-STM32L052R8Hx = ["io-STM32L051", "stm32l0x2", "tfbga64"]
157+
mcu-STM32L052R8Tx = ["io-STM32L051", "stm32l0x2", "lqfp64"]
158+
mcu-STM32L052T6Yx = ["io-STM32L051", "stm32l0x2", "wlcsp36"]
159+
mcu-STM32L052T8Fx = ["io-STM32L051", "stm32l0x2", "wlcsp36"]
160+
mcu-STM32L052T8Yx = ["io-STM32L051", "stm32l0x2", "wlcsp36"]
161+
mcu-STM32L053C6Tx = ["io-STM32L051", "stm32l0x3", "lqfp48"]
162+
mcu-STM32L053C8Tx = ["io-STM32L051", "stm32l0x3", "lqfp48"]
163+
mcu-STM32L053R6Hx = ["io-STM32L051", "stm32l0x3", "tfbga64"]
164+
mcu-STM32L053R6Tx = ["io-STM32L051", "stm32l0x3", "lqfp64"]
165+
mcu-STM32L053R8Hx = ["io-STM32L051", "stm32l0x3", "tfbga64"]
166+
mcu-STM32L053R8Tx = ["io-STM32L051", "stm32l0x3", "lqfp64"]
167+
mcu-STM32L062K8Tx = ["io-STM32L051", "stm32l0x2", "lqfp32"]
168+
mcu-STM32L062K8Ux = ["io-STM32L051", "stm32l0x2", "ufqfpn32"]
169+
mcu-STM32L063C8Tx = ["io-STM32L051", "stm32l0x3", "lqfp48"]
170+
mcu-STM32L063R8Tx = ["io-STM32L051", "stm32l0x3", "lqfp64"]
171+
mcu-STM32L071C8Tx = ["io-STM32L071", "stm32l0x1", "lqfp48"]
172+
mcu-STM32L071CBTx = ["io-STM32L071", "stm32l0x1", "lqfp48"]
173+
mcu-STM32L071CBYx = ["io-STM32L071", "stm32l0x1", "wlcsp49"]
174+
mcu-STM32L071CZTx = ["io-STM32L071", "stm32l0x1", "lqfp48"]
175+
mcu-STM32L071CZYx = ["io-STM32L071", "stm32l0x1", "wlcsp49"]
176+
mcu-STM32L071K8Ux = ["io-STM32L071", "stm32l0x1", "ufqfpn32"]
177+
mcu-STM32L071KBTx = ["io-STM32L071", "stm32l0x1", "lqfp32"]
178+
mcu-STM32L071KBUx = ["io-STM32L071", "stm32l0x1", "ufqfpn32"]
179+
mcu-STM32L071KZTx = ["io-STM32L071", "stm32l0x1", "lqfp32"]
180+
mcu-STM32L071KZUx = ["io-STM32L071", "stm32l0x1", "ufqfpn32"]
181+
mcu-STM32L071RBHx = ["io-STM32L071", "stm32l0x1", "tfbga64"]
182+
mcu-STM32L071RBTx = ["io-STM32L071", "stm32l0x1", "lqfp64"]
183+
mcu-STM32L071RZHx = ["io-STM32L071", "stm32l0x1", "tfbga64"]
184+
mcu-STM32L071RZTx = ["io-STM32L071", "stm32l0x1", "lqfp64"]
185+
mcu-STM32L071V8Ix = ["io-STM32L071", "stm32l0x1", "ufbga100"]
186+
mcu-STM32L071V8Tx = ["io-STM32L071", "stm32l0x1", "lqfp100"]
187+
mcu-STM32L071VBIx = ["io-STM32L071", "stm32l0x1", "ufbga100"]
188+
mcu-STM32L071VBTx = ["io-STM32L071", "stm32l0x1", "lqfp100"]
189+
mcu-STM32L071VZIx = ["io-STM32L071", "stm32l0x1", "ufbga100"]
190+
mcu-STM32L071VZTx = ["io-STM32L071", "stm32l0x1", "lqfp100"]
191+
mcu-STM32L072CBTx = ["io-STM32L071", "stm32l0x2", "lqfp48"]
192+
mcu-STM32L072CBYx = ["io-STM32L071", "stm32l0x2", "wlcsp49"]
193+
mcu-STM32L072CZEx = ["io-STM32L071", "stm32l0x2", "ewlcsp49"]
194+
mcu-STM32L072CZTx = ["io-STM32L071", "stm32l0x2", "lqfp48"]
195+
mcu-STM32L072CZYx = ["io-STM32L071", "stm32l0x2", "wlcsp49"]
196+
mcu-STM32L072KBTx = ["io-STM32L071", "stm32l0x2", "lqfp32"]
197+
mcu-STM32L072KBUx = ["io-STM32L071", "stm32l0x2", "ufqfpn32"]
198+
mcu-STM32L072KZTx = ["io-STM32L071", "stm32l0x2", "lqfp32"]
199+
mcu-STM32L072KZUx = ["io-STM32L071", "stm32l0x2", "ufqfpn32"]
200+
mcu-STM32L072RBHx = ["io-STM32L071", "stm32l0x2", "tfbga64"]
201+
mcu-STM32L072RBIx = ["io-STM32L071", "stm32l0x2", "ufbga64"]
202+
mcu-STM32L072RBTx = ["io-STM32L071", "stm32l0x2", "lqfp64"]
203+
mcu-STM32L072RZHx = ["io-STM32L071", "stm32l0x2", "tfbga64"]
204+
mcu-STM32L072RZIx = ["io-STM32L071", "stm32l0x2", "ufbga64"]
205+
mcu-STM32L072RZTx = ["io-STM32L071", "stm32l0x2", "lqfp64"]
206+
mcu-STM32L072V8Ix = ["io-STM32L071", "stm32l0x2", "ufbga100"]
207+
mcu-STM32L072V8Tx = ["io-STM32L071", "stm32l0x2", "lqfp100"]
208+
mcu-STM32L072VBIx = ["io-STM32L071", "stm32l0x2", "ufbga100"]
209+
mcu-STM32L072VBTx = ["io-STM32L071", "stm32l0x2", "lqfp100"]
210+
mcu-STM32L072VZIx = ["io-STM32L071", "stm32l0x2", "ufbga100"]
211+
mcu-STM32L072VZTx = ["io-STM32L071", "stm32l0x2", "lqfp100"]
212+
mcu-STM32L073CBTx = ["io-STM32L071", "stm32l0x3", "lqfp48"]
213+
mcu-STM32L073CZTx = ["io-STM32L071", "stm32l0x3", "lqfp48"]
214+
mcu-STM32L073RBHx = ["io-STM32L071", "stm32l0x3", "tfbga64"]
215+
mcu-STM32L073RBTx = ["io-STM32L071", "stm32l0x3", "lqfp64"]
216+
mcu-STM32L073RZHx = ["io-STM32L071", "stm32l0x3", "tfbga64"]
217+
mcu-STM32L073RZIx = ["io-STM32L071", "stm32l0x3", "ufbga64"]
218+
mcu-STM32L073RZTx = ["io-STM32L071", "stm32l0x3", "lqfp64"]
219+
mcu-STM32L073V8Ix = ["io-STM32L071", "stm32l0x3", "ufbga100"]
220+
mcu-STM32L073V8Tx = ["io-STM32L071", "stm32l0x3", "lqfp100"]
221+
mcu-STM32L073VBIx = ["io-STM32L071", "stm32l0x3", "ufbga100"]
222+
mcu-STM32L073VBTx = ["io-STM32L071", "stm32l0x3", "lqfp100"]
223+
mcu-STM32L073VZIx = ["io-STM32L071", "stm32l0x3", "ufbga100"]
224+
mcu-STM32L073VZTx = ["io-STM32L071", "stm32l0x3", "lqfp100"]
225+
mcu-STM32L081CBTx = ["io-STM32L071", "stm32l0x1", "lqfp48"]
226+
mcu-STM32L081CZTx = ["io-STM32L071", "stm32l0x1", "lqfp48"]
227+
mcu-STM32L081KZTx = ["io-STM32L071", "stm32l0x1", "lqfp32"]
228+
mcu-STM32L081KZUx = ["io-STM32L071", "stm32l0x1", "ufqfpn32"]
229+
mcu-STM32L082CZYx = ["io-STM32L071", "stm32l0x2", "wlcsp49"]
230+
mcu-STM32L082KBTx = ["io-STM32L071", "stm32l0x2", "lqfp32"]
231+
mcu-STM32L082KBUx = ["io-STM32L071", "stm32l0x2", "ufqfpn32"]
232+
mcu-STM32L082KZTx = ["io-STM32L071", "stm32l0x2", "lqfp32"]
233+
mcu-STM32L082KZUx = ["io-STM32L071", "stm32l0x2", "ufqfpn32"]
234+
mcu-STM32L083CBTx = ["io-STM32L071", "stm32l0x3", "lqfp48"]
235+
mcu-STM32L083CZTx = ["io-STM32L071", "stm32l0x3", "lqfp48"]
236+
mcu-STM32L083RBHx = ["io-STM32L071", "stm32l0x3", "tfbga64"]
237+
mcu-STM32L083RBTx = ["io-STM32L071", "stm32l0x3", "lqfp64"]
238+
mcu-STM32L083RZHx = ["io-STM32L071", "stm32l0x3", "tfbga64"]
239+
mcu-STM32L083RZTx = ["io-STM32L071", "stm32l0x3", "lqfp64"]
240+
mcu-STM32L083V8Ix = ["io-STM32L071", "stm32l0x3", "ufbga100"]
241+
mcu-STM32L083V8Tx = ["io-STM32L071", "stm32l0x3", "lqfp100"]
242+
mcu-STM32L083VBIx = ["io-STM32L071", "stm32l0x3", "ufbga100"]
243+
mcu-STM32L083VBTx = ["io-STM32L071", "stm32l0x3", "lqfp100"]
244+
mcu-STM32L083VZIx = ["io-STM32L071", "stm32l0x3", "ufbga100"]
245+
mcu-STM32L083VZTx = ["io-STM32L071", "stm32l0x3", "lqfp100"]
76246

77247
[profile.dev]
78248
codegen-units = 1

src/adc.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ adc_pins! {
247247
feature = "lqfp100",
248248
feature = "tfbga64",
249249
feature = "ufbga64",
250-
feature = "ufbg100",
250+
feature = "ufbga100",
251251
feature = "wlcsp49",
252252
),
253253
))]
@@ -271,7 +271,7 @@ adc_pins! {
271271

272272
#[cfg(all(
273273
feature = "stm32l072",
274-
any(feature = "lqfp64", feature = "lqfp100", feature = "ufbg100",),
274+
any(feature = "lqfp64", feature = "lqfp100", feature = "ufbga100",),
275275
))]
276276
adc_pins! {
277277
Channel13: (gpioc::PC3<Analog>, 13u8),
@@ -290,7 +290,7 @@ adc_pins! {
290290
feature = "lqfp100",
291291
feature = "tfbga64",
292292
feature = "ufbga64",
293-
feature = "ufbg100",
293+
feature = "ufbga100",
294294
),
295295
))]
296296
adc_pins! {

0 commit comments

Comments
 (0)