private async void McuClear(object sender, RoutedEventArgs e) { if (Vm.SerialPortInstance != null) { Vm.SerialPortInstance.Close(); if (_serialPortRead != null) { await _serialPortRead; } } var programmer = new Programmer.STM32Programmer(); Vm.SerialPortInstance = new SerialPort(Vm.SerialPort, programmer.BaudRate, programmer.ParityBit, programmer.DataBit, programmer.StopBit); Vm.SerialPortInstance.Open(); programmer.Inst = Vm.SerialPortInstance; programmer.AppendLog += AppendLog; programmer.ProgressReport += ProgressReport; // 重启进入下载模式 Vm.DownloadTiming.Run(Vm.SerialPortInstance, Vm.EnableIsHigh); do { // 连接 if (!await programmer.Probe()) { AppendLog("连接MCU失败"); Vm.RestartTiming.Run(Vm.SerialPortInstance, Vm.EnableIsHigh); Vm.SerialPortInstance.Close(); Vm.SerialPortInstance = null; break; } // 获取MCU信息 if (!await programmer.GetMcuInfo()) { AppendLog("获取MCU信息失败"); Vm.RestartTiming.Run(Vm.SerialPortInstance, Vm.EnableIsHigh); Vm.SerialPortInstance.Close(); Vm.SerialPortInstance = null; break; } // 清除芯片 if (!await programmer.Clear()) { AppendLog("清除MCU失败"); Vm.SerialPortInstance.Close(); Vm.SerialPortInstance = null; break; } Vm.SerialPortInstance.Close(); Vm.SerialPortInstance = null; } while (false); Vm.StatusText = "空闲"; }
private async void McuProgram(object sender, RoutedEventArgs e) { Vm.Programming = true; var autoOpen = Vm.AutoOpenSerial; if (Vm.SerialPortInstance != null) { Vm.SerialPortInstance.Close(); if (_serialPortRead != null) { await _serialPortRead; _serialPortRead = null; } autoOpen = true; } var programmer = new Programmer.STM32Programmer(); Vm.SerialPortInstance = new SerialPort(Vm.SerialPort, programmer.BaudRate, programmer.ParityBit, programmer.DataBit, programmer.StopBit); Vm.SerialPortInstance.Open(); programmer.Inst = Vm.SerialPortInstance; programmer.AppendLog += AppendLog; programmer.ProgressReport += ProgressReport; // 重启进入下载模式 Vm.DownloadTiming.Run(Vm.SerialPortInstance, Vm.EnableIsHigh); do { // 连接 if (!await programmer.Probe()) { AppendLog("连接MCU失败"); Vm.RestartTiming.Run(Vm.SerialPortInstance, Vm.EnableIsHigh); Vm.SerialPortInstance.Close(); Vm.SerialPortInstance = null; break; } // 获取MCU信息 if (!await programmer.GetMcuInfo()) { AppendLog("获取MCU信息失败"); Vm.RestartTiming.Run(Vm.SerialPortInstance, Vm.EnableIsHigh); Vm.SerialPortInstance.Close(); Vm.SerialPortInstance = null; break; } // 清除芯片 if (!await programmer.Clear()) { AppendLog("清除MCU失败"); Vm.SerialPortInstance.Close(); Vm.SerialPortInstance = null; break; } // 下载 if (!await programmer.Flash(Vm.FileName)) { AppendLog("下载程序失败"); Vm.SerialPortInstance.Close(); Vm.SerialPortInstance = null; break; } // 校验 if (Vm.Check && !await programmer.Check()) { AppendLog("校验程序失败"); Vm.SerialPortInstance.Close(); Vm.SerialPortInstance = null; break; } // 执行 if (Vm.Exec && !await programmer.Run()) { AppendLog("执行程序失败"); Vm.SerialPortInstance.Close(); Vm.SerialPortInstance = null; break; } Vm.SerialPortInstance.Close(); Vm.SerialPortInstance = null; if (autoOpen) { Vm.SerialPortInstance = new SerialPort(Vm.SerialPort, Vm.BaudRate, Vm.ParityBit, Vm.DataBit, Vm.StopBit); Vm.SerialPortInstance.Open(); _serialPortRead = Task.Run(() => RunLogRead()); } } while (false); Vm.Programming = false; Vm.StatusText = "空闲"; }