TEMPLATE_MCUS = { # Каталог отражает конкретные MCU-порты закреплённого templates; значения загрузчиков совпадают с FirmwareTab. "stm32": ( # Порядок сохраняет прежние F103/F407 и группирует добавленные варианты по семействам. ("STM32F103C8T6", "DS18B20, CAN Sensor, RS-485 Boot, Firmware Info и LED Indicator.", 2), # Порты ds18b20/stm32f1 и rs485-boot/stm32f103 используют имеющийся UART ROM Boot, индекс 2. ("STM32F407", "STM32F407VET6: SETProtocol, DevBoard V1, эмуляторы, генератор ЦАП, Parallel NAND и USB Boot.", 7), # Порты set-protocol/stm32f407-* и parallel-nand/stm32f407ve; индекс 7 относится только к USB-загрузчику F407. ("STM32F103RCT6", "Parallel NAND через GPIO, SETProtocol, DS18B20, Firmware Info и LED Indicator.", None), # Отдельный порт parallel-nand/stm32f103rc учитывает отсутствие FSMC в корпусе LQFP64; None открывает обзор MCU. ("STM32F103ZET6", "Parallel NAND через FSMC, SETProtocol, эмуляторы УМП / 2812 / IGBT / ЦАП / DEIF, DS18B20, Firmware Info и LED Indicator.", None), # Порт parallel-nand/stm32f103ze использует аппаратный FSMC, поэтому вариант показан отдельно от RCT6. ("STM32G431", "DS18B20 / 1-Wire, Firmware Info и LED Indicator.", None), # Поддержка задана конфигурацией ds18b20/stm32g4/onewire_config.g431.template.h и общими портами G4. ("STM32G474", "SETProtocol, DS18B20 / 1-Wire, Firmware Info, LED Indicator и генератор ЦАП.", None), # Общие порты stm32g4 и set-protocol/stm32g474-wavegen подходят семейству; конкретные платы перечислены ниже. ("STM32G474CEU6", "Parallel NAND через GPIO, DS18B20 / 1-Wire, Firmware Info и LED Indicator.", None), # Порт parallel-nand/stm32g474ce предназначен для корпуса UFQFPN-48. ("STM32G474RB", "SETProtocol, периферийный эмулятор, генератор ЦАП и порт USB Boot в templates.", None), # Порты set-protocol/stm32g474-periph и stm32g474-usb-boot описывают RB; USB-клиент F407 не назначается этому MCU. ("STM32G474VET6", "HOPE: эмуляторы УМП / 2812 / IGBT / ЦАП / DEIF; CANdle CAN / UART BOOT, STM Invertor, DS18B20 / 1-Wire.", None), # CAN_BOOTLOADER_G474.md проекта CANdle подтверждает BOOT именно VET6, отдельно от USB BOOT платы RB. ), # Завершаем список STM32 без автоматического поиска каталогов, недоступных внутри собранного EXE. "k1921": ( # К1921 использует те же общие инструменты SETProtocol, что описаны в PROJECT_RELATIONS.md. ("K1921VK028", "RTC Service, Firmware Info и обмен SETProtocol через UART.", None), # Источники возможностей — rtc-service/k1921vk028, firmware-info/k1921vk028 и транспорт приложения. ), # Единственный конкретный MCU этого семейства в текущем templates. } # Чистые данные не создают Qt-виджеты и сохраняют отложенное построение платформ. EMULATOR_MODES = { # Номера режимов совпадают с config[3] общего set_emu_server и не зависят от MCU. 0: ("ump", "УМП — логгер и сигналы", "УМП: запись логгера и управление эмуляцией пуска."), # Режим по умолчанию после сброса MCU. 1: ("tms2812", "2812 — BALZAM_7 / CMD_STD", "2812: пуск, останов и задание частоты через CMD_STD."), # Обмен 2812 использует собственный адрес, обычно 1. 2: ("igbt", "IGBT / драйвер — Vin / Vstat", "IGBT: после выбора включите эмуляцию в панели драйвера."), # Физические GPIO зависят от платы, сама модель общая. 3: ("wavegen", "Генератор сигналов — ЦАП / PA4", "ЦАП: загрузите таблицу, затем отдельно нажмите «Пуск ЦАП»."), # Запись таблицы не запускает аппаратный вывод. 4: ("deif", "DEIF Master — передача CAN", "DEIF Master: настройте профиль и RAW, затем нажмите «Пуск DEIF»."), # Общая C-модель передаёт SAM/DAM через аппаратный CAN выбранного MCU. 5: ("deif", "DEIF Slave — приём CAN", "DEIF Slave: настройте Node-ID и привязки, затем нажмите «Пуск DEIF»."), # Роль Slave принимает NMT/MPDO и передаёт Boot-up, heartbeat и EMCY. } # Режим применяется отдельной подтверждаемой транзакцией STM, запуск выполняется в панели модели. EMULATOR_TOOLS = { # Один набор инструментов используется каждым реализованным аппаратным портом. "settings": "Настройки STM", # Адрес, скорость и режим читаются и проверяются общим клиентом. "ump": "УМП", # Логгер и синтетические сигналы используют set_emu_ump. "tms2812": "2812", # Обмен BALZAM_7 использует set_emu_tms. "igbt": "IGBT / драйвер", # Логические входы и выходы используют set_emu_igbt. "wavegen": "Подключение генератора", # Таблица передаётся общему генератору с таймером выбранной платы. "deif": "DEIF Master / Slave", # Одна панель управляет обеими ролями set_emu_deif. } # Приложение предоставляет существующие панели и использует общую панель DEIF из templates. EMULATOR_MENU_TITLE = "Эмуляторы: УМП / 2812 / IGBT / ЦАП / DEIF" # Обзор MCU и общая навигация используют одинаковый список поддержанных моделей. EMULATOR_PROFILES = { # Каталог содержит платы с реальной прошивкой stm32-emulator; дополнительные порты подключаются здесь. "STM32F407": {"title": "STM32F407VET6", "timer_hz": 72_000_000, "sample_max": 1_000_000, "settings": "stm_ump", "model": "STM32F407-EMU-EXPERIMENT", "igbt_inputs": tuple("PB%d" % pin for pin in range(8)), "igbt_gpio": True, "wave_port": "stm32f407-periph", "tools": tuple(EMULATOR_TOOLS)}, # TIM6 72 МГц и прежний ключ stm_ump сохраняют совместимость F407. "STM32F103ZET6": {"title": "STM32F103ZET6", "timer_hz": 72_000_000, "sample_max": 1_000_000, "settings": "stm_emulator/STM32F103ZET6", "model": "STM32F103ZE-EMU-EXPERIMENT", "igbt_inputs": ("PB0", "PB1", "PB2", "PB10", "PB11", "PB12", "PB13", "PB14"), "igbt_gpio": True, "wave_port": "stm32f103-periph", "tools": tuple(EMULATOR_TOOLS)}, # High-density F103ZE имеет DAC/TIM6 72 МГц, UART/GAS и bxCAN; малые F103 без DAC не объявляются совместимыми автоматически. "STM32G474RB": {"title": "STM32G474RB", "timer_hz": 160_000_000, "sample_max": 1_000_000, "settings": "stm_emulator/STM32G474RB", "model": "STM32G474RB-EMU-EXPERIMENT", "igbt_inputs": ("PB0", "PB1", "PB2", "PB10", "PB11", "PB12", "PB13", "PB14"), "igbt_gpio": True, "wave_port": "stm32g474-periph", "tools": tuple(EMULATOR_TOOLS)}, # RB использует свой USB BOOT, FDCAN и TIM6 160 МГц. "STM32G474VET6": {"title": "HOPE STM32G474VET6", "timer_hz": 160_000_000, "sample_max": 1_000_000, "settings": "stm_emulator/STM32G474VET6", "model": "STM32G474VE-HOPE-EMU", "igbt_inputs": ("PB0", "PB1", "PB2", "PB10", "PB11", "PB12", "PB13", "PB14"), "igbt_gpio": False, "wave_port": "stm32g474-periph", "tools": tuple(EMULATOR_TOOLS)}, # HOPE подтверждает собственную USB-модель, USART1 PA9/PA10 и CAN1 PD0/PD1; GPIO IGBT отключены из-за CAN2 на PB12/PB13. } # Модели общие, а идентичность, GPIO, частоты и сохранённое подключение принадлежат выбранной плате. CANDLE_G474_BOOT = { # Профиль воспроизводит CAN_BOOTLOADER_G474.md и boot_profile.h проекта CANdle_stm32. "app_base": 0x08008000, "app_size": 480 * 1024, # Начальные 32 КиБ из 512 КиБ Flash заняты BOOT; приложение занимает оставшиеся 480 КиБ. "stack_base": 0x20000000, "stack_end": 0x20014000, # Валидатор pcan_boot_stm32g474.c проекта CANdle принимает начальный MSP только внутри используемых linker-скриптом 80 КиБ SRAM. "device_type": 7, "device": 15, "product": 0, "hardware": 0, # Идентичность ProtoCAN BOOT: Type 7, Device 15, Product 0 и аппаратная ревизия 0. "can_bitrate": 500_000, "uart_baud": 512_000, # Classic CAN работает на 500 кбит/с, USART1 PA9/PA10 — на 512000 бод, 8N1. } # Адреса и скорости относятся только к CANdle G474VET6 и не подменяют профиль USB BOOT G474RB.