Esempio n. 1
0
        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 = "空闲";
        }
Esempio n. 2
0
        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  = "空闲";
        }