import subprocess import os import sys def flash_hex_with_stlink(hex_file_path): if not os.path.isfile(hex_file_path): print(f"❌ Файл не найден: {hex_file_path}") return False command = [ "st-flash", "--format", "ihex", "write", hex_file_path ] try: print(f"⚡️ Прошиваем {hex_file_path} через ST-Link...") result = subprocess.run( command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True, timeout=30 ) print("▬▬▬ STDOUT ▬▬▬") print(result.stdout) print("▬▬▬ STDERR ▬▬▬") print(result.stderr) if result.returncode == 0: print("✅ Прошивка успешно завершена!") # Добавленный блок сброса try: print("🔄 Выполняем сброс устройства...") reset_result = subprocess.run( ["st-info", "--reset"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True, timeout=10 ) if reset_result.returncode == 0: print("♻️ Устройство успешно сброшено!") else: print(f"⚠️ Ошибка (код: {reset_result.returncode})") print("▬▬▬ STDERR сброса ▬▬▬") print(reset_result.stderr) except Exception as e: print(f"⚠️ Ошибка при сбросе: {str(e)}") return True else: print(f"❌ Ошибка прошивки (код: {result.returncode})") return False except FileNotFoundError: print("❌ st-flash не найден! Установите stlink-tools.") return False except subprocess.TimeoutExpired: print("❌ Таймаут операции! Проверьте подключение ST-Link.") return False except Exception as e: print(f"❌ Неизвестная ошибка: {str(e)}") return False if __name__ == "__main__": if len(sys.argv) != 2: print("Использование: python stlink_flash.py ") sys.exit(1) if flash_hex_with_stlink(sys.argv[1]): sys.exit(0) else: sys.exit(1)