HOLTEK HT32 MCU UART 애플리케이션 노트 사용 설명서
HOLTEK HT32 MCU UART 애플리케이션 노트

소개

범용 비동기식 수신기/송신기 – UART는 유연한 비동기식 전이중 데이터 전송을 제공하는 널리 사용되는 직렬 전송 인터페이스입니다. 본 애플리케이션 노트에 제공된 "Module_UART" 애플리케이션 코드는 소프트웨어 링 버퍼와 함께 TX/RX 인터럽트를 사용하여 API를 통해 간단한 UART 송수신 기능을 구현합니다. 관련 기능은 아래에 설명되어 있습니다. 이를 통해 전체 데이터 전송 프로세스가 단순화되고 사용자는 UART 통신 애플리케이션을 빠르게 이해하고 구현할 수 있습니다.

  • 전송/수신 기능: 바이트 읽기, 바이트 쓰기, 버퍼 읽기, 버퍼 쓰기 등
  • 상태 기능: 버퍼 길이, TX 상태 등을 얻습니다.

이 문서에서는 먼저 UART 통신 프로토콜을 소개합니다. 이를 통해 사용자는 원리부터 응용까지 UART 통신을 더 잘 이해할 수 있습니다. 그런 다음 펌웨어 라이브러리, 애플리케이션 코드 다운로드, 애플리케이션 코드 다운로드 등 애플리케이션 코드에 필요한 리소스를 다운로드하고 준비합니다. file 그리고 디렉토리 구성과 애플리케이션 노트에서 사용된 터미널 소프트웨어 도구에 대한 소개도 제공합니다. 기능 설명 장에서 애플리케이션 코드 디렉토리 구조, 매개변수 설정 및 API 설명이 소개됩니다. API 사용은 "Module_UART" 애플리케이션 코드를 사용하여 설명되고 API에 필요한 플래시/RAM 리소스 소비도 나열됩니다. 사용 지침 장은 사용자에게 환경 준비, 컴파일 및 테스트 단계를 안내하여 애플리케이션 코드가 제대로 작동하는지 확인합니다. 그런 다음 API를 사용자 프로젝트에 통합하는 방법을 설명하는 지침을 제공하고 마지막으로 발생할 수 있는 수정 사항 및 일반적인 문제에 대한 참조를 제공합니다.

사용된 약어: 

  • UART: 범용 비동기식 수신기/송신기
  • API: 애플리케이션 프로그래밍 인터페이스
  • LSB: 최하위 비트
  • MSB: 최상위 비트
  • PC: 개인용 컴퓨터
  • SK : 스타터 키트, HT32 개발 보드
  • IDE: 통합 개발 환경

UART 통신 프로토콜

UART는 송신기에서 병렬-직렬 데이터 변환을 구현한 다음 유사한 수신기와 직렬로 통신하는 직렬 통신 유형의 인터페이스입니다. 그러면 수신기는 데이터 수신 후 직렬-병렬 데이터 변환을 수행합니다. 그림 1은 데이터가 비트 순서로 전송되는 방식을 보여주는 직렬 통신의 개략도를 보여줍니다. 따라서 송신기와 수신기 간의 양방향 통신을 위해서는 서로 직렬로 데이터를 전송하는 데 TX와 RX라는 두 개의 전선만 필요합니다. TX는 UART가 직렬 데이터를 전송하는 핀이며 수신기의 RX 핀에 연결됩니다. 따라서 송신기와 수신기 장치는 그림과 같이 UART 양방향 통신을 수행하기 위해 TX 및 RX 핀을 교차 연결해야 합니다. 수치 2.

그림 1. 직렬 통신 다이어그램
직렬 통신 다이어그램

그림 2. UART 회로도
UART 회로도

UART 직렬 통신 중에는 데이터 전송이 비동기식입니다. 이는 송신기와 수신기 사이에 클록이나 기타 동기화 신호가 없음을 의미합니다. 여기서는 시리얼 데이터의 송수신 속도로서 데이터 전송에 앞서 양측에서 설정하는 보드레이트(Baud Rate)를 사용한다. 또한 시작 및 중지 비트와 같은 특수 비트가 데이터 패킷의 시작과 끝에 추가되어 완전한 UART 데이터 패킷을 형성합니다. 그림 3은 UART 데이터 패킷 구조를 보여주고, 그림 4는 패리티 비트가 없는 UART 8비트 데이터 패킷을 보여줍니다.
그림 3. UART 데이터 패킷 구조
UART 데이터 패킷 구조

그림 4. UART 8비트 데이터 패킷 형식
데이터 패킷 형식
UART 데이터 패킷의 각 부분을 아래 순서대로 소개합니다.

  • 시작 비트: 이는 데이터 패킷의 시작을 나타냅니다. UART TX 핀은 일반적으로 전송이 시작되기 전에 높은 논리 수준을 유지합니다. 데이터 전송이 시작되면 UART 송신기는 TX 핀을 높은 수준에서 낮은 수준, 즉 1에서 0으로 끌어올린 다음 한 클럭 사이클 동안 그대로 유지합니다. UART 수신기는 RX 핀에서 높은 수준에서 낮은 수준으로의 전환이 감지되면 데이터 읽기를 시작합니다.
  • 데이터: 이는 7, 8 또는 9비트의 데이터 길이로 전송된 실제 데이터입니다. 데이터는 일반적으로 LSB를 통해 먼저 전송됩니다.
  • 패리티 비트: 데이터의 논리 번호 "1"은 전송 중에 데이터가 변경되었는지 여부를 확인하는 데 사용됩니다. 짝수 패리티의 경우 데이터의 논리 "1"의 전체 개수가 짝수여야 하며, 반대로 홀수 패리티의 경우 데이터의 논리 "1"의 전체 개수가 홀수여야 합니다.
  • 정지 비트: 이는 UART 송신기가 TX 핀을 낮은 수준에서 높은 수준으로, 즉 0에서 1로 끌어온 다음 1비트 또는 2비트 기간 동안 해당 위치에 유지하는 데이터 패킷의 끝을 나타냅니다.

앞서 언급한 것처럼 UART 회로에는 클럭 신호가 없기 때문에 전송 속도(Baud Rate)라고 하는 동일한 직렬 데이터 송수신 속도를 송신기와 수신기 간에 정의해야 오류 없는 전송이 구현됩니다. 전송 속도는 초당 전송되는 비트 수(bps)로 정의됩니다. 일부 표준 및 일반적으로 사용되는 전송 속도는 4800bps, 9600bps, 19200bps, 115200bps 등입니다. 단일 데이터 비트를 전송하는 데 필요한 해당 시간은 다음과 같습니다.
표 1. 전송 속도와 1비트 전송 시간 비교 

전송 속도 1비트 전송 시간
4800bps 208.33마이크로초
9600bps 104.16마이크로초
19200bps 52.08마이크로초
115200bps 8.68마이크로초

리소스 다운로드 및 준비

이 장에서는 사용되는 응용 프로그램 코드와 소프트웨어 도구를 소개하고 디렉토리와 디렉토리를 구성하는 방법을 소개합니다. file 길.

펌웨어 라이브러리 

먼저, 애플리케이션 코드를 사용하기 전에 Holtek HT32 펌웨어 라이브러리가 다운로드되었는지 확인하십시오. 다운로드 링크는 아래와 같습니다. 여기에는 HT32F0xxxx 시리즈의 경우 HT32_M5p_Vyyyymmdd.zip, HT32F3xxxx 시리즈의 경우 HT32_M1_Vyyyymmdd.zip이라는 두 가지 옵션이 있습니다. 원하는 것을 다운로드하고 압축을 푼다. file.

지퍼 file 문서, 펌웨어 라이브러리, 도구 및 기타 항목으로 분류할 수 있는 여러 폴더가 포함되어 있으며 그 배치 경로는 그림 5에 나와 있습니다. HT32 펌웨어 라이브러리 zip file 와 함께 file HT32_STD_xxxxx_FWLib_Vm.n.r_s.zip의 이름은 Firmware_Library 폴더 아래에 있습니다.

그림 5. HT32_M0p_Vyyyymmdd.zip 내용
내용물

애플리케이션 코드
다음 링크에서 애플리케이션 코드를 다운로드하세요. 애플리케이션 코드는 zip으로 패키지되어 있습니다. file 와 함께 file HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip의 이름입니다. 보다 그림 6 를 위해 file 이름 규칙.

그림 6. 애플리케이션 코드 File 이름 소개 

다운로드 링크: https://mcu.holtek.com.tw/ht32/app.fw/Module_UART/ 애플리케이션 코드

File 및 디렉토리 구성
애플리케이션 코드에는 HT32 펌웨어 라이브러리가 포함되어 있지 않으므로 files, 애플리케이션 코드 및 펌웨어 라이브러리의 압축이 풀렸습니다. files는 컴파일을 시작하기 전에 올바른 경로에 배치되어야 합니다. 애플리케이션 코드 우편번호 file 일반적으로 그림 7과 같이 애플리케이션 및 라이브러리와 같은 하나 이상의 폴더를 포함합니다. 애플리케이션 폴더를 HT32 펌웨어 라이브러리 루트 디렉터리 아래에 배치하여 작업을 완료합니다. file 그림 8과 같이 경로 구성을 수행합니다. 또는 애플리케이션 코드와 HT32 펌웨어 라이브러리를 동일한 경로에 동시에 압축을 풀어 동일한 구성 결과를 얻습니다.

그림 7. HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip 내용
내용물

그림 8. 감압 경로
감압 경로

터미널 소프트웨어
애플리케이션 코드는 기능 선택이나 상태 표시를 구현하기 위해 COM 포트를 통해 메시지를 전송할 수 있습니다. 이를 위해서는 호스트 측에 터미널 소프트웨어를 미리 설치해야 합니다. 사용자는 적절한 연결 소프트웨어를 선택하거나 Tera Term과 같은 무료 라이센스 소프트웨어를 사용할 수 있습니다. 애플리케이션 코드에서 UART 채널은 워드 길이 8비트, 패리티 없음, 1 정지 비트 및 115200bps의 전송 속도로 구성됩니다.

기능 설명

이 장에서는 디렉토리 구조, API 아키텍처, 설정 설명 등에 대한 정보를 포함하여 애플리케이션 코드에 대한 기능 설명을 제공합니다.

디렉토리 구조
애플리케이션 코드 file 응용 프로그램 폴더가 포함되어 있습니다. 다음 레이어는 두 개의 응용 프로그램인 "UART_Module_Ex"가 포함된 "Module_UART" 폴더입니다.ample”와 “UART_Bridge”입니다. 관련 file아래에 나열 및 설명되어 있습니다.
표 2. 애플리케이션 코드 디렉터리 구조

폴더 / File 이름 설명
\\application\Module_UART\UART_Module_Example*1
_CreateProject.bat 프로젝트 생성을 위한 배치 스크립트 files
_ProjectSource.ini 초기화 file 프로젝트에 소스 코드를 추가하기 위해
ht32_board_config.h 설정 file IC 주변 장치 I/O 할당과 관련됨
ht32fxxxxx_01_it.c 인터럽트 서비스 프로그램 file
메인.c 주요 프로그램 소스 코드
\\application\Module_UART\UART_Bridge*2
_CreateProject.bat 프로젝트 생성을 위한 배치 스크립트 files
_ProjectSource.ini 초기화 file 프로젝트에 소스 코드를 추가하기 위해
ht32_board_config.h 설정 file IC 주변 장치 I/O 할당과 관련됨
ht32fxxxxx_01_it.c 인터럽트 서비스 프로그램 file
메인.c 메인 프로그램의 소스코드
uart_bridge.h uart_bridge.c UART 브리지 헤더 file 그리고 소스코드 file
\\유틸리티\미들웨어
uart_module.h*3 uart_module.c*3 API 헤더 file 그리고 소스코드 file
\\유틸리티\공통
링버퍼.h 링_버퍼.c 소프트웨어 링 버퍼 헤더 file 그리고 소스코드 file

메모: 

  1. "UART_Module_Ex"에서ample” 애플리케이션 코드에서 API 읽기 및 쓰기 작업은 루프백 방식으로 수행됩니다. “API Usage Ex”를 참조하세요.amp자세한 내용은 les' 섹션을 참조하세요.
  2.  "UART_Bridge" 애플리케이션 코드에서는 UART 채널 0개(UART CH1 및 UART CHXNUMX)가 활성화되고 COMMAND 구조를 통한 사용자 정의 통신 프로토콜이 두 UART 장치 간에 구현됩니다. 자세한 내용은 “API 사용 예”를 참조하세요.amp레” 섹션.
  3. 애플리케이션 코드는 uart_module.c/h를 사용해야 합니다. file펌웨어 라이브러리 버전 요구 사항이 있습니다. 업데이트에 따라 요구사항이 수시로 변경될 수 있습니다. 현재 펌웨어 라이브러리 버전 요구 사항을 확인하려면 main.c에서 "Dependency check" 키워드를 검색하여 종속성 검사 내용을 참조하세요. file. 펌웨어 라이브러리 버전이 요구 사항을 충족하지 않는 경우 "펌웨어 라이브러리" 섹션에 제공된 링크에서 최신 버전을 다운로드하세요.

API 아키텍처
각 API에는 UART 채널인 중요한 매개변수 CH가 있습니다. 이는 제어할 UART 채널을 결정합니다. 현재 최대 4개의 UART 채널을 지원하므로 4개의 상수 기호는 다음과 같이 정의됩니다. 이는 API 제어의 기초를 제공하는 매개변수 CH로 사용됩니다.

  • UARTM_CH0: 입력 매개변수 - UART CH0 제어 또는 구성
  • UARTM_CH1: 입력 매개변수 - UART CH1 제어 또는 구성
  • UARTM_CH2: 입력 매개변수 - UART CH2 제어 또는 구성
  • UARTM_CH3: 입력 매개변수 - UART CH3 제어 또는 구성

UART 채널을 하나만 사용하면 메모리 공간이 낭비되지 않습니다. 지원되는 UART 채널 수를 설정할 수 있고, 사용하지 않는 UART 채널 코드는 전처리기에 의해 제거되어 사용 가능한 메모리 공간이 늘어나기 때문입니다. API 아키텍처는 다음과 같습니다. 그림 9.

그림 9. API 아키텍처 블록 다이어그램
아키텍처 블록 다이어그램

각 API는 UART 채널 관련 설정 또는 제어의 4개 그룹으로 구성되어 있으므로 사용자는 원하는 CH 매개변수만 입력하면 됩니다. 관련 API를 구성하려면 USART_InitTypeDef 구조 형식의 추가 UART 기본 구성 매개변수 테이블만 있으면 됩니다. API는 표의 매개변수 내용에 따라 UART 기본 구성을 구현합니다. UART 기본 구성 구조 표는 “API 설명” 섹션을 참조하세요.

uart_module.c/.h files에는 각 UART 채널의 인터럽트(CHx_IRQ) ​​및 상태 테이블(CHx Status)만 포함되며 UART 통신에 필요한 모든 설정은 ht32_board_config.h에서 제공됩니다. ht32_board_config.h의 하드웨어 관련 매개변수 file 아래 표에 나와 있습니다. 자세한 내용은 "설정 설명" 섹션에 나와 있습니다.

ht32_board_config.h의 하드웨어 관련 매개변수에는 다음과 같이 I/O 설정 및 물리적 UART 포트 설정이 포함됩니다.

표 3. ht32_board_config.h의 정의 기호

상징 설명
HTCFG_UARTM_CH0 물리적 UART 포트 이름. 전amp르: UART0, UART1…
HTCFG_UARTM0_TX_GPIO_PORT CH0에 대한 TX의 포트 이름을 정의합니다. 전amp르: A, B, C…
HTCFG_UARTM0_TX_GPIO_핀 CH0에 대한 TX의 핀 번호를 정의합니다. 전amp르: 0~15
HTCFG_UARTM0_RX_GPIO_PORT CH0에 대한 RX의 포트 이름을 정의합니다. 전amp르: A, B, C…
HTCFG_UARTM0_RX_GPIO_PIN CH0에 대한 TX의 핀 번호를 정의합니다. 전amp르: 0~15
HTCFG_UARTM0_TX_BUFFER_SIZE CH0에 대한 TX 버퍼 크기를 정의합니다. 예amp르: 128
HTCFG_UARTM0_RX_BUFFER_SIZE CH0의 RX 버퍼 크기를 정의합니다. 전amp르: 128

UART 채널 AFIO 구성을 수정하려면 관련 장치 데이터시트를 참조하세요. 현재 ht0_board_config.h에는 UART CH0만 구성되어 있으므로 UART CH32에 대한 I/O 정의만 적용됩니다. UART CH1~3을 추가하려면 UART CH0 정의를 참조하거나 "설정 수정 및 FAQ" 섹션을 참조하여 해당 I/O 정의를 완료해야 합니다.

API 아키텍처에는 세 가지 주요 기능이 있습니다. 

  1. 최대 0개의 UART 채널이 지원됩니다. 입력 매개변수는 UARTM_CH1, UARTM_CH2, UARTM_CH3 및 UARTM_CHXNUMX입니다.
  2.  UART 채널 수를 설정할 수 있으며, 사용하지 않는 채널로 인해 사용 가능한 메모리 공간이 줄어들지 않습니다.
  3. 모든 UART 설정과 I/O 정의는 API와 완전히 분리되어 있습니다. 이는 설정 값의 관리 편의성을 높이고 설정이 잘못되거나 누락될 가능성을 줄입니다.

설정 설명 

이 섹션에서는 ht32_board_config.h 및 uart_module.h의 매개변수 설정을 소개합니다. files.

  1. ht32_board_config.h: 이 file 스타터 키트(SK)에서 사용되는 UART IP 채널(UART0, UART1, USART0…), 해당 TX/RX 핀 위치 및 TX/RX 버퍼 크기를 포함하는 핀 정의 및 개발 보드 관련 설정에 사용됩니다. 그림 10은 HT32F52352 스타터 키트의 설정 내용을 보여줍니다. 개발의 기능 통합에 따라 사용자는 사용된 장치의 데이터시트의 "핀 할당" 섹션을 참조하여 핀 정의를 구현할 수 있습니다. 설정 수정에 대한 자세한 내용은 "설정 수정 및 FAQ" 섹션에서 설명합니다.
    그림 10. ht32_board_config.h 설정(HT32F52352)
    설정
  2. uart_module.h: API 헤더입니다 file 관련 기본 설정, 함수 정의 등을 포함하는 애플리케이션 코드에서 사용됩니다. 그림 11에 표시된 것처럼 기본 설정 내용은 ht32_board_config.h의 설정과 같은 외부 구성으로 덮어쓸 수 있습니다. file.
    그림 11. uart_module.h의 기본 설정
    기본 설정
API 설명
  1. 애플리케이션 코드 데이터 유형 설명.
    • USART_InitTypeDef
      이는 아래와 같이 BaudRate, WordLength, StopBits, Parity 및 Mode 구성으로 구성된 UART 기본 구성 구조입니다.
      변하기 쉬운 이름 유형 설명
      USART_BaudRate 유32 UART 통신 전송 속도
      USART_단어 길이 유16 UART 통신 단어 길이: 7, 8 또는 9비트
      USART_StopBits 유16 UART 통신 정지 비트 길이: 1 또는 2비트
      USART_패리티 유16 UART 통신 패리티: 짝수, 홀수, 마크, 공백 또는 패리티 없음
      USART_모드 유16 UART 통신 모드; API는 일반 모드만 지원합니다.
  2. API 기능을 사용하기 전에 메인 프로그램에서 UART 기본 구성을 완료하세요. 이 애플리케이션 코드에 대한 UART 기본 구성은 그림 12에 나와 있습니다. 여기서 전송 속도는 115200bps, 워드 길이는 8비트, 정지 비트 길이는 1비트이며 패리티가 없습니다.
    그림 12. UART 기본 구성
    기본 구성
  3. 그림 13은 uart_module.h에 선언된 API 함수를 보여줍니다. file. 다음 표에서는 API 함수의 기능, 입력 매개변수 및 사용법을 설명합니다.
    그림 13. uart_module.h의 API 함수 선언 
    API 함수 선언
이름 무효 UARTM_Init(u32 CH, USART_InitTypeDef *pUART_Init, u32 uRxTimeOutValue)
기능 UART 모듈 초기화
  입력 CH UART 채널
pUART_Init UART 기본 구성 구조 포인터
 uRxTimeOut값 UART RX FIFO 시간 초과 값입니다. RX FIFO가 새 데이터를 수신하면 카운터가 재설정되고 다시 시작됩니다. 카운터가 미리 설정된 시간 초과 값에 도달하고 해당 시간 초과 인터럽트가 활성화되면 시간 초과 인터럽트가 생성됩니다.
 용법 UARTM_Init(UARTM_CH0, &USART_InitStructure, 40);//UART 기본 구성 실행//USART_InitStructure 구성은 그림 12를 참조하세요.
이름 u32 UARTM_WriteByte(u32 CH, u8 uData)
기능 UART 모듈 쓰기 바이트 작업(TX)
입력 CH UART 채널
u데이터 쓸 데이터
산출 성공 성공적인
오류 실패한
용법 UARTM_WriteByte(UARTM_CH0, 'A'); //UART는 1바이트를 씁니다 – 'A'
이름 u32 UARTM_Write(u32 CH, u8 *pBuffer, u32 uLength)
기능 UART 모듈 쓰기 작업(TX)
 입력 CH UART 채널
p버퍼 버퍼 포인터
길이 기록할 데이터의 길이
산출 성공 성공적인
오류 실패한
 용법 u8 Test[] = “이것이 테스트입니다!\r\n”; UARTM_Write(UARTM_CH0, Test, sizeof(Test) -1); //UART가 pBuffer 데이터를 씁니다.
이름 u32 UARTM_ReadByte(u32 CH, u8 *pData)
기능 UART 모듈 읽기 바이트 작업(RX)
입력 CH UART 채널
p데이터 읽은 데이터를 저장할 주소
산출 성공 성공적인
오류 실패(데이터 없음)
   용법 u8 임시 데이터; if (UARTM_ReadByte(UARTM_CH0, &TempData) == SUCCESS){UARTM_WriteByte(UARTM_CH0, TempData);}//UARTM_ReadByte()가 SUCCESS를 반환하면 UART는 이 데이터 바이트를 씁니다.
이름 u32 UARTM_Read(u32 CH, u8 *pBuffer, u32 uLength)
기능 UART 모듈 읽기 작업(RX)
 입력 CH UART 채널
p버퍼 버퍼 포인터
길이 읽어올 데이터의 길이
산출 읽기 횟수 읽은 데이터의 길이
     용법 u8 테스트2[10]; u32 렌; Len = UARTM_Read(UARTM_CH0, Test2, 5);if (Len > 0){UARTM_Write(UARTM_CH0, Test2, Len);}//UARTM_Read()는 5바이트의 데이터를 읽어 Test2에 데이터를 저장하고 읽은 바이트 수를 할당합니다. Len에게 //Test2에서 가져온 데이터 쓰기
이름 유32 UARTM_GetReadBufferLength(u32 CH)
기능 읽기 버퍼 길이(RX) 얻기
입력 CH UART 채널
산출 길이 읽기 버퍼 길이
  용법 UARTM_Init(UARTM_CH0, &USART_InitStructure, 40); //UART 모듈 초기화 while (UARTM_GetReadBufferLength(UARTM_CH0) < 5);//UARTM_ReadBuffer가 5바이트의 데이터를 수신할 때까지 대기
이름 유32 UARTM_GetWriteBufferLength(u32 CH)
기능 쓰기 버퍼 길이(TX) 얻기
입력 CH UART 채널
산출 길이 쓰기 버퍼 길이
이름 u8 UARTM_IsTx완료(u32 CH)
기능 TX 상태 얻기
입력 CH UART 채널
산출 진실 TX 상태: 완료
거짓 TX 상태: 완료되지 않음
      용법 UARTM_WriteByte(UARTM_CH0, 'O'); #if 1 // "uart_module.c" SVN >= 525 필수while (UARTM_IsTxFinished(UARTM_CH0) == FALSE) #elsewhile (1) #endif //이 API는 위에 표시된 것처럼 TX 상태를 확인하는 데 사용할 수 있습니다. UARTM_WriteByte() API가 완료될 때까지, 즉 TX 상태가 TRUE가 될 때까지 기다린 후 후속 작업을 계속합니다.//uart_module.c의 SVN 버전 번호가 525가 될 때까지 이 함수가 추가되지 않았기 때문에 제한이 추가됩니다.
이름 무효의 UARTM_DiscardReadBuffer(u32 CH)
기능 읽기 버퍼의 데이터를 삭제합니다.
입력 CH UART 채널

API 사용 예시amp레 

이 섹션에서는 API 쓰기 및 읽기 예제를 보여줍니다.amp초기화 프로세스를 사용하는 "Module_UART" 애플리케이션 코드 파일과 "UART_Module_Ex"ample” 애플리케이션 코드 프로세스. API를 사용하기 전에 사용자는 API 헤더를 포함해야 합니다. file 메인 프로그램 소스 코드에 file (#include “middleware/uart_module.h”).

그림 14에서 보듯이 초기화 프로세스에 들어갈 때 먼저 UART 기본 구성 구조를 정의합니다. 그런 다음 BaudRate, WordLength, StopBits, Parity 및 Mode를 포함한 UART 기본 구성 구조 멤버를 구성합니다. 마지막으로 API 초기화 함수를 호출합니다. 이 함수가 완료되면 초기화 프로세스가 종료됩니다. 그런 다음 사용자는 사전 설정된 UART 기본 구성에 따라 쓰기 및 읽기 작업을 계속할 수 있습니다.

그림 14. 초기화 흐름도
초기화 흐름도

"UART_Module_Example” 애플리케이션 코드는 루프백 방식으로 API 읽기 및 쓰기 작업을 보여줍니다. 이에 대한 흐름도는 그림 15에 나와 있습니다. 사용된 API 함수에는 UARTM_WriteByte(), UARTM_Write(), UARTM_ReadByte(), UARTM_Read() 및 UARTM_GetReadBufferLength()가 있습니다. 이에 대한 설명은 “API 설명” 섹션에 제공됩니다.

그림 15. 쓰기 및 읽기 순서도 Examp레
쓰기 및 읽기 순서도 Examp레

"Module_UART" 폴더 아래에는 또 다른 "UART_Bridge" 애플리케이션 코드가 있습니다. file 설명은 "디렉토리 구조" 섹션에 소개되어 있습니다. "UART_Bridge" 애플리케이션 코드는 두 개의 UART 채널인 UART CH0 및 UART CH1을 활성화한 다음 COMMAND 구조인 gCMD1 및 gCMD2를 통해 두 UART 장치 간의 통신 프로토콜을 사용자 정의합니다. 이는 아래와 같이 uart_bridge.c에 정의되어 있습니다. UARTBridge_CMD1TypeDef gCMD1:

변하기 쉬운 이름 유형 설명
u헤더 u8 헤더
uCmd u8 명령
유데이터[3] u8 데이터

UARTBridge_CMD2TypeDef gCMD2:

변하기 쉬운 이름 유형 설명
u헤더 u8 헤더
uCmdA u8 명령 A
uCmdB u8 명령 B
유데이터[3] u8 데이터

“UART_Bridge” 애플리케이션 코드에서는 gCMD1을 이용해 데이터를 명령 패킷으로 받아 분석한다. 그런 다음 사용자 정의된 통신 프로토콜에 따라 gCMD2를 응답 패킷으로 설정하여 전송합니다. 다음은 전직이다amp명령 패킷 gCMD1)과 응답 패킷(gCMD2)의 파일입니다. 명령 패킷(UARTBridge_CMD1TypeDef gCMD1):

바이트 0 바이트 1 바이트 2 ~ 바이트 4
u헤더 uCmd 유데이터 [3]
"에이" “1” “x, y, z”

응답 패킷(UARTBridge_CMD2TypeDef gCMD2):

바이트 0 바이트 1 바이트 2 바이트 3 ~ 바이트 5
u헤더 uCmdA uCmdB 유데이터 [3]
"비" "에이" “1” “x, y, z”

자원 직업
HT32F52352를 예로 들면서amp파일에서 UART 모듈이 차지하는 리소스는 아래와 같습니다.

HT32F52352
롬 크기 946바이트
RAM 크기 40*1 + 256*2 바이트

메모:

  1. 단일 채널의 플래그 및 상태를 포함한 전역 변수는 40바이트의 RAM을 차지합니다.
  2.  이는 단일 채널을 사용하고 TX/RX 버퍼 크기가 128/128바이트인 조건에 대한 것입니다. 버퍼 크기는 애플리케이션 요구 사항에 따라 설정할 수 있습니다.

표 4. 애플리케이션 코드 자원 점유 

  • 컴파일 환경: MDK-Arm V5.36, ARMCC V5.06 업데이트 7(빌드 960)
  • 최적화 옵션: 레벨 2(-O2)

사용 설명서

이 장에서는 “Module_UART” 애플리케이션 코드에 대한 환경 준비와 컴파일 및 테스트 단계를 소개합니다.

환경 준비
“Module_UART” 애플리케이션 코드에 필요한 하드웨어 및 소프트웨어는 다음과 같습니다.
표 5. 하드웨어/소프트웨어 환경 준비 

하드웨어/소프트웨어 세다 메모
스타터 키트 1 이 애플리케이션 노트에서는 HT32F52352 스타터 키트를 예시로 사용합니다.ample
USB 케이블 1 마이크로 USB, PC에 연결
애플리케이션 코드 다운로드 경로, file 및 디렉터리 구성은 "리소스 다운로드 및 준비" 섹션에 소개되어 있습니다. 경로: "\\application\Module_UART\UART_Module_Examp그만큼"
테라 텀 "터미널 소프트웨어" 섹션을 참조하세요.
케일 IDE Keil uVision V5.xx

먼저 UART 애플리케이션 소개를 위해 e-Link32 Lite의 가상 COM 포트(VCP) 기능과 결합된 HT52352F32 스타터 키트를 사용하세요. 이를 위해서는 다음과 같은 환경 준비가 구현되어야 합니다.

  1. 보드에는 두 개의 USB 인터페이스가 있습니다. 그림 32-(a)와 같이 USB 케이블을 사용하여 PC와 보드의 eLink16 Lite 인터페이스를 연결합니다.
  2. 애플리케이션 코드는 e-Link32 Lite 가상 COM 포트(VCP) 기능을 사용해야 하므로 UART Jumper-J2*2의 PAx*1 및 DAP_Tx가 점퍼를 사용하여 단락되었는지 확인하십시오. J2 위치는 그림 16-(b)에 표시되어 있습니다.

메모

  1. 스타터 키트의 J2에는 PAx 및 DAP_Tx 단락 또는 PAx 및 RS232_Tx 단락의 두 가지 옵션이 있습니다. 자세한 설정 기능은 스타터 키트 사용 설명서를 참조하세요.
  2. 다양한 스타터 키트의 MCU UART RX 핀 위치는 다릅니다. 이 전ample는 PAx를 사용하여 RX 핀을 나타냅니다.

그림 16. HT32 스타터 키트 블록 다이어그램
키트 블록 다이어그램

이제 UART 애플리케이션 소개를 위해 e-Link32 Pro의 가상 COM 포트(VCP) 기능과 결합된 사용자 타겟 보드를 사용하세요. 이를 위해서는 다음과 같은 환경 준비가 구현되어야 합니다.

  1. e-Link32 Pro의 한쪽은 미니 USB 케이블을 사용해 PC에 연결되고, 다른 한쪽은 10비트 회색 케이블을 통해 사용자 타겟 보드에 연결된다. 케이블의 SWD 인터페이스와 타겟 보드 간의 연결은 그림 17-(a)와 같이 Dupont 라인을 사용하여 구현됩니다.
  2. e-Link32 Pro의 직렬 통신 핀은 Pin#7 VCOM_RXD 및 Pin#8-VCOM_TXD입니다. 이는 그림 17-(b)와 같이 사용자 타겟 보드의 TX 및 RX 핀에 연결되어야 합니다.
    그림 17. e-Link32 Pro + 사용자 대상 보드 블록 다이어그램
    사용자 타겟 보드

컴파일 및 테스트
이 섹션에서는 “application\Module_UART\UART_Module_Ex”를 사용합니다.amp르” 전 애인으로amp컴파일 및 테스트 프로세스를 소개합니다. 그 전에 이전 섹션에서 설명한 모든 준비가 구현되었는지, Tera Term 터미널 소프트웨어가 다운로드되었는지 확인하십시오.

자세한 작업 단계는 아래에 요약되어 있습니다.
1단계. 전원 켜기 테스트

이전 섹션에서 설명한 대로 하드웨어 환경을 설정합니다. 전원을 켜면 스타터 키트 왼쪽 하단에 있는 D9 전원 LED가 켜집니다. USB 열거가 ​​완료된 후 오른쪽 상단 e-Link1 Lite의 D32 USB LED가 켜집니다. 오랜 시간이 지나도 D1이 켜지지 않으면 USB 케이블이 통신할 수 있는지 확인하십시오. 그렇지 않은 경우 제거하고 다시 삽입하십시오.

2단계. 프로젝트 생성
애플리케이션\Module_UART\UART_Module_Ex를 엽니다.amp파일 폴더에서 _CreateProject.bat를 클릭하세요. file 그림 18과 같이 프로젝트를 생성합니다. 이 애플리케이션 노트는 HT32F52352 스타터 키트를 사용하므로 MDK_ARMv52352 폴더 아래에 있는 Keil IDE 프로젝트 "Project_5.uvprojx"를 엽니다.

그림 18. _CreateProject.bat를 실행하여 프로젝트 생성
프로젝트 생성

3단계. 컴파일 및 프로그래밍
프로젝트가 열린 후 먼저 “빌드”를 클릭(또는 단축키 “F7” 사용)한 다음 “다운로드”를 클릭(또는 단축키 “F8” 사용)하십시오. 이후 빌드 및 다운로드 결과가 빌드 출력 창에 표시됩니다. 그림 19를 참조하세요.

그림 19. 결과 빌드 및 다운로드
결과 작성 및 다운로드

4단계. Tera Term 소프트웨어를 열고 직렬 포트를 구성하십시오.
Tera Term 소프트웨어와 COM 포트를 엽니다. Starter Kit에서 생성된 COM 포트 번호가 올바른지 주의하세요. 그런 다음 "Setup >> Serial Port"를 클릭하여 구성 인터페이스로 들어갑니다. "Module_UART" 애플리케이션 코드의 UART 인터페이스 구성은 "Terminal Software" 섹션에 설명되어 있습니다. 설정 결과는 그림 20에 나와 있습니다.

그림 20. Tera Term 직렬 포트 설정 결과
설정 결과
5단계. 시스템 재설정 및 테스트
SK 재설정 키 - B1 재설정을 누릅니다. 그 후 "ABCThis is test!" 메시지는 다음과 같습니다
그림 21과 같이 API를 통해 전송되고 Tera Term 창에 표시됩니다. 수신 기능과 관련하여 Tera Term 창에 데이터를 입력할 때 관련 API를 사용하여 수신 버퍼 길이를 결정합니다. PC에서 수신한 데이터가 5바이트에 도달하면 수신한 5바이트의 데이터를 순차적으로 전송합니다. 그림 22에 나타난 바와 같이, 순차적으로 입력되는 데이터는 “1, 2, 3, 4, 5”이며, 이는 API를 통해 수신되어 결정된다. 이후 1번의 입력 후에 데이터 "2, 3, 4, 5, XNUMX"가 인쇄됩니다.

그림 21. “Module_UART” 애플리케이션 코드 기능 테스트 - 전송
애플리케이션 코드 기능 테스트

그림 22. “Module_UART” 애플리케이션 코드 기능 테스트 - 수신
애플리케이션 코드 기능 테스트

이식 지침
이 섹션에서는 API를 사용자 프로젝트에 통합하는 방법을 소개합니다.
1단계. uart_module.c를 추가하세요. file 프로젝트에. 사용자 폴더를 마우스 오른쪽 버튼으로 클릭하세요. '기존 항목 추가'를 선택하세요. Files를 그룹 'User'…”로 지정한 다음 uart_module.c를 선택합니다. file 그림 23과 같이 "추가"를 클릭합니다. 자세한 내용은 "디렉터리 구조" 섹션을 참조하세요. file 경로 설명.

그림 23. uart_module.c 추가 File 투사하다
File 투사하다

2단계. ring_buffer.c를 추가하세요. file 프로젝트에. 사용자 폴더를 마우스 오른쪽 버튼으로 클릭하세요. '기존 항목 추가'를 선택하세요. Files를 그룹 'User'…”로 지정한 다음 ring_buffer.c를 선택합니다. file 그림 24와 같이 "추가"를 클릭합니다.\ "디렉터리 구조" 섹션을 참조하세요. file 경로 설명.
그림 24. ring_buffer.c 추가 File 투사하다 
File 투사하다

3단계. API 헤더 포함 file 그림 25와 같이 main.c의 시작 부분에 추가합니다. (Ext: #include “middleware/uart_module.h”)
그림 25. API 헤더 포함 File main.c로
API 헤더 포함 File

4단계. ht32_board_config.h를 사용하여 UART 통신에 필요한 설정을 구현합니다. file. 이에 대해서는 "설정 설명" 및 "설정 수정 및 FAQ" 섹션에서 자세히 소개됩니다.

설정 수정 및 FAQ 

이 섹션에서는 UART 설정을 수정하는 방법을 소개하고 사용 중에 발생하는 몇 가지 일반적인 질문에 대해 설명합니다.

UART 핀 할당 변경 

  1. HT32F52352 데이터시트 "핀 할당" 장을 참조하여 장치 유형의 AFIO 기능을 나열하는 대체 기능 매핑 표를 찾아보세요. UART 관련 핀에 대해서는 그림 6과 같이 "AF26 USART/UART" 열을 참조하세요.
    그림 26. HT32F52352 대체 기능 매핑 테이블
    대체 기능 매핑 테이블
  2. 이 단계에서는 사용자가 위 표를 사용하여 해당 UART 핀을 찾을 수 있도록 안내합니다. HT32F52352 examp파일은 USART1을 기본 채널로 사용합니다. 여기서 TX 및 RX 핀은 USR1_TX 및 USR1_RX이며 각각 PA4 및 PA5에 있습니다. 그림 27은 "ht32_board_config.h"의 핀 정의와 핀 대응을 보여줍니다. 핀 할당 테이블에서 "패키지"의 빈 필드는 이 패키지에 관련 GPIO가 없음을 의미합니다. UART 핀을 수정하려면 대상 핀 위치를 찾고 "ht32_board_config.h"를 사용하여 핀을 다시 정의하십시오. file.
    그림 27. 핀 대응 및 설정 수정
    설정 수정

UART 채널 추가
HT32F52352 HTCFG_UARTM_CH1을 예로 사용amp파일, 여기에는 새로운 UART 채널을 추가하는 방법이 설명되어 있습니다.

ht32_board_config.h 수정 file
HT32F52352 데이터시트 "핀 할당" 장을 참조하여 장치 유형의 AFIO 기능을 나열하는 대체 기능 매핑 표를 찾아보세요. USART1은 HTCFG_UARTM_CH0으로 사용되었으므로 새로 추가된 HTCFG_UARTM_CH1은 USART0을 선택할 수 있습니다. 여기서 TX 및 RX 핀은 그림 2의 상단과 같이 각각 PA3 및 PA28에 있습니다. 해당 수정 사항은 그림의 빨간색 점선 상자에 표시된 것처럼 ht120_board_config.h의 코드 라인 126~32을 사용하여 구현됩니다. 28.

그림 28. UART 채널 추가
UART 채널

자주 묻는 질문
Q: 컴파일 및 테스트 섹션의 5단계에서 전송 기능 테스트는 정상입니다. 여기에 "ABCThis is test!" 메시지가 성공적으로 표시되었지만 수신 기능의 경우 XNUMX개의 입력 값이 반환되지 않고 표시되지 않는 이유는 무엇입니까?
A: 점퍼를 사용하여 UART Jumper-J2의 MCU UART RX 및 DAP_Tx 핀이 단락되었는지 확인합니다. "Module_UART" 애플리케이션 코드는 e-Link32 Lite의 가상 COM 포트(VCP)를 사용해야 하므로 단락 회로 설정은 그림 2와 같이 UART Jumper-J29의 왼쪽 두 핀에 적용해야 합니다.

그림 29. UART 점퍼-J2 설정
UART 점퍼

Q:이후 "빌드"(또는 단축키 "F7")를 실행하면 펌웨어 라이브러리 버전이 필요한 버전보다 오래되었다는 오류 메시지가 나타납니까? 그림 30을 참조하세요.
A: "Module_UART" 애플리케이션 코드의 구현에는 uart_module.c/h가 포함되어야 합니다. file특정 펌웨어 라이브러리 버전에 대한 요구 사항이 있습니다. 이러한 오류 메시지가 나타나면 현재 사용하는 펌웨어 라이브러리가 이전 버전이라는 의미입니다. 따라서 “펌웨어 라이브러리” 섹션에 제공된 링크를 통해 최신 버전을 다운로드해야 합니다.

그림 30. 펌웨어 라이브러리 버전 오류 메시지
버전 오류 메시지

결론

이 문서에서는 사용자가 "Module_UART" 애플리케이션 코드와 UART 통신 프로토콜을 더 잘 이해할 수 있도록 기본적인 소개를 제공했습니다. 이어서 리소스 다운로드 및 준비가 이어졌습니다. 기능 설명 장에서는 다음을 소개했습니다. file 디렉토리 구조, API 아키텍처, API 설명 및 API 사용법 examp레. 사용 지침 장에서는 "Module_UART" 애플리케이션 코드의 환경 준비, 컴파일 및 테스트를 보여주었습니다. 또한 코드 이식 및 수정 설정에 대한 지침을 제공하고 발생할 수 있는 몇 가지 일반적인 문제를 설명했습니다. 이 모든 것이 결합되어 사용자는 API 사용 방법을 빠르게 이해하고 결과적으로 시작하는 데 걸리는 시간을 줄일 수 있습니다.

참고 자료

자세한 내용은 홀텍을 참고하세요. web사이트: www.holtek.com

버전 및 수정 정보

날짜 작가 풀어 주다 수정 정보
2022.04.30 蔡期育(치유 차이) V1.00 첫 번째 버전

부인 성명

여기에 표시되는 모든 정보, 상표, 로고, 그래픽, 비디오, 오디오 클립, 링크 및 기타 항목 web사이트('정보')는 참고용이며 Holtek Semiconductor Inc. 및 관련 회사(이하 'Holtek', '회사', '당사', ' 우리' 또는 '우리'). Holtek이 이에 대한 정보의 정확성을 보장하기 위해 노력하는 동안 web사이트에서 Holtek은 정보의 정확성에 대해 어떠한 명시적 또는 묵시적 보증도 제공하지 않습니다. Holtek은 부정확하거나 누출에 대해 책임을 지지 않습니다.
Holtek은 이 제품의 사용 또는 사용과 관련하여 발생하는 모든 손해(컴퓨터 바이러스, 시스템 문제 또는 데이터 손실을 포함하되 이에 국한되지 않음)에 대해 책임을 지지 않습니다. web모든 당사자에 의해 사이트. 이 영역에는 다음을 방문할 수 있는 링크가 있을 수 있습니다. web다른 회사의 사이트.
이것들 web사이트는 Holtek에서 제어하지 않습니다. Holtek은 그러한 사이트에 표시되는 정보에 대해 책임을 지지 않으며 어떠한 보증도 하지 않습니다. 다른 하이퍼링크 web사이트는 귀하의 책임입니다.

책임의 한계

어떤 경우에도 Holtek Limited는 귀하의 본 액세스 또는 사용과 관련하여 직간접적으로 발생한 손실이나 손해에 대해 다른 당사자에게 책임을 지지 않습니다. web사이트, 그 콘텐츠 또는 상품, 자료 또는 서비스.

준거법
에 포함된 면책 조항 web사이트는 중화민국 법률에 따라 규율되고 해석됩니다. 사용자는 중화민국 법원의 비독점적 관할권에 따를 것입니다.

면책 조항 업데이트
Holtek은 사전 통지 여부에 관계없이 언제든지 면책 조항을 업데이트할 권리가 있으며 모든 변경 사항은 게시되는 즉시 효력이 발생합니다. web대지.

문서 / 리소스

HOLTEK HT32 MCU UART 애플리케이션 노트 [PDF 파일] 사용자 매뉴얼
HT32 MCU, UART 애플리케이션 노트, HT32 MCU UART, 애플리케이션 노트, HT32, MCU UART 애플리케이션 노트, HT32 MCU UART 애플리케이션 노트

참고문헌

댓글을 남겨주세요

이메일 주소는 공개되지 않습니다. 필수 항목은 표시되어 있습니다. *