HOLTEK HT32 MCU UART Application Note Manual de usuario
Nota de aplicación HOLTEK HT32 MCU UART

Introdución

O receptor/transmisor asíncrono universal - UART é unha interface de transmisión en serie amplamente utilizada que ofrece transmisión de datos full-duplex asíncrona flexible. O código de aplicación "Module_UART" proporcionado nesta nota da aplicación usa interrupcións TX/RX con búfers de anel de software para implementar funcións sinxelas de transmisión/recepción UART a través de API, cuxas funcións relacionadas se describen a continuación. Isto simplificará todo o proceso de transmisión de datos e permitirá aos usuarios comprender e implementar rapidamente as aplicacións de comunicación UART.

  • Funcións de transmisión/recepción: lectura de bytes, escritura de bytes, lectura de búfer, escritura de búfer, etc.
  • Funcións de estado: obter a lonxitude do buffer, o estado TX, etc.

Este documento presentará primeiro o protocolo de comunicación UART, que axudará aos usuarios a comprender mellor a comunicación UART desde o principio ata a aplicación. Isto é seguido pola descarga e preparación dos recursos necesarios para o código da aplicación, incluíndo a biblioteca de firmware, a descarga do código da aplicación, file e configuración do directorio, así como unha introdución á ferramenta de software do terminal utilizada na nota da aplicación. No capítulo Descrición funcional, presentarase a estrutura do directorio do código da aplicación, a configuración dos parámetros e a descrición da API. O uso da API describirase mediante o código de aplicación "Module_UART" e tamén se enumerará o consumo de recursos Flash/RAM necesarios para as API. O capítulo de Instrucións de uso guiará ao usuario nos pasos de preparación ambiental, compilación e proba para confirmar que o código da aplicación funcionará correctamente. A continuación, proporcionará instrucións que explican como integrar as API nos proxectos do usuario e, finalmente, proporcionará unha referencia para as modificacións e problemas comúns que se poidan atopar.

Abreviaturas empregadas: 

  • UART: Receptor/Transmisor asíncrono universal
  • API: Interfaz de programación de aplicacións
  • LSB: Bit menos significativo
  • MSB: Bit máis significativo
  • PC: Ordenador persoal
  • SK: Kit de inicio, placa de desenvolvemento HT32
  • IDE: Entorno de Desenvolvemento Integrado

Protocolo de comunicación UART

O UART é un tipo de interface de comunicación en serie que implementa a conversión de datos paralelo a serie no seu transmisor e despois se comunica en serie cun receptor similar. Despois da recepción de datos, o receptor realiza unha conversión de datos de serie a paralelo. A figura 1 mostra un diagrama esquemático da comunicación en serie que mostra como se transfiren os datos nunha orde bit a bit. Polo tanto, para a comunicación bidireccional entre o transmisor e o receptor, só son necesarios dous cables, TX e RX, para transferir datos en serie entre si. TX é o pin no que o UART transmite os datos en serie e está conectado ao pin RX do receptor. Polo tanto, os dispositivos transmisor e receptor necesitan conectar os seus pines TX e RX para realizar comunicación bidireccional UART, como se mostra en Figura 2.

Figura 1. Diagrama de comunicación en serie
Diagrama de comunicación en serie

Figura 2. Diagrama de circuíto UART
Diagrama de circuíto UART

Durante a comunicación en serie UART, a transmisión de datos é asíncrona. Isto significa que non hai ningún reloxo nin outro sinal de sincronización entre o transmisor e o receptor. Aquí utilízase unha velocidade en baudios, que é a velocidade de transmisión/recepción de datos en serie e que se establecen por ambos os dous lados antes das transferencias de datos. Ademais, engádense bits especiais como os bits de inicio e de parada ao principio e ao final do paquete de datos para formar un paquete de datos UART completo. A Figura 3 mostra a estrutura do paquete de datos UART mentres que a Figura 4 mostra un paquete de datos UART de 8 bits sen un bit de paridade.
Figura 3. Estrutura do paquete de datos UART
Estrutura do paquete de datos UART

Figura 4. Formato de paquete de datos UART de 8 bits
Formato de paquete de datos
Cada parte do paquete de datos UART introdúcese na orde a continuación.

  • Bit de inicio: Isto indica o inicio dun paquete de datos. O pin UART TX adoita permanecer nun nivel lóxico alto antes de que comece a transmisión. Se se inicia a transmisión de datos, o transmisor UART tirará o pin TX de alto a baixo, é dicir, de 1 a 0, e despois manterao alí durante un ciclo de reloxo. O receptor UART comezará a ler datos cando se detecte unha transición alta a baixa no pin RX.
  • Datos: Estes son os datos reais transferidos, cunha lonxitude de datos de 7, 8 ou 9 bits. Os datos adoitan transferirse primeiro co LSB.
  • Bit de paridade: O número de lóxica "1" dos datos úsase para determinar se algún dato cambiou durante a transmisión. Para a paridade par, o número total de lóxica "1" nos datos debe ser un número par, pola contra, o número total de lóxica "1" nos datos debe ser un número impar para a paridade impar.
  • Bit de parada: Isto indica o final dun paquete de datos, onde o transmisor UART tirará o pin TX de baixo a alto, é dicir, de 0 a 1, e despois mantelo alí durante un período de tempo de 1 ou 2 bits.

Como se mencionou anteriormente, dado que non hai sinal de reloxo no circuíto UART, a mesma velocidade de transmisión/recepción de datos en serie, que se coñece como velocidade en baudios, debe definirse entre o transmisor e o receptor para implementar unha transmisión sen erros. A velocidade en baudios defínese polo número de bits transferidos por segundo, en bps (bit por segundo). Algunhas velocidades en baudios estándar e de uso habitual son 4800bps, 9600bps, 19200bps, 115200bps, etc. A continuación móstrase o tempo correspondente necesario para transferir un único bit de datos.
Táboa 1. Velocidade en baudios fronte ao tempo de transmisión de 1 bit 

Velocidade en baudios Transmisión de 1 bit Tempo
4800 bps 208.33 µs
9600 bps 104.16 µs
19200 bps 52.08 µs
115200 bps 8.68 µs

Descarga e preparación de recursos

Neste capítulo presentarase o código da aplicación e a ferramenta software utilizada, así como como configurar o directorio e file camiño.

Biblioteca de firmware 

En primeiro lugar, asegúrese de que se descargou a biblioteca de firmware Holtek HT32 antes de usar o código da aplicación. A ligazón de descarga móstrase a continuación. Aquí hai dúas opcións, HT32_M0p_Vyyyymmdd.zip para a serie HT32F5xxxx e HT32_M3_Vyyyymmdd.zip para a serie HT32F1xxxx. Descarga e descomprime o desexado file.

O zip file contén varios cartafoles que se poden clasificar como Documento, Biblioteca de firmware, Ferramentas e outros elementos, cuxa ruta de colocación móstrase na Figura 5. O zip da biblioteca de firmware HT32 file con a file o nome de HT32_STD_xxxxx_FWLib_Vm.n.r_s.zip atópase no cartafol Firmware_Library.

Figura 5. Contido HT32_M0p_Vyyyymmdd.zip
Contidos

Código de aplicación
Descarga o código da aplicación na seguinte ligazón. O código da aplicación está empaquetado nun zip file con a file nome de HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip. Ver Figura 6 para o file convencións de nomes.

Figura 6. Código de aplicación File Nome Introdución 

Link de descarga: https://mcu.holtek.com.tw/ht32/app.fw/Module_UART/ Código de aplicación

File e Configuración do directorio
Como o código da aplicación non contén a biblioteca de firmware HT32 files, o código da aplicación e a biblioteca de firmware descomprimidos files debe colocarse no camiño correcto antes de comezar a compilación. O código zip da aplicación file normalmente contén un ou máis cartafoles, como aplicación e biblioteca, como se mostra na Figura 7. Coloque o cartafol da aplicación baixo o directorio raíz da biblioteca de firmware HT32 para completar o file configuración de ruta, como se mostra na Figura 8. Como alternativa, descomprime o código da aplicación e a biblioteca de firmware HT32 simultaneamente no mesmo camiño para conseguir os mesmos resultados de configuración.

Figura 7. Contido de HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip
Contidos

Figura 8. Camiño de descompresión
Camiño de descompresión

Software de terminal
O código da aplicación pode transferir mensaxes a través do porto COM para implementar a selección de funcións ou a visualización de estado. Isto require que o host teña o software do terminal instalado previamente. Os usuarios poden escoller o software de conexión axeitado ou usar software con licenza gratuíta como Tera Term. No código da aplicación, a canle UART está configurada cunha lonxitude de palabra de 8 bits, sen paridade, 1 bit de parada e unha velocidade de transmisión de 115200 bps.

Descrición funcional

Este capítulo proporcionará unha descrición funcional do código da aplicación, incluíndo información sobre a estrutura do directorio, a arquitectura da API, a descrición da configuración, etc.

Estrutura do directorio
O código da aplicación file contén un cartafol de aplicacións. A seguinte capa é o cartafol "Module_UART" que contén dous programas de aplicación, "UART_Module_Example" e "UART_Bridge". O relevante files están listados e descritos a continuación.
Táboa 2. Estrutura do directorio de códigos da aplicación

Cartafol / File Nome Descrición
\\aplicación\Module_UART\UART_Module_Example*1
_CrearProxecto.bat Scripts por lotes para crear proxectos files
_ProjectSource.ini Inicialización file para engadir código fonte aos proxectos
ht32_board_config.h Configuración file relacionados coa asignación de E/S periféricos de IC
ht32fxxxxx_01_it.c Interrupción do programa de servizo file
principal.c Código fonte do programa principal
\\aplicación\Module_UART\UART_Bridge*2
_CrearProxecto.bat Scripts por lotes para crear proxectos files
_ProjectSource.ini Inicialización file para engadir código fonte aos proxectos
ht32_board_config.h Configuración file relacionados coa asignación de E/S periféricos de IC
ht32fxxxxx_01_it.c Interrupción do programa de servizo file
principal.c Código fonte do programa principal
uart_bridge.h uart_bridge.c Cabeceira da ponte UART file e código fonte file
\\utilidades\middleware
uart_module.h*3 uart_module.c*3 Cabeceira da API file e código fonte file
\\utilidades\común
ringbuffer.h ring_buffer.c Cabeceira do búfer de anel do software file e código fonte file

Nota: 

  1. No módulo "UART_Module_Example", as operacións de lectura e escritura da API realízanse de forma loopback, consulte "Ex.amples” para máis detalles.
  2.  No código de aplicación "UART_Bridge" actívanse dúas canles UART, UART CH0 e UART CH1, e impléntanse un protocolo de comunicación personalizado a través das estruturas COMMAND entre os dous dispositivos UART. Para obter máis información, consulte o "Uso de API Exampsección les".
  3. O código da aplicación necesita usar o uart_module.c/h files que teñen un requisito de versión da biblioteca de firmware. O requisito pode cambiar de cando en vez segundo a actualización. Para confirmar o requisito da versión actual da biblioteca de firmware, consulte o contido da comprobación de dependencias buscando a palabra clave "Comprobación de dependencias" no main.c file. Se a versión da biblioteca de firmware non cumpre os requisitos, descargue a versión máis recente desde a ligazón que se ofrece na sección "Biblioteca de firmware".

Arquitectura API
Cada API ten un parámetro importante CH, que é a canle UART. Isto determina que canle UART se debe controlar. Actualmente son compatibles ata catro canles UART e, polo tanto, defínense catro símbolos constantes como segue. Estes utilízanse como parámetro CH proporcionando ás API a base para o control.

  • UARTM_CH0: parámetro de entrada: controle ou configure UART CH0
  • UARTM_CH1: parámetro de entrada: controle ou configure UART CH1
  • UARTM_CH2: parámetro de entrada: controle ou configure UART CH2
  • UARTM_CH3: parámetro de entrada: controle ou configure UART CH3

O espazo de memoria non se desperdiciará se só se utiliza unha canle UART. Isto débese a que se pode establecer o número de canles UART compatibles e o código de canle UART non utilizado será eliminado polo preprocesador para aumentar o espazo de memoria dispoñible. A arquitectura da API móstrase en Figura 9.

Figura 9. Diagrama de bloques da arquitectura API
Diagrama de bloques de arquitectura

Cada API está composta por catro grupos de configuracións ou controis relacionados coa canle UART para que os usuarios só teñan que introducir o parámetro CH desexado. Para configurar a API relevante, só é necesario ter unha táboa de parámetros de configuración básica UART adicional co formulario de estrutura, USART_InitTypeDef. A API implementará a configuración básica de UART segundo o contido do parámetro da táboa. Consulte a sección "Descrición da API" para a táboa de estrutura de configuración básica de UART.

O módulo uart_module.c/.h files só conteñen a interrupción (CHx_IRQ) ​​e a táboa de estado (CHx Status) de cada canle UART mentres que ht32_board_config.h proporciona todos os axustes necesarios para a comunicación UART. Os parámetros relevantes de hardware no ht32_board_config.h file móstranse na seguinte táboa. Ofrécense máis detalles na sección "Descrición da configuración".

Os parámetros relevantes de hardware no ht32_board_config.h inclúen a configuración de E/S e a configuración do porto UART físico, como segue.

Táboa 3. Definición Símbolos en ht32_board_config.h

Símbolo Descrición
HTCFG_UARTM_CH0 Nome do porto UART físico; Example: UART0, UART1...
HTCFG_UARTM0_TX_GPIO_PORT Define o nome do porto de TX para CH0; Example: A, B, C...
HTCFG_UARTM0_TX_GPIO_PIN Define o número de pin de TX para CH0; Example: 0~15
HTCFG_UARTM0_RX_GPIO_PORT Define o nome do porto de RX para CH0; Example: A, B, C...
HTCFG_UARTM0_RX_GPIO_PIN Define o número de pin de TX para CH0; Example: 0~15
HTCFG_UARTM0_TX_BUFFER_SIZE Define o tamaño do buffer TX para CH0; Exampnúmero: 128
HTCFG_UARTM0_RX_BUFFER_SIZE Define o tamaño do buffer RX para CH0; Exampnúmero: 128

Para modificar a configuración AFIO da canle UART, consulte a folla de datos do dispositivo correspondente. Actualmente só entran en vigor as definicións de E/S para UART CH0 xa que só se configurou UART CH0 en ht32_board_config.h. Para engadir UART CH1~3, as súas definicións de E/S deben completarse facendo referencia á definición de UART CH0 ou consultando a sección "Configuración de modificacións e preguntas frecuentes".

Hai tres características principais da arquitectura API: 

  1. Admítense ata catro canles UART. Os seus parámetros de entrada son UARTM_CH0, UARTM_CH1, UARTM_CH2 e UARTM_CH3.
  2.  Pódese establecer o número de canles UART e as canles non utilizadas non reducirán o espazo de memoria dispoñible.
  3. Toda a configuración de UART e as definicións de E/S están completamente separadas das API. Isto aumenta a comodidade de xestión de establecer valores e reduce a posibilidade de que falten ou falten axustes incorrectos.

Descrición da configuración 

Esta sección presentará a configuración dos parámetros en ht32_board_config.h e uart_module.h files.

  1. ht32_board_config.h: Isto file úsase para definicións de pin e configuracións relevantes da tarxeta de desenvolvemento, que inclúen a canle IP UART (UART0, UART1, USART0...) utilizada polo Starter Kit (SK), as localizacións de pines TX/RX correspondentes e o tamaño do buffer TX/RX. A Figura 10 mostra o contido da configuración do kit de inicio HT32F52352. Dependendo da integración funcional do desenvolvemento, os usuarios poden consultar a sección "Asignación de pins" da folla de datos do dispositivo utilizado para implementar as definicións de pin. Descriranse máis detalles sobre a modificación da configuración na sección "Modificación da configuración e preguntas frecuentes".
    Figura 10. Configuración de ht32_board_config.h (HT32F52352)
    Configuración
  2. uart_module.h: Esta é a cabeceira da API file usado polo código da aplicación, que inclúe a configuración predeterminada relevante, definicións de funcións, etc. Como se mostra na Figura 11, o contido da configuración predeterminada pode sobrescribirse por configuracións externas, como a configuración do ht32_board_config.h file.
    Figura 11. Configuración predeterminada en uart_module.h
    Configuración predeterminada
Descrición da API
  1. Descrición do tipo de datos do código da aplicación.
    • USART_InitTypeDef
      Esta é a estrutura de configuración básica de UART que está composta por configuracións BaudRate, WordLength, StopBits, Parity e Mode, como se mostra a continuación.
      Variable Nome Tipo Descrición
      USART_BaudRate u32 Velocidade en baudios de comunicación UART
      USART_Lonxitude da palabra u16 Longitud da palabra de comunicación UART: 7, 8 ou 9 bits
      USART_StopBits u16 Longitud de bit de parada de comunicación UART: 1 o 2 bits
      USART_Parity u16 Paridade de comunicación UART: par, impar, marca, espazo ou sen paridade
      USART_Mode u16 modo de comunicación UART; as API só admiten o modo normal
  2. Antes de usar as funcións da API, complete a configuración básica de UART no programa principal. A configuración básica de UART para este código de aplicación móstrase na Figura 12. Aquí a velocidade en baudios é de 115200 bps, a lonxitude da palabra é de 8 bits, a lonxitude do bit de parada é de 1 bit e non hai paridade.
    Figura 12. Configuración básica de UART
    Configuración básica
  3. A Figura 13 mostra as funcións da API declaradas no uart_module.h file. As seguintes táboas explican a función, os parámetros de entrada e o uso das funcións da API.
    Figura 13. Declaracións de funcións da API en uart_module.h 
    Declaracións de funcións da API
Nome void UARTM_Init(u32 CH, USART_InitTypeDef *pUART_Init, u32 uRxTimeOutValue)
Función Inicialización do módulo UART
  Entrada CH Canle UART
pUART_Init Punteiro da estrutura de configuración básica de UART
 uRxTimeOutValue Valor de tempo de espera UART RX FIFO. Cando o RX FIFO reciba novos datos, o contador reiniciarase e reiniciarase. Unha vez que o contador alcance o valor de tempo de espera preestablecido e se habilitou a interrupción de tempo de espera correspondente, xerarase unha interrupción de tempo de espera.
 Uso UARTM_Init(UARTM_CH0, &USART_InitStructure, 40);//Execute a configuración básica de UART//Consulte a Figura 12 para a configuración de USART_InitStructure
Nome u32 UARTM_WriteByte (u32 CH, u8 uData)
Función Operación de bytes de escritura do módulo UART (TX)
Entrada CH Canle UART
uData Os datos a escribir
Saída ÉXITO Éxito
ERRO Fallou
Uso UARTM_WriteByte(UARTM_CH0, 'A'); //UART escribe 1 byte - 'A'
Nome u32 UARTM_Write (u32 CH, u8 *pBuffer, u32 uLength)
Función operación de escritura do módulo UART (TX)
 Entrada CH Canle UART
pBuffer Punteiro do buffer
uLonxitude A lonxitude dos datos que se van escribir
Saída ÉXITO Éxito
ERRO Fallou
 Uso u8 Test[] = "Isto é unha proba!\r\n"; UARTM_Write(UARTM_CH0, Test, sizeof(Test) -1); //UART escribe datos de pBuffer
Nome u32 UARTM_ReadByte (u32 CH, u8 *pData)
Función Operación de bytes de lectura do módulo UART (RX)
Entrada CH Canle UART
pDatos O enderezo para colocar os datos lidos
Saída ÉXITO Éxito
ERRO Fallou (sen datos)
   Uso u8 TempData; if (UARTM_ReadByte(UARTM_CH0, &TempData) == ÉXITO){UARTM_WriteByte(UARTM_CH0, TempData);}//Se UARTM_ReadByte() devolve ÉXITO, UART escribe este byte de datos
Nome u32 UARTM_Read(u32 CH, u8 *pBuffer, u32 uLonxitude)
Función Operación de lectura do módulo UART (RX)
 Entrada CH Canle UART
pBuffer Punteiro do buffer
uLonxitude A lonxitude dos datos que se van ler
Saída Conta de lecturas Leuse a lonxitude dos datos
     Uso u8 Proba2[10]; u32 Len; Len = UARTM_Read(UARTM_CH0, Test2, 5);if (Len > 0){UARTM_Write(UARTM_CH0, Test2, Len);}//UARTM_Read() le 5 bytes de datos e almacena datos en Test2 e asigna o reconto de bytes de lectura para Len//Escribir os datos procedentes de Test2
Nome u32 UARTM_GetReadBufferLength (u32 CH)
Función Obter a lonxitude do búfer de lectura (RX)
Entrada CH Canle UART
Saída uLonxitude Ler a lonxitude do búfer
  Uso UARTM_Init(UARTM_CH0, &USART_InitStructure, 40); //Inicialización do módulo UART mentres (UARTM_GetReadBufferLength(UARTM_CH0) < 5);//Agarde ata que UARTM_ReadBuffer reciba 5 bytes de datos
Nome u32 UARTM_GetWriteBufferLength(u32 CH)
Función Obter a lonxitude do búfer de escritura (TX)
Entrada CH Canle UART
Saída uLonxitude Escribir a lonxitude do buffer
Nome u8 UARTM_IsTxFinished(u32 CH)
Función Obter o estado TX
Entrada CH Canle UART
Saída VERDADEIRO Estado TX: rematado
FALSO Estado TX: non rematado
      Uso UARTM_WriteByte(UARTM_CH0, 'O'); #if 1 // "uart_module.c" SVN >= 525 requiredwhile (UARTM_IsTxFinished(UARTM_CH0) == FALSO) #elsewhile (1) #endif //Esta API pódese usar para comprobar o estado do TX, como se mostra arriba; agarda ata que a API UARTM_WriteByte() remate, é dicir, o estado TX é TRUE, e despois continúa coas accións posteriores.//Engádese unha restrición porque non se engadiu esta función ata que o número de versión SVN en uart_module.c sexa 525.
Nome baleiro UARTM_DiscardReadBuffer(u32 CH)
Función Descarta os datos do búfer de lectura
Entrada CH Canle UART

Uso da API Examples 

Esta sección mostrará a escritura e lectura da API exampficheiros do código de aplicación “Module_UART” mediante o proceso de inicialización e o “UART_Module_Example” proceso de código de aplicación. Antes de usar as API, os usuarios deben incluír a cabeceira da API file no código fonte do programa principal file (#include “middleware/uart_module.h”).

Como se mostra na Figura 14, ao entrar no proceso de inicialización, primeiro defina a estrutura de configuración básica do UART. A continuación, configure os membros da estrutura de configuración básica de UART, incluíndo BaudRate, WordLength, StopBits, Parity e Mode. Finalmente, chame á función de inicialización da API, cuxa finalización indica o final do proceso de inicialización. Despois disto, os usuarios poden continuar coas operacións de escritura e lectura en función da configuración básica UART preestablecida.

Figura 14. Diagrama de fluxo de inicialización
Diagrama de fluxo de inicialización

O módulo "UART_Module_Example” o código da aplicación demostra as operacións de lectura e escritura da API de forma loopback. O diagrama de fluxo para isto móstrase na Figura 15. As funcións da API utilizadas inclúen UARTM_WriteByte(), UARTM_Write(), UARTM_ReadByte(), UARTM_Read() e UARTM_GetReadBufferLength(). A súa descrición achégase na sección "Descrición da API".

Figura 15. Diagrama de fluxo de escritura e lectura Examples
Diagrama de fluxo de escritura e lectura Examples

Hai outro código de aplicación "UART_Bridge" no cartafol "Module_UART" cuxo relacionado file a descrición introdúcese na sección "Estrutura do directorio". O código da aplicación "UART_Bridge" activa dúas canles UART, UART CH0 e UART CH1, e despois personaliza o protocolo de comunicación entre os dous dispositivos UART mediante estruturas COMMAND, gCMD1 e gCMD2. Estes defínense en uart_bridge.c, como se mostra a continuación. UARTBridge_CMD1TypeDef gCMD1:

Variable Nome Tipo Descrición
uEncabezado u8 Cabeceira
uCmd u8 Comando
uData[3] u8 Datos

UARTBridge_CMD2TypeDef gCMD2:

Variable Nome Tipo Descrición
uEncabezado u8 Cabeceira
uCmdA u8 Comando A
uCmdB u8 Comando B
uData[3] u8 Datos

No código da aplicación "UART_Bridge", use gCMD1 para recibir datos como paquete de comandos e despois analízaos. Despois, segundo o protocolo de comunicación personalizado, configure gCMD2 como paquete de resposta e transmíteo. O seguinte é un example dun paquete de comandos gCMD1) e un paquete de resposta (gCMD2). Paquete de comandos (UARTBridge_CMD1TypeDef gCMD1):

Byte 0 Byte 1 Byte 2 ~ Byte 4
uEncabezado uCmd uData [3]
"A" "1" "x, y, z"

Paquete de resposta (UARTBridge_CMD2TypeDef gCMD2):

Byte 0 Byte 1 Byte 2 Byte 3 ~ Byte 5
uEncabezado uCmdA uCmdB uData [3]
"B" "a" "1" "x, y, z"

Ocupación dos recursos
Tomando o HT32F52352 como example, os recursos que ocupa o módulo UART móstranse a continuación.

HT32F52352
Tamaño da ROM 946 bytes
Tamaño da RAM 40*1 + 256*2 Bytes

Nota:

  1. As variables globais, incluíndo bandeiras e estado para unha única canle, ocupan 40 bytes de RAM.
  2.  Isto é para unha condición onde se usa unha única canle e o tamaño do búfer TX/RX é de 128/128 bytes. O tamaño do buffer pódese configurar segundo os requisitos da aplicación.

Táboa 4. Código de aplicación Ocupación do recurso 

  • Entorno de compilación: Actualización 5.36 de MDK-Arm V5.06, ARMCC V7 (build 960)
  • Opción de optimización: Nivel 2 (-O2)

Instrucións de uso

Neste capítulo presentarase a preparación ambiental para o código de aplicación “Module_UART”, así como os pasos de compilación e proba.

Preparación Ambiental
O hardware e o software necesarios para o código de aplicación "Module_UART" están listados a continuación.
Táboa 5. Preparación ambiental de hardware/software 

Hardware/Software Conta Nota
Kit de inicio 1 Esta nota da aplicación usa o kit de inicio HT32F52352 como exemploample
Cable USB 1 Micro USB, conectado a PC
Código de aplicación Camiño de descarga, file e a configuración do directorio introdúcense na sección "Descarga e preparación de recursos". Ruta: "\\application\Module_UART\UART_Module_Example ”
Tera Term Consulte a sección "Software do terminal".
Keil IDE Keil uVision V5.xx

En primeiro lugar, use o kit de inicio HT32F52352 combinado coa función Virtual COM Port (VCP) de e-Link32 Lite para a introdución da aplicación UART. Para iso é necesario levar a cabo a seguinte preparación ambiental:

  1. Hai dúas interfaces USB no taboleiro. Use o cable USB para conectar o PC e a interface eLink32 Lite na placa, como se mostra na Figura 16-(a).
  2. Dado que o código da aplicación necesita usar a función de porto COM virtual (VCP) e-Link32 Lite, asegúrese de que o PAx*2 e DAP_Tx do UART Jumper-J2*1 se cortaron mediante un puente. A localización J2 indícase na Figura 16-(b).

Nota

  1. J2 no kit de inicio ten dúas opcións, PAx e DAP_Tx en curto ou PAx e RS232_Tx en curto. Consulte o manual de usuario do kit de inicio para as funcións de configuración detalladas.
  2. A localización do pin MCU UART RX en diferentes kits de inicio é diferente. Este example usa PAx para indicar o pin RX.

Figura 16. Diagrama de bloques do kit de inicio HT32
Diagrama de bloques do kit

Agora use a tarxeta de destino do usuario combinada coa función Virtual COM Port (VCP) do e-Link32 Pro para a introdución da aplicación UART. Para iso é necesario levar a cabo a seguinte preparación ambiental:

  1. Un lado do e-Link32 Pro está conectado a un PC mediante un cable Mini USB e o outro lado está conectado á placa de destino do usuario a través do seu cable gris de 10 bits. A conexión entre as interfaces SWD do cable e a tarxeta de destino implétase mediante liñas de Dupont, como se mostra na Figura 17-(a).
  2. Os pinos de comunicación en serie do e-Link32 Pro son o Pin#7 VCOM_RXD e o Pin#8-VCOM_TXD. Estes deben estar conectados aos pinos TX e RX da placa de destino do usuario, como se mostra na Figura 17-(b).
    Figura 17. Diagrama de bloques da tarxeta de destino do usuario e-Link32 Pro +
    Consello de destino do usuario

Compilación e proba
Esta sección levará a "aplicación\Module_UART\UART_Module_Example” como example para introducir os procesos de compilación e proba. Antes, asegúrese de que se realizaron todos os preparativos descritos no apartado anterior e de que se descargou o software do terminal Tera Term.

Os pasos detallados da operación resúmense a continuación.
Paso 1. Proba de encendido

Configure o ambiente de hardware como se describe na sección anterior. Despois do acendido, iluminarase o LED de encendido D9 na parte inferior esquerda do kit de inicio. O LED USB D1 do e-Link32 Lite na parte superior dereita iluminarase despois de completar a enumeración USB. Se D1 non se ilumina despois dun longo período de tempo, confirme se o cable USB é capaz de comunicarse. Se non, elimínao e insírelo de novo.

Paso 2. Xera un proxecto
Abra a aplicación\Module_UART\UART_Module_Example, faga clic no ficheiro _CreateProject.bat file para xerar un proxecto, como se mostra na Figura 18. Dado que esta nota da aplicación usa o kit de inicio HT32F52352, abra o proxecto IDE de Keil "Project_52352.uvprojx" situado no cartafol MDK_ARMv5.

Figura 18. Executar _CreateProject.bat para xerar o proxecto
Xerar Proxecto

Paso 3. Compila e programa
Despois de abrir o proxecto, primeiro faga clic en "Construír" (ou use o atallo "F7"), despois prema en "Descargar" (ou use o atallo "F8"). Despois diso, os resultados de compilación e descarga mostraranse na xanela Saída de compilación. Vexa a figura 19.

Figura 19. Resultados de compilación e descarga
Construír e descargar resultados

Paso 4. Abra o software Tera Term e configure o porto serie
Abra o software Tera Term e o porto COM. Preste atención a se o número de porto COM xerado polo Starter Kit é correcto ou non. A continuación, faga clic en "Configuración >> Porto serie" para entrar na interface de configuración. A configuración da interface UART do código da aplicación "Module_UART" descríbese na sección "Software terminal". O resultado da configuración móstrase na Figura 20.

Figura 20. Resultado da configuración do porto serie Tera Term
Resultado da configuración
Paso 5. Restablece o sistema e proba
Prema a tecla de reinicio SK – B1 Reset. Despois disto, un "ABCThis is test!" mensaxe será
transmitirase a través da API e mostrarase na xanela Tera Term, como se mostra na Figura 21. Respecto á función de recepción, ao introducir datos na xanela Tera Term, utilizarase a API relevante para determinar a lonxitude do búfer de recepción. Cando os datos recibidos polo PC alcancen os 5 bytes, os 5 bytes de datos recibidos enviaranse secuencialmente. Como se mostra na Figura 22, os datos introducidos secuencialmente son "1, 2, 3, 4, 5", que se reciben e determinan a través da API. Despois disto, os datos "1, 2, 3, 4, 5" imprimiranse despois das cinco entradas.

Figura 21. Proba funcional do código de aplicación “Module_UART” – Transmitir
Proba funcional do código da aplicación

Figura 22. Proba funcional do código de aplicación “Module_UART” – Recibir
Proba funcional do código da aplicación

Instrucións de transplante
Esta sección presentará como integrar as API nos proxectos do usuario.
Paso 1. Engade o uart_module.c file no proxecto. Fai clic co botón dereito no cartafol Usuario. Seleccione "Engadir existente Files para Agrupar "Usuario"...", a continuación, seleccione uart_module.c file e prema en "Engadir", como se mostra na Figura 23. Consulte a sección "Estrutura do directorio" file descrición do camiño.

Figura 23. Engadir uart_module.c File para Proxectar
File para Proxectar

Paso 2. Engade o ring_buffer.c file no proxecto. Fai clic co botón dereito no cartafol Usuario. Seleccione "Engadir existente Files para Agrupar 'Usuario'...”, a continuación, seleccione o ring_buffer.c file e prema en "Engadir", como se mostra na Figura 24.\ Consulte a sección "Estrutura do directorio" file descrición do camiño.
Figura 24. Engadir ring_buffer.c File para Proxectar 
File para Proxectar

Paso 3. Inclúe a cabeceira da API file ao comezo de main.c, como se mostra na Figura 25. (Ext: #include “middleware/uart_module.h”)
Figura 25. Incluír cabeceira da API File a principal.c
Incluír cabeceira da API File

Paso 4. Implementa a configuración necesaria para a comunicación UART mediante o ht32_board_config.h file. Isto introdúcese en detalle nas seccións "Descrición da configuración" e "Modificación da configuración e preguntas frecuentes".

Modificación da configuración e preguntas frecuentes 

Esta sección presentará como modificar a configuración do UART e explicará algunhas preguntas comúns que se atopan durante o uso.

Cambiar a asignación de pin UART 

  1. Facendo referencia ao capítulo "Asignación de pins" da folla de datos HT32F52352, busque a táboa de asignación de funcións alternativas que enumera as funcións AFIO do tipo de dispositivo. Para os pinos relevantes para UART, consulte a columna "AF6 USART/UART", como se mostra na Figura 26.
    Figura 26. Táboa de asignación de funcións alternativas HT32F52352
    Táboa de asignación de funcións alternativas
  2. Este paso guiará aos usuarios a localizar os pinos UART correspondentes mediante a táboa anterior. O modelo HT32F52352 exampO ficheiro usa USART1 como canle predeterminado. Aquí, os pinos TX e RX son USR1_TX e USR1_RX e están situados en PA4 e PA5 respectivamente. A Figura 27 mostra a correspondencia de pin así como as definicións de pin en "ht32_board_config.h". Os campos baleiros de "Paquete" na táboa de asignación de PIN significan que non hai GPIO relevantes neste paquete. Para modificar os alfinetes UART, busque as localizacións dos alfinetes de destino e volva definir os pinos usando o "ht32_board_config.h" file.
    Figura 27. Correspondencia de pin e modificación da configuración
    Modificación da configuración

Engade unha canle UART
Tomando o HT32F52352 HTCFG_UARTM_CH1 como example, aquí descríbese como engadir unha nova canle UART.

Modifique o ficheiro ht32_board_config.h file
Facendo referencia ao capítulo "Asignación de pins" da folla de datos HT32F52352, busque a táboa de asignación de funcións alternativas que enumera as funcións AFIO do tipo de dispositivo. Como USART1 utilizouse como HTCFG_UARTM_CH0, o HTCFG_UARTM_CH1 recén engadido pode escoller USART0. Aquí, os pinos TX e RX están situados en PA2 e PA3 respectivamente, como se mostra na metade superior da Figura 28. As modificacións correspondentes impléntanse usando as liñas de código 120~126 en ht32_board_config.h, como se mostra no cadro de puntos vermellos da Figura. 28.

Figura 28. Engadir unha canle UART
Canle UART

Preguntas frecuentes
Q: No paso 5 da sección Compilación e proba, a proba funcional de transmisión é normal. Aquí, o "ABCThis is test!" A mensaxe mostrouse correctamente, pero para a función de recepción, por que non se devolven nin se mostran os cinco valores de entrada?
A: Comprobe se os pinos MCU UART RX e DAP_Tx do UART Jumper-J2 foron curtos mediante un puente. Como o código da aplicación "Module_UART" necesita usar o porto COM virtual (VCP) de e-Link32 Lite, a configuración de curtocircuíto debe aplicarse aos dous pinos esquerdos do UART Jumper-J2, como se mostra na Figura 29.

Figura 29. Configuración UART Jumper-J2
Jumper UART

P: Despois ao executar "Build" (ou atallo "F7"), aparece unha mensaxe de erro que indica que a versión da biblioteca de firmware é máis antiga que a necesaria? Vexa a figura 30.
A: A implementación do código da aplicación "Module_UART" debe incluír o uart_module.c/h files que ten un requisito para unha determinada versión da biblioteca de firmware. Cando aparece esa mensaxe de erro, significa que a biblioteca de firmware utilizada actualmente é unha versión máis antiga. Polo tanto, é necesario descargar a versión máis recente a través da ligazón proporcionada na sección "Biblioteca de firmware".

Figura 30. Mensaxe de erro da versión da biblioteca de firmware
Mensaxe de erro da versión

Conclusión

Este documento ofrece unha introdución básica para axudar aos usuarios a comprender mellor o código da aplicación "Module_UART" e o protocolo de comunicación UART. Isto foi seguido pola descarga e preparación do recurso. O capítulo Descrición funcional presentou o file estrutura de directorios, a arquitectura da API, a descrición da API e o uso da API, por exemploamples. O capítulo de instrucións de uso demostrou a preparación ambiental, a compilación e a proba do código de aplicación "Module_UART". Tamén proporcionou instrucións para o transplante de código e a configuración de modificación, así como explican algúns problemas comúns que se poden atopar. Todo isto combinado permitirá aos usuarios comprender rapidamente como usar as API e, posteriormente, reducir a cantidade de tempo para comezar.

Material de referencia

Para obter máis información, consulte a Holtek websitio web: www.holtek.com

Versións e información de modificación

Data Autor Lanzamento Información de modificación
2022.04.30 蔡期育(Chi-Yu Tsai) V1.00 Primeira Versión

Exención de responsabilidade

Toda a información, marcas comerciais, logotipos, gráficos, vídeos, clips de audio, ligazóns e outros elementos que aparecen neste web('Información') son só para referencia e están suxeitos a cambios en calquera momento sen previo aviso e a criterio de Holtek Semiconductor Inc. e as súas compañías relacionadas (en diante 'Holtek', 'a empresa', 'nós', ' nós" ou "os nosos"). Mentres que Holtek se esforza por garantir a exactitude da información sobre isto websitio, Holtek non ofrece ningunha garantía expresa ou implícita sobre a exactitude da información. Holtek non asumirá ningunha responsabilidade por calquera incorrección ou fuga.
Holtek non será responsable de ningún dano (incluíndo, entre outros, virus informáticos, problemas do sistema ou perda de datos) que se produza polo uso ou en relación co uso deste websitio por calquera parte. Pode haber ligazóns nesta zona, que che permiten visitar o websitios doutras empresas.
Estes webos sitios non están controlados por Holtek. Holtek non asumirá ningunha responsabilidade e ningunha garantía con respecto á información que se mostre nestes sitios. Hipervínculos a outros websitios son baixo o seu propio risco.

Limitación de responsabilidade

En ningún caso, Holtek Limited será responsable ante ningunha outra parte de calquera perda ou dano ou calquera tipo de dano causado directa ou indirectamente en relación co seu acceso ou uso deste. websitio, o contido nel ou calquera ben, material ou servizo.

Lei vixente
A exención de responsabilidade contida no websitio rexirase e interpretarase de acordo coas leis da República de China. Os usuarios someteranse á xurisdición non exclusiva dos tribunais da República de China.

Actualización de exención de responsabilidade
Holtek resérvase o dereito de actualizar o Aviso de exención de responsabilidade en calquera momento con ou sen aviso previo, todos os cambios entrarán en vigor inmediatamente despois da publicación no websitio.

Documentos/Recursos

Nota de aplicación HOLTEK HT32 MCU UART [pdfManual do usuario
HT32 MCU, Nota de aplicación UART, HT32 MCU UART, Nota de aplicación, HT32, Nota de aplicación MCU UART, Nota de aplicación HT32 MCU UART

Referencias

Deixa un comentario

O teu enderezo de correo electrónico non será publicado. Os campos obrigatorios están marcados *