modm_data.cubemx

STMicro STM32CubeMX Database

 1# Copyright 2022, Niklas Hauser
 2# SPDX-License-Identifier: MPL-2.0
 3
 4"""
 5# STMicro STM32CubeMX Database
 6"""
 7
 8from .device_data import devices_from_family, devices_from_prefix, devices_from_partname, cubemx_device_list
 9
10__all__ = [
11    "devices_from_family",
12    "devices_from_prefix",
13    "devices_from_partname",
14    "cubemx_device_list",
15]
def devices_from_family(family: str) -> list[str]:
38def devices_from_family(family: str) -> list[str]:
39    """
40    :param family: A STM32 family name, for example, F0, H7, G4.
41    :return: A list of device names belonging to a STM32 family.
42    """
43    devices = _family_file().query(f'//Family[@Name="{family.upper()}"]/SubFamily/Mcu/@RefName')
44    devices = _format_raw_devices(devices)
45    LOGGER.info("Found devices of family '{}': {}".format(family, ", ".join(devices)))
46    return devices
Parameters
  • family: A STM32 family name, for example, F0, H7, G4.
Returns

A list of device names belonging to a STM32 family.

def devices_from_prefix(prefix: str) -> list[str]:
49def devices_from_prefix(prefix: str) -> list[str]:
50    """
51    :param prefix: A STM32 device prefix, for example, STM32, STM32H7, STM32G432.
52    :return: A list of device names starting with the prefix.
53    """
54    devices = _family_file().query(f'//Family/SubFamily/Mcu[starts-with(@RefName,"{prefix.upper()}")]')
55    devices = _format_raw_devices(devices)
56    devices = [d for d in devices if not stm32_data.ignoreDevice(d)]
57    LOGGER.info("Found devices for prefix '{}': {}".format(prefix, ", ".join(devices)))
58    return list(sorted(devices))
Parameters
  • prefix: A STM32 device prefix, for example, STM32, STM32H7, STM32G432.
Returns

A list of device names starting with the prefix.

def devices_from_partname(partname: str) -> list[dict[str]]:
69def devices_from_partname(partname: str) -> list[dict[str]]:
70    """
71    Find the STM32 device name in the STM32CubeMX database and convert the data
72    into a device specific key-value mapping describing the hardware.
73
74    .. note::
75       One partname may contain multiple devices, for example, multiple
76       asymmetric CPU cores like in the STM32H745 device.
77
78    :param partname: A full STM32 device name.
79    :return: a list of dictionaries containing a device specific data structure.
80    """
81    deviceNames = _family_file().query(f'//Family/SubFamily/Mcu[starts-with(@RefName,"{partname}")]')
82    comboDeviceName = sorted([d.get("Name") for d in deviceNames])[0]
83    device_file = XmlReader(os.path.join(_MCU_PATH, comboDeviceName + ".xml"))
84    did = did_from_string(partname.lower())
85    LOGGER.info(f"Parsing '{did.string}'")
86
87    # information about the core and architecture
88    cores = [c.text.lower().replace("arm ", "") for c in device_file.query("//Core")]
89    if len(cores) > 1:
90        did.naming_schema += "@{core}"
91    devices = [_properties_from_id(comboDeviceName, device_file, did.copy(), c) for c in cores]
92    return [d for d in devices if d is not None]

Find the STM32 device name in the STM32CubeMX database and convert the data into a device specific key-value mapping describing the hardware.

One partname may contain multiple devices, for example, multiple asymmetric CPU cores like in the STM32H745 device.

Parameters
  • partname: A full STM32 device name.
Returns

a list of dictionaries containing a device specific data structure.

def cubemx_device_list() -> list[modm_data.kg.DeviceIdentifier]:
61def cubemx_device_list() -> list[DeviceIdentifier]:
62    """
63    :return: A list of all STM32 device identifiers.
64    """
65    return [did_from_string(d) for d in devices_from_prefix("STM32")]
Returns

A list of all STM32 device identifiers.