안녕하세요. CH341 칩을 이용해서 UART통신을 해보겠습니다.
CH341뿐만아니라 다른 usb to uart 칩이면 사용하는방법은 다르지않습니다.
* 하드웨어 구성
CH341에서 uart통신을 해야하므로 2,3번을 연결해줍니다
CH341과 다른 usb to uart칩을 이용해서 연결을 합니다. (RX, TX, GND)
* 프로그램 구성
사용하는 언어는 C# Winform입니다. C#에서 UART통신은 System.Io.Ports 네임스페이스를 이용하면 됩니다.
대략적인 구성은 위와같습니다. 시리얼 통신 프로그램(테라텀)과 여기서 만드는 프로그램과 통신을 할건데 통신통로는 uart입니다.
* Serial port open하기
Serial port를 선언하고 baudrate, stop bit, com port번호, parity 등등 설정을하고 open함수를 호출하면 됩니다.
uart통신에대한 자세한 설명 :https://wowon.tistory.com/269
이 중에 baudrate만 일반적으로 바꿔서 사용하고 나머지는 자주쓰는 옵션이 있습니다.
(parity : 사용안함, databits : 8bit, stopbits : 1bit)
Serialport에서도 기본설정이 위와같이 되어있습니다. 그래서 프로그램는 baudrate만 설정하게 해놨습니다.
*Serial port write하기
open 이후에 write함수를 호출하면 됩니다. 전달인자는 배열로도 가능하고 string으로도 가능합니다
*Serial port Read하기
Read방식에는 원할때 한번만 읽는 falling 방식과 계속 읽는 interrupt 방식이 있습니다.
falling 방식은 원할때 read를 해주면 됩니다.
interrupt방식은 DataReceived에 이벤트핸들러를 등록하고 거기에서 read함수를 호출하면 됩니다.
*프로그램테스트
UART_TEST 프로그램에서 send를 누르면 teraterm으로 데이터를 보내고, teraterm에서 데이터를 입력하면 UART_TEST가 데이터를 수신합니다.
*소스코드설명(소스코드는 아래쪽에 있습니다)
(1) 업로드한 소스코드에서 Form1.cs는 UI가 있는 코드이고 uart관련코드는 Uart.cs에 클래스를 따로 만들었습니다.
(2) Receive 방식
uart = new Uart(serialPort1,Uart.DataReceiveMode.EventBased);
전달인자로 데이터를 읽을때 falling방식으로 읽을지 interrupt방식으로 읽을지 선택하게 했습니다.
if (_mode == DataReceiveMode.EventBased)
{
_serialPort.DataReceived += SerialPort_DataReceived;
}
interrupt방식일때만 DataReceived이벤트핸들러를 등록합니다.
(3) comport 갱신
comport combobox를 클릭할때마다 port가 갱신되도록 했습니다.
*소스코드(Commits : uart update)
https://github.com/yhunterr/CH341_com_csharp
'각종 CHIP' 카테고리의 다른 글
CH341 칩을 이용해서 UART,I2C,SPI 통신하기 3편(I2C) (0) | 2024.12.22 |
---|---|
CH341 칩을 이용해서 UART,I2C,SPI 통신하기 1편(기본 소개) (0) | 2024.11.23 |
74HC573 알아보기 (0) | 2024.10.20 |
UART TO HID칩 알아보기(CH9329) (1) | 2024.06.02 |
SN74HC04N IC 알아보기 (0) | 2023.03.26 |