From fb0e559a04c1155141bc7d1658cff14da08e123d Mon Sep 17 00:00:00 2001 From: Danilo Bargen Date: Sun, 23 Feb 2020 18:30:46 +0100 Subject: [PATCH 1/3] Introduce new Cargo features generated with cube-parse MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- Cargo.toml | 202 ++++++++++++++++++++++++++++++++++++++++++++++++----- src/adc.rs | 6 +- 2 files changed, 189 insertions(+), 19 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index bd54e4d3..999526c4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -51,28 +51,198 @@ usbd-serial = "0.1.0" # Miscellaneaous features rt = ["stm32l0/rt"] disable-linker-script = [] -# MCUs + +# PAC families +# (Warning: Some peripherals, e.g. GPIO, don't follow this family grouping.) stm32l0x1 = ["stm32l0/stm32l0x1"] stm32l0x2 = ["stm32l0/stm32l0x2"] stm32l0x3 = ["stm32l0/stm32l0x3"] -stm32l052 = ["stm32l0x2"] -stm32l053 = ["stm32l0x3"] -stm32l062 = ["stm32l0x2"] -stm32l072 = ["stm32l0x2"] -stm32l082 = ["stm32l0x2"] -# Chip packages -lqfp32 = [] -lqfp48 = [] -lqfp64 = [] -lqfp100 = [] -tfbga64 = [] -ufbga64 = [] -ufbg100 = [] + +# Features based on the GPIO peripheral version. +# This determines the pin function mapping of the MCU. +io-STM32L021 = [] +io-STM32L031 = [] +io-STM32L051 = [] +io-STM32L071 = [] + +# Physical packages +ewlcsp49 = [] +lqfp32 = [] +lqfp48 = [] +lqfp64 = [] +lqfp100 = [] +tfbga64 = [] +tssop14 = [] +tssop20 = [] +ufbga64 = [] +ufbga100 = [] +ufqfpn20 = [] +ufqfpn28 = [] ufqfpn32 = [] ufqfpn48 = [] -wlcsp36 = [] -wlcsp49 = [] +wlcsp25 = [] +wlcsp36 = [] +wlcsp49 = [] +# MCUs +mcu-STM32L010C6Tx = ["io-STM32L031", "lqfp48"] +mcu-STM32L010F4Px = ["io-STM32L021", "tssop20"] +mcu-STM32L010K4Tx = ["io-STM32L021", "lqfp32"] +mcu-STM32L010K8Tx = ["io-STM32L051", "lqfp32"] +mcu-STM32L010R8Tx = ["io-STM32L051", "lqfp64"] +mcu-STM32L010RBTx = ["io-STM32L071", "lqfp64"] +mcu-STM32L011D3Px = ["io-STM32L021", "stm32l0x1", "tssop14"] +mcu-STM32L011D4Px = ["io-STM32L021", "stm32l0x1", "tssop14"] +mcu-STM32L011E3Yx = ["io-STM32L021", "stm32l0x1", "wlcsp25"] +mcu-STM32L011E4Yx = ["io-STM32L021", "stm32l0x1", "wlcsp25"] +mcu-STM32L011F3Px = ["io-STM32L021", "stm32l0x1", "tssop20"] +mcu-STM32L011F3Ux = ["io-STM32L021", "stm32l0x1", "ufqfpn20"] +mcu-STM32L011F4Px = ["io-STM32L021", "stm32l0x1", "tssop20"] +mcu-STM32L011F4Ux = ["io-STM32L021", "stm32l0x1", "ufqfpn20"] +mcu-STM32L011G3Ux = ["io-STM32L021", "stm32l0x1", "ufqfpn28"] +mcu-STM32L011G4Ux = ["io-STM32L021", "stm32l0x1", "ufqfpn28"] +mcu-STM32L011K3Tx = ["io-STM32L021", "stm32l0x1", "lqfp32"] +mcu-STM32L011K3Ux = ["io-STM32L021", "stm32l0x1", "ufqfpn32"] +mcu-STM32L011K4Tx = ["io-STM32L021", "stm32l0x1", "lqfp32"] +mcu-STM32L011K4Ux = ["io-STM32L021", "stm32l0x1", "ufqfpn32"] +mcu-STM32L021D4Px = ["io-STM32L021", "stm32l0x1", "tssop14"] +mcu-STM32L021F4Px = ["io-STM32L021", "stm32l0x1", "tssop20"] +mcu-STM32L021F4Ux = ["io-STM32L021", "stm32l0x1", "ufqfpn20"] +mcu-STM32L021G4Ux = ["io-STM32L021", "stm32l0x1", "ufqfpn28"] +mcu-STM32L021K4Tx = ["io-STM32L021", "stm32l0x1", "lqfp32"] +mcu-STM32L021K4Ux = ["io-STM32L021", "stm32l0x1", "ufqfpn32"] +mcu-STM32L031C4Tx = ["io-STM32L031", "stm32l0x1", "lqfp48"] +mcu-STM32L031C6Tx = ["io-STM32L031", "stm32l0x1", "lqfp48"] +mcu-STM32L031C6Ux = ["io-STM32L031", "stm32l0x1", "ufqfpn48"] +mcu-STM32L031E4Yx = ["io-STM32L031", "stm32l0x1", "wlcsp25"] +mcu-STM32L031E6Yx = ["io-STM32L031", "stm32l0x1", "wlcsp25"] +mcu-STM32L031F4Px = ["io-STM32L031", "stm32l0x1", "tssop20"] +mcu-STM32L031F6Px = ["io-STM32L031", "stm32l0x1", "tssop20"] +mcu-STM32L031G4Ux = ["io-STM32L031", "stm32l0x1", "ufqfpn28"] +mcu-STM32L031G6Ux = ["io-STM32L031", "stm32l0x1", "ufqfpn28"] +mcu-STM32L031G6UxS = ["io-STM32L031", "stm32l0x1", "ufqfpn28"] +mcu-STM32L031K4Tx = ["io-STM32L031", "stm32l0x1", "lqfp32"] +mcu-STM32L031K4Ux = ["io-STM32L031", "stm32l0x1", "ufqfpn32"] +mcu-STM32L031K6Tx = ["io-STM32L031", "stm32l0x1", "lqfp32"] +mcu-STM32L031K6Ux = ["io-STM32L031", "stm32l0x1", "ufqfpn32"] +mcu-STM32L041C4Tx = ["io-STM32L031", "stm32l0x1", "lqfp48"] +mcu-STM32L041C6Tx = ["io-STM32L031", "stm32l0x1", "lqfp48"] +mcu-STM32L041E6Yx = ["io-STM32L031", "stm32l0x1", "wlcsp25"] +mcu-STM32L041F6Px = ["io-STM32L031", "stm32l0x1", "tssop20"] +mcu-STM32L041G6Ux = ["io-STM32L031", "stm32l0x1", "ufqfpn28"] +mcu-STM32L041G6UxS = ["io-STM32L031", "stm32l0x1", "ufqfpn28"] +mcu-STM32L041K6Tx = ["io-STM32L031", "stm32l0x1", "lqfp32"] +mcu-STM32L041K6Ux = ["io-STM32L031", "stm32l0x1", "ufqfpn32"] +mcu-STM32L051C6Tx = ["io-STM32L051", "stm32l0x1", "lqfp48"] +mcu-STM32L051C8Tx = ["io-STM32L051", "stm32l0x1", "lqfp48"] +mcu-STM32L051K6Tx = ["io-STM32L051", "stm32l0x1", "lqfp32"] +mcu-STM32L051K6Ux = ["io-STM32L051", "stm32l0x1", "ufqfpn32"] +mcu-STM32L051K8Tx = ["io-STM32L051", "stm32l0x1", "lqfp32"] +mcu-STM32L051K8Ux = ["io-STM32L051", "stm32l0x1", "ufqfpn32"] +mcu-STM32L051R6Hx = ["io-STM32L051", "stm32l0x1", "tfbga64"] +mcu-STM32L051R6Tx = ["io-STM32L051", "stm32l0x1", "lqfp64"] +mcu-STM32L051R8Hx = ["io-STM32L051", "stm32l0x1", "tfbga64"] +mcu-STM32L051R8Tx = ["io-STM32L051", "stm32l0x1", "lqfp64"] +mcu-STM32L051T6Yx = ["io-STM32L051", "stm32l0x1", "wlcsp36"] +mcu-STM32L051T8Yx = ["io-STM32L051", "stm32l0x1", "wlcsp36"] +mcu-STM32L052C6Tx = ["io-STM32L051", "stm32l0x2", "lqfp48"] +mcu-STM32L052C8Tx = ["io-STM32L051", "stm32l0x2", "lqfp48"] +mcu-STM32L052K6Tx = ["io-STM32L051", "stm32l0x2", "lqfp32"] +mcu-STM32L052K6Ux = ["io-STM32L051", "stm32l0x2", "ufqfpn32"] +mcu-STM32L052K8Tx = ["io-STM32L051", "stm32l0x2", "lqfp32"] +mcu-STM32L052K8Ux = ["io-STM32L051", "stm32l0x2", "ufqfpn32"] +mcu-STM32L052R6Hx = ["io-STM32L051", "stm32l0x2", "tfbga64"] +mcu-STM32L052R6Tx = ["io-STM32L051", "stm32l0x2", "lqfp64"] +mcu-STM32L052R8Hx = ["io-STM32L051", "stm32l0x2", "tfbga64"] +mcu-STM32L052R8Tx = ["io-STM32L051", "stm32l0x2", "lqfp64"] +mcu-STM32L052T6Yx = ["io-STM32L051", "stm32l0x2", "wlcsp36"] +mcu-STM32L052T8Fx = ["io-STM32L051", "stm32l0x2", "wlcsp36"] +mcu-STM32L052T8Yx = ["io-STM32L051", "stm32l0x2", "wlcsp36"] +mcu-STM32L053C6Tx = ["io-STM32L051", "stm32l0x3", "lqfp48"] +mcu-STM32L053C8Tx = ["io-STM32L051", "stm32l0x3", "lqfp48"] +mcu-STM32L053R6Hx = ["io-STM32L051", "stm32l0x3", "tfbga64"] +mcu-STM32L053R6Tx = ["io-STM32L051", "stm32l0x3", "lqfp64"] +mcu-STM32L053R8Hx = ["io-STM32L051", "stm32l0x3", "tfbga64"] +mcu-STM32L053R8Tx = ["io-STM32L051", "stm32l0x3", "lqfp64"] +mcu-STM32L062K8Tx = ["io-STM32L051", "stm32l0x2", "lqfp32"] +mcu-STM32L062K8Ux = ["io-STM32L051", "stm32l0x2", "ufqfpn32"] +mcu-STM32L063C8Tx = ["io-STM32L051", "stm32l0x3", "lqfp48"] +mcu-STM32L063R8Tx = ["io-STM32L051", "stm32l0x3", "lqfp64"] +mcu-STM32L071C8Tx = ["io-STM32L071", "stm32l0x1", "lqfp48"] +mcu-STM32L071CBTx = ["io-STM32L071", "stm32l0x1", "lqfp48"] +mcu-STM32L071CBYx = ["io-STM32L071", "stm32l0x1", "wlcsp49"] +mcu-STM32L071CZTx = ["io-STM32L071", "stm32l0x1", "lqfp48"] +mcu-STM32L071CZYx = ["io-STM32L071", "stm32l0x1", "wlcsp49"] +mcu-STM32L071K8Ux = ["io-STM32L071", "stm32l0x1", "ufqfpn32"] +mcu-STM32L071KBTx = ["io-STM32L071", "stm32l0x1", "lqfp32"] +mcu-STM32L071KBUx = ["io-STM32L071", "stm32l0x1", "ufqfpn32"] +mcu-STM32L071KZTx = ["io-STM32L071", "stm32l0x1", "lqfp32"] +mcu-STM32L071KZUx = ["io-STM32L071", "stm32l0x1", "ufqfpn32"] +mcu-STM32L071RBHx = ["io-STM32L071", "stm32l0x1", "tfbga64"] +mcu-STM32L071RBTx = ["io-STM32L071", "stm32l0x1", "lqfp64"] +mcu-STM32L071RZHx = ["io-STM32L071", "stm32l0x1", "tfbga64"] +mcu-STM32L071RZTx = ["io-STM32L071", "stm32l0x1", "lqfp64"] +mcu-STM32L071V8Ix = ["io-STM32L071", "stm32l0x1", "ufbga100"] +mcu-STM32L071V8Tx = ["io-STM32L071", "stm32l0x1", "lqfp100"] +mcu-STM32L071VBIx = ["io-STM32L071", "stm32l0x1", "ufbga100"] +mcu-STM32L071VBTx = ["io-STM32L071", "stm32l0x1", "lqfp100"] +mcu-STM32L071VZIx = ["io-STM32L071", "stm32l0x1", "ufbga100"] +mcu-STM32L071VZTx = ["io-STM32L071", "stm32l0x1", "lqfp100"] +mcu-STM32L072CBTx = ["io-STM32L071", "stm32l0x2", "lqfp48"] +mcu-STM32L072CBYx = ["io-STM32L071", "stm32l0x2", "wlcsp49"] +mcu-STM32L072CZEx = ["io-STM32L071", "stm32l0x2", "ewlcsp49"] +mcu-STM32L072CZTx = ["io-STM32L071", "stm32l0x2", "lqfp48"] +mcu-STM32L072CZYx = ["io-STM32L071", "stm32l0x2", "wlcsp49"] +mcu-STM32L072KBTx = ["io-STM32L071", "stm32l0x2", "lqfp32"] +mcu-STM32L072KBUx = ["io-STM32L071", "stm32l0x2", "ufqfpn32"] +mcu-STM32L072KZTx = ["io-STM32L071", "stm32l0x2", "lqfp32"] +mcu-STM32L072KZUx = ["io-STM32L071", "stm32l0x2", "ufqfpn32"] +mcu-STM32L072RBHx = ["io-STM32L071", "stm32l0x2", "tfbga64"] +mcu-STM32L072RBIx = ["io-STM32L071", "stm32l0x2", "ufbga64"] +mcu-STM32L072RBTx = ["io-STM32L071", "stm32l0x2", "lqfp64"] +mcu-STM32L072RZHx = ["io-STM32L071", "stm32l0x2", "tfbga64"] +mcu-STM32L072RZIx = ["io-STM32L071", "stm32l0x2", "ufbga64"] +mcu-STM32L072RZTx = ["io-STM32L071", "stm32l0x2", "lqfp64"] +mcu-STM32L072V8Ix = ["io-STM32L071", "stm32l0x2", "ufbga100"] +mcu-STM32L072V8Tx = ["io-STM32L071", "stm32l0x2", "lqfp100"] +mcu-STM32L072VBIx = ["io-STM32L071", "stm32l0x2", "ufbga100"] +mcu-STM32L072VBTx = ["io-STM32L071", "stm32l0x2", "lqfp100"] +mcu-STM32L072VZIx = ["io-STM32L071", "stm32l0x2", "ufbga100"] +mcu-STM32L072VZTx = ["io-STM32L071", "stm32l0x2", "lqfp100"] +mcu-STM32L073CBTx = ["io-STM32L071", "stm32l0x3", "lqfp48"] +mcu-STM32L073CZTx = ["io-STM32L071", "stm32l0x3", "lqfp48"] +mcu-STM32L073RBHx = ["io-STM32L071", "stm32l0x3", "tfbga64"] +mcu-STM32L073RBTx = ["io-STM32L071", "stm32l0x3", "lqfp64"] +mcu-STM32L073RZHx = ["io-STM32L071", "stm32l0x3", "tfbga64"] +mcu-STM32L073RZIx = ["io-STM32L071", "stm32l0x3", "ufbga64"] +mcu-STM32L073RZTx = ["io-STM32L071", "stm32l0x3", "lqfp64"] +mcu-STM32L073V8Ix = ["io-STM32L071", "stm32l0x3", "ufbga100"] +mcu-STM32L073V8Tx = ["io-STM32L071", "stm32l0x3", "lqfp100"] +mcu-STM32L073VBIx = ["io-STM32L071", "stm32l0x3", "ufbga100"] +mcu-STM32L073VBTx = ["io-STM32L071", "stm32l0x3", "lqfp100"] +mcu-STM32L073VZIx = ["io-STM32L071", "stm32l0x3", "ufbga100"] +mcu-STM32L073VZTx = ["io-STM32L071", "stm32l0x3", "lqfp100"] +mcu-STM32L081CBTx = ["io-STM32L071", "stm32l0x1", "lqfp48"] +mcu-STM32L081CZTx = ["io-STM32L071", "stm32l0x1", "lqfp48"] +mcu-STM32L081KZTx = ["io-STM32L071", "stm32l0x1", "lqfp32"] +mcu-STM32L081KZUx = ["io-STM32L071", "stm32l0x1", "ufqfpn32"] +mcu-STM32L082CZYx = ["io-STM32L071", "stm32l0x2", "wlcsp49"] +mcu-STM32L082KBTx = ["io-STM32L071", "stm32l0x2", "lqfp32"] +mcu-STM32L082KBUx = ["io-STM32L071", "stm32l0x2", "ufqfpn32"] +mcu-STM32L082KZTx = ["io-STM32L071", "stm32l0x2", "lqfp32"] +mcu-STM32L082KZUx = ["io-STM32L071", "stm32l0x2", "ufqfpn32"] +mcu-STM32L083CBTx = ["io-STM32L071", "stm32l0x3", "lqfp48"] +mcu-STM32L083CZTx = ["io-STM32L071", "stm32l0x3", "lqfp48"] +mcu-STM32L083RBHx = ["io-STM32L071", "stm32l0x3", "tfbga64"] +mcu-STM32L083RBTx = ["io-STM32L071", "stm32l0x3", "lqfp64"] +mcu-STM32L083RZHx = ["io-STM32L071", "stm32l0x3", "tfbga64"] +mcu-STM32L083RZTx = ["io-STM32L071", "stm32l0x3", "lqfp64"] +mcu-STM32L083V8Ix = ["io-STM32L071", "stm32l0x3", "ufbga100"] +mcu-STM32L083V8Tx = ["io-STM32L071", "stm32l0x3", "lqfp100"] +mcu-STM32L083VBIx = ["io-STM32L071", "stm32l0x3", "ufbga100"] +mcu-STM32L083VBTx = ["io-STM32L071", "stm32l0x3", "lqfp100"] +mcu-STM32L083VZIx = ["io-STM32L071", "stm32l0x3", "ufbga100"] +mcu-STM32L083VZTx = ["io-STM32L071", "stm32l0x3", "lqfp100"] [profile.dev] codegen-units = 1 diff --git a/src/adc.rs b/src/adc.rs index 92b53da9..85fb714d 100755 --- a/src/adc.rs +++ b/src/adc.rs @@ -247,7 +247,7 @@ adc_pins! { feature = "lqfp100", feature = "tfbga64", feature = "ufbga64", - feature = "ufbg100", + feature = "ufbga100", feature = "wlcsp49", ), ))] @@ -271,7 +271,7 @@ adc_pins! { #[cfg(all( feature = "stm32l072", - any(feature = "lqfp64", feature = "lqfp100", feature = "ufbg100",), + any(feature = "lqfp64", feature = "lqfp100", feature = "ufbga100",), ))] adc_pins! { Channel13: (gpioc::PC3, 13u8), @@ -290,7 +290,7 @@ adc_pins! { feature = "lqfp100", feature = "tfbga64", feature = "ufbga64", - feature = "ufbg100", + feature = "ufbga100", ), ))] adc_pins! { From 9f1270a1b74cd2e0f1125f3c5564833823fd2793 Mon Sep 17 00:00:00 2001 From: Danilo Bargen Date: Sun, 23 Feb 2020 21:31:20 +0100 Subject: [PATCH 2/3] fixup! Introduce new Cargo features generated with cube-parse --- Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 999526c4..7b42b434 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -52,8 +52,8 @@ usbd-serial = "0.1.0" rt = ["stm32l0/rt"] disable-linker-script = [] -# PAC families -# (Warning: Some peripherals, e.g. GPIO, don't follow this family grouping.) +# STM32L0 subfamilies +# (Warning: Some peripherals, e.g. GPIO, don't follow this subfamily grouping.) stm32l0x1 = ["stm32l0/stm32l0x1"] stm32l0x2 = ["stm32l0/stm32l0x2"] stm32l0x3 = ["stm32l0/stm32l0x3"] From 76b3abb4b7ca47df7c8358b1797be073acfe34e5 Mon Sep 17 00:00:00 2001 From: Danilo Bargen Date: Mon, 24 Feb 2020 09:20:43 +0100 Subject: [PATCH 3/3] fixup! Introduce new Cargo features generated with cube-parse --- Cargo.toml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 7b42b434..6b672752 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -58,6 +58,11 @@ stm32l0x1 = ["stm32l0/stm32l0x1"] stm32l0x2 = ["stm32l0/stm32l0x2"] stm32l0x3 = ["stm32l0/stm32l0x3"] +# Legacy features (don't use those anymore) +stm32l052 = ["stm32l0x2"] +stm32l072 = ["stm32l0x2"] +stm32l082 = ["stm32l0x2"] + # Features based on the GPIO peripheral version. # This determines the pin function mapping of the MCU. io-STM32L021 = []