HOLTEK HT32 MCU UART Nota de aplicación Manual del usuario
Nota de aplicación HOLTEK HT32 MCU UART

Introducción

El receptor/transmisor asíncrono universal (UART) es una interfaz de transmisión en serie ampliamente utilizada que proporciona una transmisión de datos full-duplex asíncrona flexible. El código de aplicación "Module_UART" proporcionado en esta nota de aplicación utiliza interrupciones TX/RX con buffers de anillo de software para implementar funciones simples de transmisión/recepción UART a través de API, cuyas funciones relacionadas se describen a continuación. Esto simplificará todo el proceso de transmisión de datos y permitirá a los usuarios comprender e implementar rápidamente aplicaciones de comunicación UART.

  • Funciones de transmisión/recepción: lectura de bytes, escritura de bytes, lectura de búfer, escritura de búfer, etc.
  • Funciones de estado: obtener la longitud del búfer, estado de TX, etc.

Este documento presentará primero el protocolo de comunicación UART, que ayudará a los usuarios a comprender mejor la comunicación UART desde el principio hasta la aplicación. A esto le sigue la descarga y preparación de los recursos necesarios para el código de la aplicación, incluida la biblioteca de firmware, la descarga del código de la aplicación, file y configuración del directorio, así como una introducción a la herramienta de software del terminal utilizada en la nota de aplicación. En el capítulo Descripción funcional, se presentará la estructura del directorio del código de la aplicación, la configuración de los parámetros y la descripción de la API. El uso de la API se describirá utilizando el código de aplicación "Module_UART" y también se enumerará el consumo de recursos Flash/RAM requerido para las API. El capítulo de Instrucciones de uso guiará al usuario a través de los pasos de preparación ambiental, compilación y prueba para confirmar que el código de la aplicación funcionará correctamente. Luego proporcionará instrucciones que explican cómo integrar las API en los proyectos del usuario y finalmente proporcionará una referencia para modificaciones y problemas comunes que puedan surgir.

Abreviaturas utilizadas: 

  • UART: Receptor / transmisor asíncrono universal
  • API: Interfaz de programación de aplicaciones
  • LSB: Bit menos significativo
  • MSB: Parte más significante
  • ORDENADOR PERSONAL: Ordenador personal
  • SK: Kit de inicio, placa de desarrollo HT32
  • IDE: Entorno de desarrollo integrado

Protocolo de comunicación UART

La UART es un tipo de interfaz de comunicación en serie que implementa la conversión de datos de paralelo a serie en su transmisor y luego se comunica en serie con un receptor similar. Luego, el receptor realiza una conversión de datos de serie a paralelo después de la recepción de los datos. La Figura 1 muestra un diagrama esquemático de comunicación en serie que muestra cómo se transfieren los datos en orden bit a bit. Por lo tanto, para la comunicación bidireccional entre transmisor y receptor, sólo se requieren dos cables, TX y RX, para transferir datos en serie entre sí. TX es el pin en el que el UART transmite los datos en serie y está conectado al pin RX del receptor. Por lo tanto, los dispositivos transmisores y receptores necesitan interconectar sus pines TX y RX para realizar la comunicación bidireccional UART, como se muestra en Cifra 2.

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

Figura 2. Diagrama del circuito UART
Diagrama de circuito UART

Durante la comunicación serie UART, la transmisión de datos es asíncrona. Esto significa que no hay reloj ni ninguna otra señal de sincronización entre el transmisor y el receptor. Aquí se utiliza una velocidad en baudios, que es la velocidad de transmisión/recepción de datos en serie y que ambas partes establecen antes de las transferencias de datos. Además, se agregan bits especiales, como bits de inicio y parada, al principio y al final del paquete de datos para formar un paquete de datos UART completo. La Figura 3 muestra la estructura del paquete de datos UART, mientras que la Figura 4 muestra un paquete de datos UART de 8 bits sin bit de paridad.
Figura 3. Estructura del paquete de datos UART
Estructura del paquete de datos UART

Figura 4. Formato de paquete de datos UART de 8 bits
Formato de paquete de datos
Cada parte del paquete de datos UART se presenta en orden a continuación.

  • Bit de inicio: Esto indica el inicio de un paquete de datos. El pin UART TX generalmente permanece en un nivel lógico alto antes de que comience la transmisión. Si comienza la transmisión de datos, el transmisor UART tirará del pin TX de mayor a menor, es decir, de 1 a 0, y luego lo mantendrá allí durante un ciclo de reloj. El receptor UART comenzará a leer datos cuando se detecte una transición de alto a bajo en el pin RX.
  • Datos: Estos son los datos reales transferidos, con una longitud de datos de 7, 8 o 9 bits. Los datos normalmente se transfieren primero con el LSB.
  • Bit de paridad: El número de "1" lógico en los datos se utiliza para determinar si algún dato ha cambiado durante la transmisión. Para paridad par, el número total de "1" lógico en los datos debe ser un número par; por el contrario, el número total de "1" lógico en los datos debe ser un número impar para paridad impar.
  • Bit de parada: Esto indica el final de un paquete de datos, donde el transmisor UART tirará del pin TX de bajo a alto, es decir, de 0 a 1, y luego lo mantendrá allí durante un período de tiempo de 1 o 2 bits.

Como se mencionó anteriormente, dado que no hay señal de reloj en el circuito UART, se debe definir la misma velocidad de transmisión/recepción de datos en serie, conocida como velocidad en baudios, entre el transmisor y el receptor para implementar una transmisión sin errores. La velocidad en baudios se define por el número de bits transferidos por segundo, en bps (bit por segundo). Algunas velocidades de baudios estándar y comúnmente utilizadas son 4800 bps, 9600 bps, 19200 bps, 115200 bps, etc. El tiempo correspondiente requerido para transferir un solo bit de datos se muestra a continuación.
Tabla 1. Velocidad en baudios versus tiempo de transmisión de 1 bit 

Tasa de Baud Transmisión de 1 bit Tiempo
4800 puntos básicos 208.33µs
9600 puntos básicos 104.16µs
19200 puntos básicos 52.08µs
115200 puntos básicos 8.68µs

Descarga y preparación de recursos

Este capítulo presentará el código de la aplicación y la herramienta de software utilizada, así como también cómo configurar el directorio y file camino.

Biblioteca de firmware 

Primero, asegúrese de que la biblioteca de firmware Holtek HT32 se haya descargado antes de utilizar el código de la aplicación. El enlace de descarga se muestra a continuación. Aquí hay dos opciones, HT32_M0p_Vyyyymmdd.zip para la serie HT32F5xxxx y HT32_M3_Vyyyymmdd.zip para la serie HT32F1xxxx. Descargue y descomprima el deseado. file.

La cremallera file contiene varias carpetas que se pueden clasificar como Documento, Biblioteca de firmware, Herramientas y otros elementos, cuya ruta de ubicación se muestra en la Figura 5. La biblioteca de firmware HT32 zip file con un file El nombre de HT32_STD_xxxxx_FWLib_Vm.n.r_s.zip se encuentra en la carpeta Firmware_Library.

Figura 5. Contenido de HT32_M0p_Vyyyymmdd.zip
Contenido

Código de aplicación
Descarga el código de la aplicación desde el siguiente enlace. El código de la aplicación está empaquetado en un zip. file con un file nombre de HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip. Ver Figura 6 Para el file convenciones de nombres.

Figura 6. Código de aplicación File Introducción al nombre 

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

File y configuración del directorio
Como el código de la aplicación no contiene la biblioteca de firmware HT32 files, el código de la aplicación y la biblioteca de firmware descomprimidos files deben colocarse en la ruta correcta antes de comenzar la compilación. El código zip de la aplicación file generalmente contiene una o más carpetas, como aplicación y biblioteca, como se muestra en la Figura 7. Coloque la carpeta de la aplicación debajo del directorio raíz de la biblioteca del firmware HT32 para completar la carpeta. file configuración de ruta, como se muestra en la Figura 8. Alternativamente, descomprima el código de la aplicación y la biblioteca de firmware HT32 simultáneamente en la misma ruta para lograr los mismos resultados de configuración.

Figura 7. Contenido de HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip
Contenido

Figura 8. Ruta de descompresión
Ruta de descompresión

Software de terminal
El código de la aplicación puede transferir mensajes a través del puerto COM para implementar la selección de funciones o la visualización del estado. Esto requiere que el lado del host tenga el software del terminal instalado de antemano. Los usuarios pueden elegir el software de conexión adecuado o utilizar software con licencia gratuita como Tera Term. En el código de la aplicación, el canal UART está configurado con una longitud de palabra de 8 bits, sin paridad, 1 bit de parada y una velocidad en baudios de 115200 bps.

Descripción funcional

Este capítulo proporcionará una descripción funcional del código de la aplicación, incluida información sobre la estructura del directorio, la arquitectura API, la descripción de la configuración, etc.

Estructura de directorios
El código de la aplicación. file contiene una carpeta de aplicación. La siguiente capa es la carpeta “Module_UART” que contiene dos programas de aplicación, “UART_Module_Examparchivo” y “UART_Bridge”. Lo relevante files se enumeran y describen a continuación.
Tabla 2. Estructura del directorio del código de aplicación

Carpeta / File Nombre Descripción
\\aplicación\Module_UART\UART_Module_Example*1
_CrearProyecto.bat Scripts por lotes para crear proyectos files
_ProjectSource.ini Inicialización file para agregar código fuente a proyectos
ht32_board_config.h Configuración file relacionado con la asignación de E/S periféricas de IC
ht32fxxxxx_01_it.c programa de servicio de interrupción file
C Principal Código fuente del programa principal
\\aplicación\Module_UART\UART_Bridge*2
_CrearProyecto.bat Scripts por lotes para crear proyectos files
_ProjectSource.ini Inicialización file para agregar código fuente a proyectos
ht32_board_config.h Configuración file relacionado con la asignación de E/S periféricas de IC
ht32fxxxxx_01_it.c programa de servicio de interrupción file
C Principal Código fuente del programa principal.
uart_bridge.h uart_bridge.c Cabecera del puente UART file y código fuente file
\\utilidades\middleware
uart_module.h*3 uart_module.c*3 encabezado de API file y código fuente file
\\utilidades\comunes
ringbuffer.h ring_buffer.c Encabezado del búfer circular de software file y código fuente file

Nota: 

  1. En el archivo “UART_Module_Example” código de aplicación, las operaciones de lectura y escritura de API se realizan en forma de bucle invertido, consulte “API Usage Examples” para obtener más detalles.
  2.  En el código de aplicación “UART_Bridge”, se activan dos canales UART, UART CH0 y UART CH1, y se implementa un protocolo de comunicación personalizado a través de las estructuras COMMAND entre los dos dispositivos UART. Para obtener más información, consulte “Uso de API Exampsección les”.
  3. El código de la aplicación necesita usar uart_module.c/h files que tienen un requisito de versión de biblioteca de firmware. El requisito puede cambiar periódicamente según la actualización. Para confirmar el requisito de la versión actual de la biblioteca de firmware, consulte el contenido de la verificación de dependencia buscando la palabra clave "Verificación de dependencia" en main.c file. Si la versión de la biblioteca de firmware no cumple con los requisitos, descargue la versión más reciente desde el enlace proporcionado en la sección "Biblioteca de firmware".

Arquitectura API
Cada API tiene un parámetro importante CH, que es el canal UART. Esto determina qué canal UART se va a controlar. Actualmente se admiten hasta cuatro canales UART y, por lo tanto, se definen cuatro símbolos constantes de la siguiente manera. Estos se utilizan como parámetro CH y proporcionan a las API la base para el control.

  • UARTM_CH0: parámetro de entrada – controlar o configurar UART CH0
  • UARTM_CH1: parámetro de entrada – controlar o configurar UART CH1
  • UARTM_CH2: parámetro de entrada – controlar o configurar UART CH2
  • UARTM_CH3: parámetro de entrada – controlar o configurar UART CH3

No se desperdiciará espacio de memoria si solo se utiliza un canal UART. Esto se debe a que se puede configurar el número de canales UART admitidos y el preprocesador eliminará el código de canal UART no utilizado para aumentar el espacio de memoria disponible. La arquitectura API se muestra en Figura 9.

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

Cada API se compone de cuatro grupos de configuraciones o controles relacionados con el canal UART, de modo que los usuarios solo necesitan ingresar el parámetro CH deseado. Para configurar la API relevante, solo se requiere tener una tabla de parámetros de configuración básica UART adicional con el formulario de estructura, USART_InitTypeDef. La API implementará la configuración básica de UART de acuerdo con el contenido de los parámetros en la tabla. Consulte la sección "Descripción de API" para ver la tabla de estructura de configuración básica de UART.

El uart_module.c/.h fileLos s solo contienen la interrupción (CHx_IRQ) ​​y la tabla de estado (CHx Status) de cada canal UART, mientras que todas las configuraciones necesarias para la comunicación UART las proporciona ht32_board_config.h. Los parámetros relevantes del hardware en ht32_board_config.h file se muestran en la siguiente tabla. Se proporcionan más detalles en la sección "Descripción de la configuración".

Los parámetros relevantes del hardware en ht32_board_config.h incluyen configuraciones de E/S y configuraciones del puerto UART físico, como se muestra a continuación.

Tabla 3. Símbolos de definición en ht32_board_config.h

Símbolo Descripción
HTCFG_UARTM_CH0 Nombre del puerto UART físico; Examparchivo: UART0, UART1…
HTCFG_UARTM0_TX_GPIO_PORT Define el nombre del puerto de TX para CH0; Exampejemplo: A, B, C…
HTCFG_UARTM0_TX_GPIO_PIN Define el número de pin de TX para CH0; Examparchivo: 0~15
HTCFG_UARTM0_RX_GPIO_PORT Define el nombre del puerto de RX para CH0; Exampejemplo: A, B, C…
HTCFG_UARTM0_RX_GPIO_PIN Define el número de pin de TX para CH0; Examparchivo: 0~15
HTCFG_UARTM0_TX_BUFFER_SIZE Define el tamaño del búfer TX para CH0; Exampes: 128
HTCFG_UARTM0_RX_BUFFER_SIZE Define el tamaño del búfer RX para CH0; Exampes: 128

Para modificar la configuración AFIO del canal UART, consulte la hoja de datos del dispositivo correspondiente. Actualmente, solo tienen efecto las definiciones de E/S para UART CH0, ya que solo UART CH0 se ha configurado en ht32_board_config.h. Para agregar UART CH1~3, sus definiciones de E/S deben completarse consultando la definición de UART CH0 o consultando la sección "Modificación de configuración y preguntas frecuentes".

Hay tres características principales de la arquitectura API: 

  1. Se admiten hasta cuatro canales UART. Sus parámetros de entrada son UARTM_CH0, UARTM_CH1, UARTM_CH2 y UARTM_CH3.
  2.  Se puede configurar la cantidad de canales UART y los canales no utilizados no reducirán el espacio de memoria disponible.
  3. Todas las configuraciones de UART y definiciones de E/S están completamente separadas de las API. Esto aumenta la comodidad de gestión de la configuración de valores y reduce la posibilidad de que se produzcan configuraciones incorrectas o faltantes.

Descripción de la configuración 

Esta sección presentará la configuración de parámetros en ht32_board_config.h y uart_module.h files.

  1. ht32_board_config.h: esto file se utiliza para definiciones de pines y configuraciones relevantes de la placa de desarrollo, que incluyen el canal IP UART (UART0, UART1, USART0…) utilizado por el kit de inicio (SK), las ubicaciones de pines TX/RX correspondientes y el tamaño del búfer TX/RX. La Figura 10 muestra el contenido de configuración del kit de inicio HT32F52352. Dependiendo de la integración funcional del desarrollo, los usuarios pueden consultar la sección "Asignación de pines" de la hoja de datos del dispositivo utilizado para implementar las definiciones de pines. Se describirán más detalles sobre la modificación de la configuración en la sección "Modificación de la configuración y preguntas frecuentes".
    Figura 10. Configuración de ht32_board_config.h (HT32F52352)
    Ajustes
  2. uart_module.h: Este es el encabezado de la API file utilizado por el código de la aplicación, que incluye las configuraciones predeterminadas relevantes, definiciones de funciones, etc. Como se muestra en la Figura 11, el contenido de la configuración predeterminada se puede sobrescribir mediante configuraciones externas, como las configuraciones en ht32_board_config.h file.
    Figura 11. Configuración predeterminada en uart_module.h
    Configuración predeterminada
Descripción API
  1. Descripción del tipo de datos del código de aplicación.
    • USART_InitTypeDef
      Esta es la estructura de configuración básica de UART que se compone de configuraciones BaudRate, WordLength, StopBits, Paridad y Modo, como se muestra a continuación.
      Variable Nombre Tipo Descripción
      USART_BaudRate u32 Velocidad de transmisión en baudios de comunicación UART
      USART_WordLength u16 Longitud de la palabra de comunicación UART: 7, 8 o 9 bits
      USART_StopBits u16 Longitud del bit de parada de comunicación UART: 1 o 2 bits
      USART_Paridad u16 Paridad de comunicación UART: par, impar, marca, espacio o sin paridad
      Modo_USART u16 modo de comunicación UART; las API solo admiten el modo normal
  2. Antes de utilizar las funciones API, complete la configuración básica de UART en el programa principal. La configuración básica de UART para este código de aplicación se muestra en la Figura 12. Aquí la velocidad en baudios es 115200 bps, la longitud de la palabra es de 8 bits, la longitud del bit de parada es de 1 bit y no hay paridad.
    Figura 12. Configuración básica de UART
    Configuración básica
  3. La Figura 13 muestra las funciones API declaradas en uart_module.h file. Las siguientes tablas explican la función, los parámetros de entrada y el uso de las funciones API.
    Figura 13. Declaraciones de funciones API en uart_module.h 
    Declaraciones de funciones API
Nombre anular UARTM_Init(u32 CH, USART_InitTypeDef *pUART_Init, u32 uRxTimeOutValue)
Función Inicialización del módulo UART
  Aporte CH canal UART
pUART_Init Puntero de estructura de configuración básica UART
 uRxTimeOutValue Valor de tiempo de espera UART RX FIFO. Cuando el RX FIFO recibe nuevos datos, el contador se restablecerá y reiniciará. Una vez que el contador alcance el valor de tiempo de espera preestablecido y se haya habilitado la interrupción de tiempo de espera correspondiente, se generará una interrupción de tiempo de espera.
 Uso UARTM_Init(UARTM_CH0, &USART_InitStructure, 40);//Ejecutar la configuración básica de UART//Consulte la Figura 12 para ver la configuración de USART_InitStructure
Nombre u32 UARTM_WriteByte(u32 CH, u8 uDatos)
Función Operación de bytes de escritura del módulo UART (TX)
Aporte CH canal UART
uDatos Los datos a escribir
Producción ÉXITO Exitoso
ERROR Fallido
Uso UARTM_WriteByte(UARTM_CH0, 'A'); //UART escribe 1 byte – 'A'
Nombre u32 UARTM_Write(u32 CH, u8 *pBuffer, u32 uLongitud)
Función Operación de escritura del módulo UART (TX)
 Aporte CH canal UART
pbúfer Puntero de búfer
uLongitud La longitud de los datos a escribir.
Producción ÉXITO Exitoso
ERROR Fallido
 Uso u8 Prueba[] = “¡Esto es una prueba!\r\n”; UARTM_Write(UARTM_CH0, Prueba, tamaño de(Prueba) -1); //UART escribe datos de pBuffer
Nombre u32 UARTM_ReadByte(u32 CH, u8 *pDatos)
Función Operación de bytes de lectura del módulo UART (RX)
Aporte CH canal UART
pData La dirección para colocar los datos leídos.
Producción ÉXITO Exitoso
ERROR Fallido (sin datos)
   Uso u8 Datos temporales; if (UARTM_ReadByte(UARTM_CH0, &TempData) == SUCCESS){UARTM_WriteByte(UARTM_CH0, TempData);}//Si UARTM_ReadByte() devuelve ÉXITO, entonces UART escribe este byte de datos
Nombre u32 UARTM_Read(u32 CH, u8 *pBuffer, u32 uLongitud)
Función Operación de lectura del módulo UART (RX)
 Aporte CH canal UART
pbúfer Puntero de búfer
uLongitud La longitud de los datos a leer.
Producción Leer recuento Se ha leído la longitud de los datos.
     Uso u8 Prueba2[10]; u32 León; Len = UARTM_Read(UARTM_CH0, Test2, 5);if (Len > 0){UARTM_Write(UARTM_CH0, Test2, Len);}//UARTM_Read() lee 5 bytes de datos y almacena datos en Test2, y asigna el recuento de bytes leídos a Len // Escribe los datos obtenidos de Test2
Nombre u32 UARTM_GetReadBufferLength(u32 CH)
Función Obtener la longitud del búfer de lectura (RX)
Aporte CH canal UART
Producción uLongitud Leer longitud del buffer
  Uso UARTM_Init(UARTM_CH0, &USART_InitStructure, 40); //inicialización del módulo UART while (UARTM_GetReadBufferLength(UARTM_CH0) < 5);//Espera hasta que UARTM_ReadBuffer haya recibido 5 bytes de datos
Nombre u32 UARTM_GetWriteBufferLength(u32 CH)
Función Obtener la longitud del búfer de escritura (TX)
Aporte CH canal UART
Producción uLongitud Longitud del buffer de escritura
Nombre u8 UARTM_IsTxFinished(u32 CH)
Función Obtener el estado de TX
Aporte CH canal UART
Producción VERDADERO Estado de TX: terminado
FALSO Estado de TX: no terminado
      Uso UARTM_WriteByte(UARTM_CH0, 'O'); #if 1 // “uart_module.c” SVN >= 525 requerido mientras (UARTM_IsTxFinished(UARTM_CH0) == FALSE) #else while (1) #endif //Esta API se puede utilizar para verificar el estado de TX, como se muestra arriba; espere hasta que la API UARTM_WriteByte() haya finalizado, es decir, el estado de TX sea VERDADERO, y luego continúe con las acciones posteriores.//Se agrega una restricción porque esta función no se agregó hasta que el número de versión SVN en uart_module.c sea 525.
Nombre vacío UARTM_DiscardReadBuffer(u32 CH)
Función Descartar los datos en el buffer de lectura.
Aporte CH canal UART

Uso de API exampLos 

Esta sección demostrará la escritura y lectura de API ex.amparchivos del código de aplicación “Module_UART” utilizando el proceso de inicialización y el archivo “UART_Module_Example” proceso de código de aplicación. Antes de utilizar las API, los usuarios deben incluir el encabezado de la API. file en el código fuente del programa principal file (#incluir “middleware/uart_module.h”).

Como se muestra en la Figura 14, al ingresar al proceso de inicialización, primero defina la estructura de configuración básica de UART. Luego configure los miembros de la estructura de configuración básica de UART, incluidos BaudRate, WordLength, StopBits, Parity y Mode. Finalmente, llame a la función de inicialización de la API, cuya finalización indica el final del proceso de inicialización. Después de esto, los usuarios pueden continuar con las operaciones de escritura y lectura según la configuración básica preestablecida de UART.

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

El “UART_Module_Example” el código de la aplicación demuestra las operaciones de lectura y escritura de la API en forma de bucle invertido. El diagrama de flujo para esto se muestra en la Figura 15. Las funciones API utilizadas incluyen UARTM_WriteByte(), UARTM_Write(), UARTM_ReadByte(), UARTM_Read() y UARTM_GetReadBufferLength(). Su descripción se proporciona en la sección "Descripción de API".

Figura 15. Diagrama de flujo de escritura y lectura ExampLos
Diagrama de flujo de escritura y lectura ExampLos

Hay otro código de aplicación "UART_Bridge" en la carpeta "Module_UART" cuyo file La descripción se introduce en la sección “Estructura del directorio”. El código de aplicación “UART_Bridge” activa dos canales UART, UART CH0 y UART CH1, y luego personaliza el protocolo de comunicación entre los dos dispositivos UART a través de estructuras COMMAND, gCMD1 y gCMD2. Estos se definen en uart_bridge.c, como se muestra a continuación. UARTBridge_CMD1TypeDef gCMD1:

Variable Nombre Tipo Descripción
uEncabezado u8 Encabezamiento
uCmd u8 Dominio
uDatos[3] u8 Datos

UARTBridge_CMD2TypeDef gCMD2:

Variable Nombre Tipo Descripción
uEncabezado u8 Encabezamiento
uCmda u8 Comando A
uCmdB u8 Comando B
uDatos[3] u8 Datos

En el código de la aplicación "UART_Bridge", use gCMD1 para recibir datos como un paquete de comando y luego analizarlos. Luego, de acuerdo con el protocolo de comunicación personalizado, configure gCMD2 como paquete de respuesta y transmítalo. El siguiente es un ex.amparchivo de un paquete de comando gCMD1) y un paquete de respuesta (gCMD2). Paquete de comando (UARTBridge_CMD1TypeDef gCMD1):

byte 0 byte 1 Byte 2 ~ Byte 4
uEncabezado uCmd uDatos [3]
"A" “1” “x, y, z”

Paquete de respuesta (UARTBridge_CMD2TypeDef gCMD2):

byte 0 byte 1 byte 2 Byte 3 ~ Byte 5
uEncabezado uCmda uCmdB uDatos [3]
"B" "a" “1” “x, y, z”

Ocupación de recursos
Tomando el HT32F52352 como examparchivo, los recursos ocupados por el módulo UART se muestran a continuación.

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

Nota:

  1. Las variables globales, incluidas las banderas y el estado de un solo canal, ocupan 40 bytes de RAM.
  2.  Esto es para una condición en la que se utiliza un solo canal y el tamaño del búfer TX/RX es 128/128 bytes. El tamaño del búfer se puede configurar según los requisitos de la aplicación.

Tabla 4. Ocupación de recursos del código de aplicación 

  • Entorno de compilación: MDK-Arm V5.36, ARMCC V5.06 actualización 7 (compilación 960)
  • Opción de optimización: Nivel 2 (-O2)

Instrucciones de uso

Este capítulo presentará la preparación ambiental para el código de la aplicación "Module_UART", así como los pasos de compilación y prueba.

Preparación Ambiental
El hardware y el software necesarios para el código de aplicación "Module_UART" se enumeran a continuación.
Tabla 5. Preparación ambiental de hardware/software 

Hardware/Software Contar Nota
Kit de inicio 1 Esta nota de aplicación utiliza el kit de inicio HT32F52352 como example
Cable USB 1 Micro USB, conectado a la PC
Código de aplicación La ruta de descarga, file y la configuración del directorio se presentan en la sección "Descarga y preparación de recursos". Ruta: "\\application\Module_UART\UART_Module_Exampla"
Término Tera Consulte la sección "Software de terminal"
Keil IDE Keil uVision V5.xx

Primero, utilice el kit de inicio HT32F52352 combinado con la función de puerto COM virtual (VCP) de e-Link32 Lite para la introducción de la aplicación UART. Esto requiere que se implemente la siguiente preparación ambiental:

  1. Hay dos interfaces USB en la placa. Utilice el cable USB para conectar la PC y la interfaz eLink32 Lite en la placa como se muestra en la Figura 16-(a).
  2. Como el código de la aplicación necesita utilizar la función del puerto COM virtual (VCP) e-Link32 Lite, asegúrese de que el PAx*2 y el DAP_Tx del UART Jumper-J2*1 estén en cortocircuito mediante un puente. La ubicación de J2 se indica en la Figura 16-(b).

Nota

  1. J2 en el kit de inicio tiene dos opciones, PAx y DAP_Tx en cortocircuito o PAx y RS232_Tx en cortocircuito. Consulte el manual del usuario del kit de inicio para conocer las funciones de configuración detalladas.
  2. La ubicación del pin MCU UART RX en diferentes kits de inicio es diferente. este exampEl archivo usa PAx para indicar el pin RX.

Figura 16. Diagrama de bloques del kit inicial HT32
Diagrama de bloques del juego

Ahora utilice la placa de destino del usuario combinada con la función de puerto COM virtual (VCP) del e-Link32 Pro para la introducción de la aplicación UART. Esto requiere que se implemente la siguiente preparación ambiental:

  1. Un lado de e-Link32 Pro está conectado a una PC mediante un cable Mini USB y el otro lado está conectado a la placa de destino del usuario a través de su cable gris de 10 bits. La conexión entre las interfaces SWD del cable y la placa de destino se implementa mediante líneas Dupont, como se muestra en la Figura 17-(a).
  2. Los pines de comunicación serie del e-Link32 Pro son Pin#7 VCOM_RXD y Pin#8-VCOM_TXD. Estos deben conectarse a los pines TX y RX de la placa de destino del usuario, como se muestra en la Figura 17-(b).
    Figura 17. Diagrama de bloques de la placa de destino del usuario e-Link32 Pro +
    Tablero de destino del usuario

Compilación y prueba
Esta sección tomará la “aplicación\Module_UART\UART_Module_Example” como example para presentar los procesos de compilación y prueba. Antes de esto, asegúrese de que se hayan implementado todos los preparativos descritos en la sección anterior y de que se haya descargado el software del terminal Tera Term.

Los pasos operativos detallados se resumen a continuación.
Paso 1. Prueba de encendido

Configure el entorno de hardware como se describe en la sección anterior. Después del encendido, se iluminará el LED de encendido D9 en la parte inferior izquierda del kit de inicio. El LED USB D1 en el e-Link32 Lite en la parte superior derecha se iluminará una vez que se haya completado la enumeración de USB. Si D1 no se ilumina después de un largo período de tiempo, confirme si el cable USB puede comunicarse. De lo contrario, retírelo y vuelva a insertarlo.

Paso 2. Generar un proyecto
Abra la aplicación\Module_UART\UART_Module_Exampcarpeta de archivo, haga clic en _CreateProject.bat file para generar un proyecto, como se muestra en la Figura 18. Dado que esta nota de aplicación utiliza el kit de inicio HT32F52352, abra el proyecto IDE de Keil “Project_52352.uvprojx” ubicado en la carpeta MDK_ARMv5.

Figura 18. Ejecute _CreateProject.bat para generar proyecto
Generar proyecto

Paso 3. Compilar y programar
Después de abrir el proyecto, primero haga clic en "Construir" (o use el acceso directo "F7"), luego haga clic en "Descargar" (o use el acceso directo "F8"). Después de esto, los resultados de la compilación y la descarga se mostrarán en la ventana Resultados de la compilación. Ver Figura 19.

Figura 19. Resultados de compilación y descarga
Resultados de compilación y descarga

Paso 4. Abra el software Tera Term y configure el puerto serie
Abra el software Tera Term y el puerto COM. Preste atención a si el número de puerto COM generado por el Starter Kit es correcto o no. Luego haga clic en “Configuración >> Puerto serie” para ingresar a la interfaz de configuración. La configuración de la interfaz UART del código de aplicación “Module_UART” se describe en la sección “Software del terminal”. El resultado de la configuración se muestra en la Figura 20.

Figura 20. Resultado de la configuración del puerto serie de Tera Term
Resultado de la configuración
Paso 5. Reinicie el sistema y pruebe
Presione la tecla de reinicio SK – Reinicio B1. Después de esto, aparecerá un "¡ABC, esto es una prueba!" el mensaje será
se transmitirá a través de la API y se mostrará en la ventana de Tera Term, como se muestra en la Figura 21. Con respecto a la función de recepción, al ingresar datos en la ventana de Tera Term, se utilizará la API correspondiente para determinar la longitud del búfer de recepción. Cuando los datos recibidos por la PC alcancen los 5 bytes, los 5 bytes de datos recibidos se enviarán secuencialmente. Como se muestra en la Figura 22, los datos ingresados ​​secuencialmente son “1, 2, 3, 4, 5”, que se reciben y determinan a través de la API. Después de esto, los datos “1, 2, 3, 4, 5” se imprimirán después de las cinco entradas.

Figura 21. Prueba funcional del código de aplicación “Module_UART”: transmisión
Prueba funcional del código de aplicación

Figura 22. Prueba funcional del código de aplicación “Module_UART” – Recibir
Prueba funcional del código de aplicación

Instrucciones de trasplante
Esta sección presentará cómo integrar las API en los proyectos del usuario.
Paso 1. Agregue uart_module.c file en el proyecto. Haga clic derecho en la carpeta Usuario. Seleccione "Agregar existente Files al grupo 'Usuario'…”, luego seleccione uart_module.c file y haga clic en “Agregar”, como se muestra en la Figura 23. Consulte la sección “Estructura de directorio” para file descripción del camino.

Figura 23. Agregar uart_module.c File para proyectar
File para proyectar

Paso 2. Agregue ring_buffer.c file en el proyecto. Haga clic derecho en la carpeta Usuario. Seleccione "Agregar existente Files al grupo 'Usuario'…”, luego seleccione ring_buffer.c file y haga clic en “Agregar”, como se muestra en la Figura 24.\ Consulte la sección “Estructura de directorio” para ver file descripción del camino.
Figura 24. Agregar ring_buffer.c File para proyectar 
File para proyectar

Paso 3. Incluir el encabezado API file al principio de main.c, como se muestra en la Figura 25. (Ext: #include “middleware/uart_module.h”)
Figura 25. Incluir encabezado API File a principal.c
Incluir encabezado API File

Paso 4. Implemente la configuración requerida para la comunicación UART usando ht32_board_config.h file. Esto se presenta en detalle en las secciones "Descripción de la configuración" y "Modificación de la configuración y preguntas frecuentes".

Modificación de configuración y preguntas frecuentes 

Esta sección presentará cómo modificar la configuración de UART y explicará algunas preguntas comunes que surgen durante el uso.

Cambiar la asignación de pines UART 

  1. Consultando el capítulo "Asignación de pines" de la hoja de datos HT32F52352, busque la tabla de asignación de funciones alternativas que enumera las funciones AFIO del tipo de dispositivo. Para conocer los pines relevantes de UART, consulte la columna "AF6 USART/UART", como se muestra en la Figura 26.
    Figura 26. Tabla de asignación de funciones alternativas HT32F52352
    Tabla de asignación de funciones alternativas
  2. Este paso guiará a los usuarios a ubicar los pines UART correspondientes utilizando la tabla anterior. El HT32F52352 exampEl archivo utiliza USART1 como canal predeterminado. Aquí, los pines TX y RX son USR1_TX y USR1_RX y están ubicados en PA4 y PA5 respectivamente. La Figura 27 muestra la correspondencia de pines así como las definiciones de pines en “ht32_board_config.h”. Los campos vacíos de "Paquete" en la tabla de asignación de pines significan que no hay GPIO relevantes en este paquete. Para modificar los pines UART, busque las ubicaciones de los pines de destino y vuelva a definir los pines usando "ht32_board_config.h". file.
    Figura 27. Correspondencia de pines y modificación de configuración
    Modificación de configuración

Agregar un canal UART
Tomando el HT32F52352 HTCFG_UARTM_CH1 como examparchivo, aquí se describe cómo agregar un nuevo canal UART.

Modificar el ht32_board_config.h file
Consultando el capítulo "Asignación de pines" de la hoja de datos HT32F52352, busque la tabla de asignación de funciones alternativas que enumera las funciones AFIO del tipo de dispositivo. Como USART1 se ha utilizado como HTCFG_UARTM_CH0, el HTCFG_UARTM_CH1 recién agregado puede elegir USART0. Aquí, los pines TX y RX están ubicados en PA2 y PA3 respectivamente, como se muestra en la mitad superior de la Figura 28. Las modificaciones correspondientes se implementan usando las líneas de código 120~126 en ht32_board_config.h, como se muestra en el cuadro de puntos rojos en la Figura 28.

Figura 28. Agregar un canal UART
Canal UART

Preguntas frecuentes
Q: En el paso 5 de la sección Compilación y prueba, la prueba funcional de transmisión es normal. Aquí, el “ABC ¡Esto es prueba!” El mensaje se ha mostrado correctamente; sin embargo, para la función de recepción, ¿por qué no se devuelven ni se muestran los cinco valores de entrada?
A: Compruebe si los pines MCU UART RX y DAP_Tx del UART Jumper-J2 se han puesto en cortocircuito mediante un puente. Como el código de aplicación “Module_UART” necesita usar el puerto COM virtual (VCP) de e-Link32 Lite, la configuración de cortocircuito debe aplicarse a los dos pines izquierdos del UART Jumper-J2, como se muestra en la Figura 29.

Figura 29. Configuración del puente UART J2
Puente UART

P: Después Al ejecutar "Build" (o acceso directo "F7"), aparece un mensaje de error que indica que la versión de la biblioteca de firmware es anterior a la que se requiere. Ver Figura 30.
A: La implementación del código de la aplicación “Module_UART” debe incluir uart_module.c/h files que requiere una determinada versión de la biblioteca de firmware. Cuando aparece un mensaje de error de este tipo, significa que la biblioteca de firmware utilizada actualmente es una versión anterior. Por lo tanto, es necesario descargar la versión más reciente a través del enlace proporcionado en la sección “Biblioteca de firmware”.

Figura 30. Mensaje de error de versión de la biblioteca de firmware
Mensaje de error de versión

Conclusión

Este documento proporciona una introducción básica para ayudar a los usuarios a comprender mejor el código de aplicación "Module_UART" y el protocolo de comunicación UART. A esto le siguió la descarga y preparación del recurso. El capítulo Descripción funcional presentó la file estructura de directorios, arquitectura API, descripción de API y uso de API, por ejemploamples. El capítulo de Instrucciones de uso demostró la preparación ambiental, la compilación y las pruebas del código de la aplicación "Module_UART". También proporcionó instrucciones para el trasplante de código y la configuración de modificación, además de explicar algunos problemas comunes que pueden surgir. Todo esto combinado permitirá a los usuarios comprender rápidamente cómo utilizar las API y, posteriormente, reducir la cantidad de tiempo para comenzar.

Material de referencia

Para obtener más información, consulte Holtek. websitio: www.holtek.com

Versiones e información de modificación

Fecha Autor Liberar Información de modificación
2022.04.30 蔡期育 (Chi-Yu Tsai) V1.00 Primera versión

Descargo de responsabilidad

Toda la información, marcas comerciales, logotipos, gráficos, videos, clips de audio, enlaces y otros elementos que aparecen en este web('Información') son solo para referencia y están sujetos a cambios en cualquier momento sin previo aviso y a discreción de Holtek Semiconductor Inc. y sus empresas relacionadas (en adelante, 'Holtek', 'la empresa', 'nosotros', ' nosotros' o 'nuestro'). Si bien Holtek se esfuerza por garantizar la precisión de la Información en este websitio, Holtek no otorga ninguna garantía expresa o implícita sobre la precisión de la Información. Holtek no asumirá ninguna responsabilidad por errores o fugas.
Holtek no será responsable de ningún daño (incluidos, entre otros, virus informáticos, problemas del sistema o pérdida de datos) que surja del uso o en relación con el uso de este websitio por cualquier parte. Puede haber enlaces en esta área, que le permiten visitar la websitios de otras empresas.
Estos webHoltek no controla los sitios. Holtek no se responsabilizará ni garantizará la información que se muestre en dichos sitios. Hipervínculos a otros weblos sitios son bajo su propio riesgo.

Limitación de responsabilidad

En ningún caso, Holtek Limited será responsable ante ninguna otra parte por ninguna pérdida o daño, sea cual sea o como sea, causado directa o indirectamente en relación con su acceso o uso de este websitio, el contenido del mismo o cualquier producto, material o servicio.

Ley aplicable
El Aviso Legal contenido en el webse regirá e interpretará de conformidad con las leyes de la República de China. Los usuarios se someterán a la jurisdicción no exclusiva de los tribunales de la República de China.

Actualización del descargo de responsabilidad
Holtek se reserva el derecho de actualizar el Descargo de responsabilidad en cualquier momento con o sin previo aviso, todos los cambios entran en vigencia inmediatamente después de su publicación en el websitio.

Documentos / Recursos

Nota de aplicación HOLTEK HT32 MCU UART [pdf] Manual del 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

Deja un comentario

Su dirección de correo electrónico no será publicada. Los campos obligatorios están marcados *