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]:
40def devices_from_family(family: str) -> list[str]:
41    """
42    :param family: A STM32 family name, for example, F0, H7, G4.
43    :return: A list of device names belonging to a STM32 family.
44    """
45    devices = _family_file().query(f'//Family[@Name="{family.upper()}"]/SubFamily/Mcu/@RefName')
46    devices = _format_raw_devices(devices)
47    LOGGER.info("Found devices of family '{}': {}".format(family, ", ".join(devices)))
48    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]:
51def devices_from_prefix(prefix: str) -> list[str]:
52    """
53    :param prefix: A STM32 device prefix, for example, STM32, STM32H7, STM32G432.
54    :return: A list of device names starting with the prefix.
55    """
56    devices = _family_file().query(f'//Family/SubFamily/Mcu[starts-with(@RefName,"{prefix.upper()}")]')
57    devices = _format_raw_devices(devices)
58    devices = [d for d in devices if not stm32_data.ignoreDevice(d)]
59    LOGGER.info("Found devices for prefix '{}': {}".format(prefix, ", ".join(devices)))
60    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]]:
71def devices_from_partname(partname: str) -> list[dict[str]]:
72    """
73    Find the STM32 device name in the STM32CubeMX database and convert the data
74    into a device specific key-value mapping describing the hardware.
75
76    .. note::
77       One partname may contain multiple devices, for example, multiple
78       asymmetric CPU cores like in the STM32H745 device.
79
80    :param partname: A full STM32 device name.
81    :return: a list of dictionaries containing a device specific data structure.
82    """
83    deviceNames = _family_file().query(f'//Family/SubFamily/Mcu[starts-with(@RefName,"{partname}")]')
84    comboDeviceName = sorted([d.get("Name") for d in deviceNames])[0]
85    device_file = XmlReader(os.path.join(_MCU_PATH, comboDeviceName + ".xml"))
86    did = did_from_string(partname.lower())
87    LOGGER.info(f"Parsing '{did.string}'")
88
89    # information about the core and architecture
90    cores = [c.text.lower().replace("arm ", "").replace("+", "plus") for c in device_file.query("//Core")]
91    if len(cores) > 1:
92        did.naming_schema += "@{core}"
93    devices = [_properties_from_id(partname, comboDeviceName, device_file, did.copy(), c) for c in cores]
94    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]:
63def cubemx_device_list() -> list[DeviceIdentifier]:
64    """
65    :return: A list of all STM32 device identifiers.
66    """
67    return [did_from_string(d) for d in devices_from_prefix("STM32")]
Returns

A list of all STM32 device identifiers.