STM32 내장부트로더 GUI 설계

김상훈·2022년 10월 21일
0
post-custom-banner

출처: '땜스 전자연구소' 블로그

아직 미완성이긴 하지만 땜스 전자연구소에서 설명한대로 GUI 설계를 해보았다.

코드가 완전히 이해되진 않아서 어느정도 수정도 하긴 하였다.

위 사진은 Visual studio 프로그램을 이용해 GUI 디자인을 설계한 것이다.
아직 완성본은 아니지만 약 80%정도 완성 되었다.

각 컨트롤 별로 구분하기 쉽게 이름을 설정해주었다.

Private Sub ComboBox_SerialPort_COM_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox_SerialPort_COM.SelectedIndexChanged
        If (ComboBox_SerialPort_COM.SelectedIndex = 0) Then
            SerialPort_COM.PortName = "COM2"
        ElseIf (ComboBox_SerialPort_COM.SelectedIndex = 1) Then
            SerialPort_COM.PortName = "COM3"
        ElseIf (ComboBox_SerialPort_COM.SelectedIndex = 2) Then
            SerialPort_COM.PortName = "COM4"
        ElseIf (ComboBox_SerialPort_COM.SelectedIndex = 3) Then
            SerialPort_COM.PortName = "COM5"
        ElseIf (ComboBox_SerialPort_COM.SelectedIndex = 4) Then
            SerialPort_COM.PortName = "COM6"
        ElseIf (ComboBox_SerialPort_COM.SelectedIndex = 5) Then
            SerialPort_COM.PortName = "COM7"
        ElseIf (ComboBox_SerialPort_COM.SelectedIndex = 6) Then
            SerialPort_COM.PortName = "COM8"
        ElseIf (ComboBox_SerialPort_COM.SelectedIndex = 7) Then
            SerialPort_COM.PortName = "COM9"
        End If
    End Sub 입력하세요

위 코드는 COM포트 부분 옆에 콤보상자가 변하면 그에 따라서 내부적으로 COM2, COM3 등등..이 선택 되게끔 하는 코드이다.

Private Sub ComboBox_SerialPort_Baudrate_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox_SerialPort_Baudrate.SelectedIndexChanged
        If (ComboBox_SerialPort_Baudrate.SelectedIndex = 0) Then
            SerialPort_COM.BaudRate = 38400
        ElseIf (ComboBox_SerialPort_Baudrate.SelectedIndex = 1) Then
            SerialPort_COM.BaudRate = 57600
        ElseIf (ComboBox_SerialPort_Baudrate.SelectedIndex = 2) Then
            SerialPort_COM.BaudRate = 115200

        End If
    End Sub

Baudrate도 위와 비슷하게 해주었다.

Private Sub Button_Comm_Port_Open_Close_Click(sender As Object, e As EventArgs) Handles Button_SerialPort_Open_Close.Click
        If (Flag_SerialPort_Open_Close = False) Then
            Flag_SerialPort_Open_Close = True
            Try
                SerialPort_COM.Open()
                Button_SerialPort_Open_Close.Text = "통신포트 닫기"
                Button_Bootloader_Connection.Enabled = True
            Catch ex As Exception

            End Try

        ElseIf (Flag_SerialPort_Open_Close = True) Then
            Flag_SerialPort_Open_Close = False
            Button_SerialPort_Open_Close.Text = "통신포트 열기"
            SerialPort_COM.Close()
        End If
    End Sub
   

잘 보면 통신포트열기 버튼이 있을 것이다. 통신포트열기 버튼을 누르면 통신포트 닫기로 text가 바뀌게끔 설정하였고 serialport.open 및 close 함수를 통해 포트를 연결 및 해제 할 수 있다.

잘못된 포트를 골랐을 시 예외가 발생하면서 프로그램이 닫히기 때문에 그 부분을 방지하기 위해 Try catch 구문을 통해 그를 방지하였다.

Private Sub Button_MCU_Connection_Click(sender As Object, e As EventArgs) Handles Button_Bootloader_Connection.Click
        Button_Bootloader_Connection.Enabled = False
        Button_SerialPort_Open_Close.Enabled = False
        SerialPort_COM.Write(Arr_Enable_Command, 0, 1)

    End Sub

연결 확인 버튼을 누르면 0x7F 명령어를 MCU에 읽히게 하였다.
Arr_Enable_Command를 0x7F로 선언해주었다.

Private Sub Button_Bootloader_Version_Click(sender As Object, e As EventArgs) Handles Button_Bootloader_Version.Click
        SerialPort_COM.Write(Arr_Version_Command, 0, 2)
        Timer_Bootloader_Version.Enabled = True
        GroupBox_Step3.Enabled = True
        Button_Bootloader_Version.Enabled = False
    End Sub

또한 Bootloader 버전을 보이게 하였고 각 버튼을 누를 때마다 다음 단계로 진행할 수 있게 disable 되어있던 그룹박스들은 Enable 해주었다.

여기까지가 간략하게 코드를 분석 및 수정한 것이고 다음 포스팅에서 이어서 분석 및 수정을 하겠다.

출처: https://m.blog.naver.com/ansdbtls4067/221514185612

profile
처음 접하는 소프트웨어
post-custom-banner

0개의 댓글