Nota de aplicação HOLTEK HT32 MCU UART Manual do usuário
HOLTEK HT32 MCU UART Nota de aplicação

Introdução

O Receptor/Transmissor Assíncrono Universal - UART é uma interface de transmissão serial amplamente utilizada que fornece transmissão de dados full-duplex assíncrona flexível. O código de aplicativo “Module_UART” fornecido nesta nota de aplicativo usa interrupções TX/RX com buffers de anel de software para implementar funções simples de transmissão/recepção UART por meio de APIs, cujas funções relacionadas são descritas abaixo. Isso simplificará todo o processo de transmissão de dados e permitirá que os usuários entendam e implementem rapidamente os aplicativos de comunicação UART.

  • Funções de transmissão/recebimento: leitura de byte, gravação de byte, leitura de buffer, gravação de buffer, etc.
  • Funções de status: obtenha o comprimento do buffer, status TX, etc.

Este documento apresentará primeiro o protocolo de comunicação UART, que ajudará os usuários a entender melhor a comunicação UART desde o princípio até a aplicação. Segue-se o download e preparação dos recursos necessários para o código do aplicativo, incluindo a biblioteca de firmware, download do código do aplicativo, file e configuração de diretório, bem como uma introdução à ferramenta de software de terminal usada na nota de aplicação. No capítulo Descrição Funcional, serão apresentados a estrutura de diretórios do código do aplicativo, as configurações de parâmetros e a descrição da API. O uso da API será descrito usando o código do aplicativo “Module_UART” e o consumo de recursos Flash/RAM necessários para as APIs também serão listados. O capítulo Instruções de uso guiará o usuário pelas etapas de preparação ambiental, compilação e teste para confirmar se o código do aplicativo funcionará corretamente. Ele fornecerá instruções explicando como integrar as APIs nos projetos do usuário e, finalmente, fornecerá uma referência para modificações e problemas comuns que podem ser encontrados.

Abreviações usadas: 

  • UART: Receptor / transmissor assíncrono universal
  • API: Interface de programação de aplicativos
  • LSB: Bit menos significativo
  • MSB: Bit Mais Significativo
  • Computador: Computador pessoal
  • SK: Kit inicial, placa de desenvolvimento HT32
  • IDE: Ambiente de Desenvolvimento Integrado

Protocolo de Comunicação UART

O UART é um tipo de interface de comunicação serial que implementa a conversão de dados paralelo para serial em seu transmissor e depois se comunica serialmente com um receptor semelhante. O receptor então realiza uma conversão de dados serial para paralelo após a recepção dos dados. A Figura 1 mostra um diagrama esquemático de comunicação serial mostrando como os dados são transferidos em ordem bit a bit. Portanto, para comunicação bidirecional entre transmissor e receptor, apenas dois fios, TX e RX, são necessários para transferir dados serialmente entre si. TX é o pino no qual o UART transmite os dados seriais e está conectado ao pino RX do receptor. Portanto, os dispositivos transmissores e receptores precisam conectar seus pinos TX e RX para realizar a comunicação bidirecional UART, conforme mostrado na Figura 2.

Figura 1. Diagrama de comunicação serial
Diagrama de Comunicação Serial

Figura 2. Diagrama de Circuito UART
Diagrama de Circuito UART

Durante a comunicação serial UART, a transmissão de dados é assíncrona. Isso significa que não há relógio ou outro sinal de sincronização entre o transmissor e o receptor. Aqui é usada uma taxa de transmissão, que é a velocidade de transmissão/recepção de dados seriais e que é definida por ambos os lados antes das transferências de dados. Além disso, bits especiais, como bits de início e parada, são adicionados ao início e ao fim do pacote de dados para formar um pacote de dados UART completo. A Figura 3 mostra a estrutura do pacote de dados UART enquanto a Figura 4 mostra um pacote de dados UART de 8 bits sem um bit de paridade.
Figura 3. Estrutura do pacote de dados UART
Estrutura do pacote de dados UART

Figura 4. Formato do pacote de dados UART de 8 bits
Formato do pacote de dados
Cada parte do pacote de dados UART é apresentada na ordem abaixo.

  • Bit de início: Isso indica o início de um pacote de dados. O pino UART TX geralmente permanece em um nível lógico alto antes do início da transmissão. Se a transmissão de dados começar, o transmissor UART puxará o pino TX de alto para baixo, ou seja, de 1 para 0, e então o manterá lá por um ciclo de clock. O receptor UART começará a ler os dados quando uma transição alta para baixa for detectada no pino RX.
  • Dados: Estes são os dados reais transferidos, com um comprimento de dados de 7, 8 ou 9 bits. Os dados geralmente são transferidos primeiro com o LSB.
  • Bit de paridade: O número de lógica “1” nos dados é usado para determinar se algum dado foi alterado durante a transmissão. Para paridade par, o número total de lógica “1” nos dados deve ser um número par, inversamente, o número total de lógica “1” nos dados deve ser um número ímpar para paridade ímpar.
  • Bit de parada: Isso indica o fim de um pacote de dados, onde o transmissor UART puxará o pino TX de baixo para alto, ou seja, de 0 para 1, e o manterá lá por um período de tempo de 1 ou 2 bits.

Como mencionado anteriormente, como não há sinal de clock no circuito UART, a mesma velocidade de transmissão/recepção de dados seriais, conhecida como baud rate, deve ser definida entre o transmissor e o receptor para implementar uma transmissão sem erros. A taxa de transmissão é definida pelo número de bits transferidos por segundo, em bps (bit por segundo). Algumas taxas de transmissão padrão e comumente usadas são 4800bps, 9600bps, 19200bps, 115200bps, etc. O tempo correspondente necessário para transferir um único bit de dados é mostrado abaixo.
Tabela 1. Taxa de transmissão vs. Tempo de transmissão de 1 bit 

Taxa de transmissão Transmissão de 1 Bit Tempo
4800bps 208.33µs
9600bps 104.16µs
19200bps 52.08µs
115200bps 8.68µs

Download e preparação de recursos

Este capítulo apresentará o código do aplicativo e a ferramenta de software utilizada, bem como como configurar o diretório e file caminho.

Biblioteca de firmware 

Primeiro, certifique-se de que a biblioteca de firmware Holtek HT32 foi baixada antes de usar o código do aplicativo. O link para download é mostrado abaixo. Aqui há duas opções, HT32_M0p_Vyyyymmdd.zip para a série HT32F5xxxx e HT32_M3_Vyyyymmdd.zip para a série HT32F1xxxx. Baixe e descompacte o desejado file.

O zíper file contém várias pastas que podem ser classificadas como Documento, Biblioteca de Firmware, Ferramentas e outros itens, cujo caminho de colocação é mostrado na Figura 5. O zip da biblioteca de firmware HT32 file com um file nome de HT32_STD_xxxxx_FWLib_Vm.n.r_s.zip está localizado na pasta Firmware_Library.

Figura 5. HT32_M0p_Vyyyymmdd.zip Conteúdo
Conteúdo

Código de Aplicação
Baixe o código do aplicativo no seguinte link. O código do aplicativo é compactado em um arquivo zip file com um file nome de HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip. Ver Figura 6 para o file convenções de nomes.

Figura 6. Código do Aplicativo File Nome Introdução 

Link para download: https://mcu.holtek.com.tw/ht32/app.fw/Module_UART/ Código de Aplicação

File e configuração de diretório
Como o código do aplicativo não contém a biblioteca de firmware HT32 files, o código do aplicativo e a biblioteca de firmware descompactados files devem ser colocados no caminho correto antes de iniciar a compilação. O CEP do código do aplicativo file geralmente contém uma ou mais pastas, como aplicativo e biblioteca, conforme mostrado na Figura 7. Coloque a pasta do aplicativo no diretório raiz da biblioteca de firmware HT32 para concluir o file configuração de caminho, conforme mostrado na Figura 8. Como alternativa, descompacte o código do aplicativo e a biblioteca de firmware HT32 simultaneamente no mesmo caminho para obter os mesmos resultados de configuração.

Figura 7. HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip Conteúdo
Conteúdo

Figura 8. Caminho de descompressão
Caminho de descompressão

Software Terminal
O código do aplicativo pode transferir mensagens através da porta COM para implementar a seleção de função ou exibição de status. Isso requer que o lado do host tenha o software do terminal instalado com antecedência. Os usuários podem escolher o software de conexão apropriado ou usar software licenciado gratuito, como o Tera Term. No código do aplicativo, o canal UART é configurado com um comprimento de palavra de 8 bits, sem paridade, 1 bit de parada e uma taxa de transmissão de 115200bps.

Descrição funcional

Este capítulo fornecerá uma descrição funcional para o código do aplicativo, incluindo informações sobre a estrutura do diretório, arquitetura da API, descrição da configuração, etc.

Estrutura de Diretório
O código do aplicativo file contém uma pasta de aplicativos. A próxima camada é a pasta “Module_UART” que contém dois programas aplicativos, “UART_Module_Example” e “UART_Bridge”. O relevante files estão listados e descritos abaixo.
Tabela 2. Estrutura do Diretório do Código do Aplicativo

Pasta / File Nome Descrição
\\aplicativo\Module_UART\UART_Module_Example*1
_CriarProjeto.bat Scripts em lote para criar projeto files
_ProjectSource.ini Inicialização file para adicionar código-fonte a projetos
ht32_board_config.h Configurar file relacionado à atribuição de E/S de periférico IC
ht32fxxxx_01_it.c Programa de serviço de interrupção file
principal.c Código-fonte do programa principal
\\aplicativo\Module_UART\UART_Bridge*2
_CriarProjeto.bat Scripts em lote para criar projeto files
_ProjectSource.ini Inicialização file para adicionar código-fonte a projetos
ht32_board_config.h Configurar file relacionado à atribuição de E/S de periférico IC
ht32fxxxx_01_it.c Programa de serviço de interrupção file
principal.c Código-fonte do programa principal
ponte_uart.h ponte_uart.c Cabeçalho da ponte UART file e código fonte file
\\utilitários\middleware
módulo_uart.h*3 módulo_uart.c*3 Cabeçalho da API file e código fonte file
\\utilitários\comuns
buffer_de_anel.h buffer_de_anel.c Cabeçalho do buffer de anel de software file e código fonte file

Observação: 

  1. No “UART_Module_Example” código do aplicativo, as operações de leitura e gravação da API são executadas de maneira loopback, consulte o “API Usage Examples” para mais detalhes.
  2.  No código do aplicativo “UART_Bridge”, dois canais UART, UART CH0 e UART CH1, são ativados e o protocolo de comunicação personalizado através das estruturas COMMAND é implementado entre os dois dispositivos UART. Para obter mais informações, consulte o “Ex. de uso da APIampseção “les”.
  3. O código do aplicativo precisa usar o uart_module.c/h files que têm um requisito de versão de biblioteca de firmware. O requisito pode mudar periodicamente de acordo com a atualização. Para confirmar o requisito da versão atual da biblioteca de firmware, consulte o conteúdo da verificação de dependência pesquisando a palavra-chave “Verificação de dependência” no main.c file. Se a versão da biblioteca de firmware não atender aos requisitos, baixe a versão mais recente no link fornecido na seção “Biblioteca de firmware”.

Arquitetura da API
Cada API possui um parâmetro importante CH, que é o UART Channel. Isso determina qual canal UART deve ser controlado. Atualmente, até quatro canais UART são suportados e, portanto, quatro símbolos constantes são definidos da seguinte forma. Estes são usados ​​como o parâmetro CH, fornecendo às APIs a base para o controle.

  • 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 espaço de memória não será desperdiçado se apenas um canal UART for usado. Isso ocorre porque o número de canais UART suportados pode ser definido e o código do canal UART não utilizado será removido pelo pré-processador para aumentar o espaço de memória disponível. A arquitetura da API é mostrada em Figura 9.

Figura 9. Diagrama de blocos da arquitetura da API
Diagrama de blocos de arquitetura

Cada API é composta por quatro grupos de configurações ou controles relacionados ao canal UART, para que os usuários precisem inserir apenas o parâmetro CH desejado. Para configurar a API relevante, é necessário apenas ter uma tabela de parâmetros de configuração básica UART adicional com o formulário de estrutura, USART_InitTypeDef. A API implementará a configuração básica do UART de acordo com o conteúdo do parâmetro na tabela. Consulte a seção "Descrição da API" para obter a tabela de estrutura de configuração básica do UART.

O uart_module.c/.h files contêm apenas a interrupção (CHx_IRQ) ​​e a tabela de status (CHx Status) de cada canal UART, enquanto todas as configurações necessárias para a comunicação UART são fornecidas pelo ht32_board_config.h. Os parâmetros relevantes de hardware no ht32_board_config.h file são mostrados na tabela abaixo. Mais detalhes são fornecidos na seção “Descrição da configuração”.

Os parâmetros relevantes de hardware no ht32_board_config.h incluem configurações de E/S e configurações de porta UART física, conforme a seguir.

Tabela 3. Símbolos de definição em ht32_board_config.h

Símbolo Descrição
HTCFG_UARTM_CH0 Nome da porta UART física; Examparquivo: UART0, UART1…
HTCFG_UARTM0_TX_GPIO_PORT Define o nome da porta de TX para CH0; Exampeu: A, B, C…
HTCFG_UARTM0_TX_GPIO_PIN Define o número do pino de TX para CH0; Exampou: 0~15
HTCFG_UARTM0_RX_GPIO_PORT Define o nome da porta de RX para CH0; Exampeu: A, B, C…
HTCFG_UARTM0_RX_GPIO_PIN Define o número do pino de TX para CH0; Exampou: 0~15
HTCFG_UARTM0_TX_TAMANHO_DO_BUFFER Define o tamanho do buffer TX para CH0; Exampvalor: 128
HTCFG_UARTM0_RX_TAMANHO_DO_BUFFER Define o tamanho do buffer RX para CH0; Exampvalor: 128

Para modificar a configuração AFIO do canal UART, consulte a folha de dados do dispositivo relevante. Atualmente, apenas as definições de E/S para UART CH0 entram em vigor, pois apenas UART CH0 foi configurado em ht32_board_config.h. Para adicionar UART CH1 ~ 3, suas definições de E/S precisam ser concluídas consultando a definição UART CH0 ou consultando a seção “Modificação de configuração e perguntas frequentes”.

Existem três recursos principais da arquitetura da API: 

  1. Até quatro canais UART são suportados. Seus parâmetros de entrada são UARTM_CH0, UARTM_CH1, UARTM_CH2 e UARTM_CH3.
  2.  O número de canais UART pode ser definido e os canais não utilizados não reduzirão o espaço de memória disponível.
  3. Todas as configurações de UART e definições de I/O são completamente separadas das APIs. Isso aumenta a conveniência de gerenciamento de valores de configuração e reduz a possibilidade de configurações incorretas ou ausentes.

Descrição da configuração 

Esta seção apresentará as configurações de parâmetro em ht32_board_config.h e uart_module.h files.

  1. ht32_board_config.h: Este file é usado para definições de pinos e configurações relevantes da placa de desenvolvimento, que incluem o canal UART IP (UART0, UART1, USART0…) usado pelo Starter Kit (SK), localizações de pinos TX/RX correspondentes e tamanho do buffer TX/RX. A Figura 10 mostra o conteúdo da configuração do Starter Kit HT32F52352. Dependendo da integração funcional do desenvolvimento, os usuários podem consultar a seção “Pin Assignment” da folha de dados do dispositivo usado para implementar as definições de pinos. Mais detalhes sobre a modificação de configuração serão descritos na seção “Modificação de configuração e perguntas frequentes”.
    Figura 10. Configurações ht32_board_config.h (HT32F52352)
    Configurações
  2. módulo uart.h: Este é o cabeçalho da API file usado pelo código do aplicativo, que inclui as configurações padrão relevantes, definições de função, etc. Conforme mostrado na Figura 11, o conteúdo da configuração padrão pode ser substituído por configurações externas, como as configurações no ht32_board_config.h file.
    Figura 11. Configurações padrão em uart_module.h
    Configurações padrão
Descrição API
  1. Descrição do tipo de dados do código do aplicativo.
    • USART_InitTypeDef
      Esta é a estrutura de configuração básica do UART que é composta pelas configurações BaudRate, WordLength, StopBits, Paridade e Modo, conforme mostrado abaixo.
      Variável Nome Tipo Descrição
      USART_Taxa de transmissão u32 Taxa de transmissão de comunicação UART
      USART_Comprimento da Palavra u16 Comprimento da palavra de comunicação UART: 7, 8 ou 9 bits
      USART_Bits de parada u16 Comprimento do bit de parada da comunicação UART: 1 ou 2 bits
      USART_Paridade u16 Paridade de comunicação UART: par, ímpar, marca, espaço ou sem paridade
      Modo USART_ u16 Modo de comunicação UART; as APIs suportam apenas o modo normal
  2. Antes de usar as funções da API, conclua a configuração básica do UART no programa principal. A configuração básica do UART para esse código de aplicativo é mostrada na Figura 12. Aqui, a taxa de transmissão é de 115200 bps, o comprimento da palavra é de 8 bits, o comprimento do stop bit é de 1 bit e não há paridade.
    Figura 12. Configuração básica do UART
    Configuração básica
  3. A Figura 13 mostra as funções da API declaradas no uart_module.h file. As tabelas a seguir explicam a função, os parâmetros de entrada e o uso das funções da API.
    Figura 13. Declarações de funções da API em uart_module.h 
    Declarações de funções da API
Nome vazio UARTM_Init(u32 CH, USART_InitTypeDef *pUART_Init, u32 uRxTimeOutValue)
Função Inicialização do módulo UART
  Entrada CH canal UART
pUART_Init Ponteiro de estrutura de configuração básica UART
 Valor de tempo limite uRx Valor de tempo limite UART RX FIFO. Quando o RX FIFO receber novos dados, o contador será zerado e reiniciado. Quando o contador atingir o valor de tempo limite predefinido e a interrupção de tempo limite correspondente for habilitada, uma interrupção de tempo limite será gerada.
 Uso UARTM_Init(UARTM_CH0, &USART_InitStructure, 40);//Execute a configuração básica do UART//Consulte a Figura 12 para configuração do USART_InitStructure
Nome u32 UARTM_WriteByte(u32 CH, u8 uDados)
Função Operação de byte de gravação do módulo UART (TX)
Entrada CH canal UART
uDados Os dados a serem escritos
Saída SUCESSO Bem-sucedido
ERRO Fracassado
Uso UARTM_WriteByte(UARTM_CH0, 'A'); //UART escreve 1 byte – 'A'
Nome u32 UARTM_Write(u32 CH, u8 *pBuffer, u32 uComprimento)
Função Operação de gravação do módulo UART (TX)
 Entrada CH canal UART
pBuffer Ponteiro de buffer
uComprimento O comprimento dos dados a serem gravados
Saída SUCESSO Bem-sucedido
ERRO Fracassado
 Uso u8 Teste[] = “Isto é teste!\r\n”; UARTM_Write(UARTM_CH0, Teste, sizeof(Teste) -1); //UART grava dados do pBuffer
Nome u32 UARTM_ReadByte(u32 CH, u8 *pData)
Função Operação de byte de leitura do módulo UART (RX)
Entrada CH canal UART
pDados O endereço para colocar os dados lidos
Saída SUCESSO Bem-sucedido
ERRO Falha (sem dados)
   Uso u8 DadosTemporários; if (UARTM_ReadByte(UARTM_CH0, &TempData) == SUCCESS){UARTM_WriteByte(UARTM_CH0, TempData);}//Se UARTM_ReadByte() retornar SUCCESS então UART escreve este byte de dados
Nome u32 UARTM_Read(u32 CH, u8 *pBuffer, u32 uComprimento)
Função Operação de leitura do módulo UART (RX)
 Entrada CH canal UART
pBuffer Ponteiro de buffer
uComprimento O comprimento dos dados a serem lidos
Saída contagem de leitura O comprimento dos dados foi lido
     Uso u8 Teste2[10]; u32 Len; Len = UARTM_Read(UARTM_CH0, Test2, 5);if (Len > 0){UARTM_Write(UARTM_CH0, Test2, Len);}//UARTM_Read() lê 5 bytes de dados e armazena dados em Test2 e atribui a contagem de bytes de leitura para Len//Grave os dados provenientes de Test2
Nome u32 UARTM_GetReadBufferLength(u32 CH)
Função Obtenha o tamanho do buffer de leitura (RX)
Entrada CH canal UART
Saída uComprimento Comprimento do buffer de leitura
  Uso UARTM_Init(UARTM_CH0, &USART_InitStructure, 40); //Inicialização do módulo UART while (UARTM_GetReadBufferLength(UARTM_CH0) < 5);//Espera até que UARTM_ReadBuffer tenha recebido 5 bytes de dados
Nome u32 UARTM_GetWriteBufferLength(u32 CH)
Função Obtenha o tamanho do buffer de gravação (TX)
Entrada CH canal UART
Saída uComprimento Tamanho do buffer de gravação
Nome u8 UARTM_IsTxFinished(u32 CH)
Função Obtenha o status TX
Entrada CH canal UART
Saída verdadeiro Status do TX: concluído
FALSO Status TX: não concluído
      Uso UARTM_WriteByte(UARTM_CH0, 'O'); #if 1 // “uart_module.c” SVN >= 525 requiredwhile (UARTM_IsTxFinished(UARTM_CH0) == FALSE) #elsewhile (1) #endif //Esta API pode ser usada para verificar o status do TX, conforme mostrado acima; espere até que a API UARTM_WriteByte() termine, ou seja, o status TX seja TRUE, e então continue as ações subseqüentes.//Uma restrição é adicionada porque esta função não foi adicionada até que o número da versão SVN em uart_module.c seja 525.
Nome vazio UARTM_DiscardReadBuffer(u32 CH)
Função Descarte os dados no buffer de leitura
Entrada CH canal UART

Ex de uso da APIampos 

Esta seção demonstrará a gravação e leitura da API examparquivos do código do aplicativo “Module_UART” usando o processo de inicialização e o “UART_Module_Example” processo de código do aplicativo. Antes de usar as APIs, os usuários precisam incluir o cabeçalho da API file no código-fonte do programa principal file (#incluir “middleware/uart_module.h”).

Conforme mostrado na Figura 14, ao entrar no processo de inicialização, primeiro defina a estrutura de configuração básica do UART. Em seguida, configure os membros da estrutura de configuração básica do UART, incluindo BaudRate, WordLength, StopBits, Parity e Mode. Finalmente, chame a função de inicialização da API, cuja conclusão indica o fim do processo de inicialização. Depois disso, os usuários podem continuar as operações de gravação e leitura com base na configuração básica UART predefinida.

Figura 14. Fluxograma de inicialização
Fluxograma de Inicialização

O “UART_Module_Example” demonstra as operações de leitura e gravação da API em um loopback. O fluxograma para isso é mostrado na Figura 15. As funções de API usadas incluem UARTM_WriteByte(), UARTM_Write(), UARTM_ReadByte(), UARTM_Read() e UARTM_GetReadBufferLength(). A descrição deles é fornecida na seção “Descrição da API”.

Figura 15. Fluxograma de gravação e leitura Exampos
Fluxograma de gravação e leitura Exampos

Há outro código de aplicativo “UART_Bridge” na pasta “Module_UART” cujo file descrição é apresentada na seção “Estrutura de diretório”. O código de aplicação “UART_Bridge” ativa dois canais UART, UART CH0 e UART CH1, e depois personaliza o protocolo de comunicação entre os dois dispositivos UART através de estruturas COMMAND, gCMD1 e gCMD2. Estes são definidos em uart_bridge.c, conforme mostrado abaixo. UARTBridge_CMD1TypeDef gCMD1:

Variável Nome Tipo Descrição
uCabeçalho u8 Cabeçalho
uCmd u8 Comando
uDados[3] u8 Dados

UARTBridge_CMD2TypeDef gCMD2:

Variável Nome Tipo Descrição
uCabeçalho u8 Cabeçalho
uCmdA u8 Comando A
uCmdB u8 Comando B
uDados[3] u8 Dados

No código do aplicativo “UART_Bridge”, use gCMD1 para receber os dados como um pacote de comando e depois analisá-los. Em seguida, de acordo com o protocolo de comunicação personalizado, defina gCMD2 como um pacote de resposta e transmita-o. O seguinte é um examparquivo de um pacote de comando gCMD1) e um pacote de resposta (gCMD2). Pacote de Comando (UARTBridge_CMD1TypeDef gCMD1):

bytes 0 bytes 1 Byte 2 ~ Byte 4
uCabeçalho uCmd uDados [3]
"UM" “1” “x, y, z”

Pacote de resposta (UARTBridge_CMD2TypeDef gCMD2):

bytes 0 bytes 1 bytes 2 Byte 3 ~ Byte 5
uCabeçalho uCmdA uCmdB uDados [3]
“B” "um" “1” “x, y, z”

Ocupação de recursos
Tomando o HT32F52352 como example, os recursos ocupados pelo módulo UART são mostrados abaixo.

HT32F52352
Tamanho da ROM 946 Byte
Tamanho da RAM 40*1 + 256*2 Bytes

Observação:

  1. Variáveis ​​globais incluindo sinalizadores e status para um único canal ocupam 40 bytes de RAM.
  2.  Isso é para uma condição em que um único canal é usado e o tamanho do buffer TX/RX é de 128/128 bytes. O tamanho do buffer pode ser definido de acordo com os requisitos da aplicação.

Tabela 4. Ocupação do Recurso do Código do Aplicativo 

  • Ambiente de compilação: MDK-Arm V5.36, ARMCC V5.06 atualização 7 (compilação 960)
  • Opção de otimização: Nível 2 (-O2)

Instruções de uso

Este capítulo apresentará a preparação do ambiente para o código do aplicativo “Module_UART”, bem como as etapas de compilação e teste.

Preparação Ambiental
O hardware e o software necessários para o código do aplicativo “Module_UART” estão listados abaixo.
Tabela 5. Preparação do ambiente de hardware/software 

Hardware/Software Contar Observação
Kit de iniciação 1 Esta nota de aplicação usa o Starter Kit HT32F52352 como um example
Cabo USB 1 Micro USB, conectado ao PC
Código de Aplicação O caminho de download, file e a configuração do diretório são apresentados na seção “Download e preparação de recursos”. Caminho: “\\aplicativo\Module_UART\UART_Module_Exampa"
Termo Tera Consulte a seção "Software do terminal"
Keil IDE Keil uVision V5.xx

Primeiro, use o Starter Kit HT32F52352 combinado com a função Virtual COM Port (VCP) do e-Link32 Lite para a introdução do aplicativo UART. Isso requer a seguinte preparação ambiental a ser implementada:

  1. Existem duas interfaces USB na placa. Use o cabo USB para conectar o PC e a interface eLink32 Lite na placa conforme Figura 16-(a).
  2. Como o código do aplicativo precisa usar a função e-Link32 Lite Virtual COM Port (VCP), certifique-se de que o PAx*2 e o DAP_Tx do UART Jumper-J2*1 estejam em curto usando um jumper. A localização de J2 é indicada pela Figura 16-(b).

Observação

  1. J2 no Starter Kit tem duas opções, PAx e DAP_Tx em curto ou PAx e RS232_Tx em curto. Consulte o manual do usuário do Starter Kit para obter as funções de configuração detalhadas.
  2. A localização do pino MCU UART RX em diferentes Starter Kits é diferente. esse example usa PAx para indicar o pino RX.

Figura 16. Diagrama de blocos do kit inicial HT32
Diagrama de Blocos do Kit

Agora use a placa de destino do usuário combinada com a função Virtual COM Port (VCP) do e-Link32 Pro para a introdução do aplicativo UART. Isso requer a seguinte preparação ambiental a ser implementada:

  1. Um lado do e-Link32 Pro é conectado a um PC usando um cabo Mini USB e o outro lado é conectado à placa de destino do usuário por meio de seu cabo cinza de 10 bits. A conexão entre as interfaces SWD do cabo e da placa de destino é implementada usando linhas Dupont, conforme mostrado na Figura 17-(a).
  2. Os pinos de comunicação serial do e-Link32 Pro são Pin#7 VCOM_RXD e Pin#8- VCOM_TXD. Estes devem ser conectados aos pinos TX e RX da placa de destino do usuário, conforme mostrado na Figura 17-(b).
    Figura 17. E-Link32 Pro + Diagrama de bloco da placa de destino do usuário
    Painel de destino do usuário

Compilação e teste
Esta seção levará o “application\Module_UART\UART_Module_Example” como example para apresentar os processos de compilação e teste. Antes disso, certifique-se de que todas as preparações descritas na seção anterior foram implementadas e que o software do terminal Tera Term foi baixado.

As etapas detalhadas da operação estão resumidas abaixo.
Etapa 1. Teste de inicialização

Configure o ambiente de hardware conforme descrito na seção anterior. Após ligar, o LED de energia do D9 no canto inferior esquerdo do Starter Kit acenderá. O LED D1 USB no e-Link32 Lite no canto superior direito acenderá após a conclusão da enumeração do USB. Se D1 não acender após um longo período de tempo, confirme se o cabo USB é capaz de se comunicar. Caso contrário, remova-o e insira-o novamente.

Etapa 2. Gerar um projeto
Abra o aplicativo\Module_UART\UART_Module_Example pasta, clique no _CreateProject.bat file para gerar um projeto, conforme mostrado na Figura 18. Como esta nota de aplicativo usa o Starter Kit HT32F52352, abra o projeto Keil IDE “Project_52352.uvprojx” localizado na pasta MDK_ARMv5.

Figura 18. Execute _CreateProject.bat para gerar o projeto
Gerar Projeto

Etapa 3. Compilar e programar
Depois de aberto o projeto, primeiro clique em “Build” (ou use o atalho “F7”), depois clique em “Download” (ou use o atalho “F8”). Depois disso, os resultados de compilação e download serão exibidos na janela Build Output. Veja a Figura 19.

Figura 19. Resultados de compilação e download
Construir e baixar resultados

Passo 4. Abra o software Tera Term e configure a porta serial
Abra o software Tera Term e a porta COM. Preste atenção se o número da porta COM gerado pelo Starter Kit está correto ou não. Em seguida, clique em “Setup >> Serial Port” para entrar na interface de configuração. A configuração da interface UART do código do aplicativo “Module_UART” é descrita na seção “Software do Terminal”. O resultado da configuração é mostrado na Figura 20.

Figura 20. Resultado da configuração da porta serial do Tera Term
Resultado da configuração
Etapa 5. Redefina o sistema e teste
Pressione a tecla de reset SK – Reset B1. Depois disso, um “ABCThis is test!” mensagem será
transmitidos pela API e serão exibidos na janela do Tera Term, conforme Figura 21. Em relação à função de recebimento, ao inserir os dados na janela do Tera Term, a API correspondente será utilizada para determinar o tamanho do buffer de recebimento. Quando os dados recebidos pelo PC atingirem 5 bytes, os 5 bytes de dados recebidos serão enviados sequencialmente. Conforme mostrado na Figura 22, os dados inseridos sequencialmente são “1, 2, 3, 4, 5”, que são recebidos e determinados por meio da API. Depois disso, os dados “1, 2, 3, 4, 5” serão impressos após as cinco entradas.

Figura 21. Teste Funcional do Código de Aplicação “Module_UART” – Transmitir
Teste funcional do código do aplicativo

Figura 22. Teste Funcional do Código do Aplicativo “Module_UART” – Receber
Teste funcional do código do aplicativo

Instruções de transplante
Esta seção apresentará como integrar as APIs nos projetos do usuário.
Passo 1. Adicione o uart_module.c file no projeto. Clique com o botão direito do mouse na pasta Usuário. Selecione “Adicionar existente Files para Group 'User'…”, então selecione o uart_module.c file e clique em “Adicionar”, conforme mostrado na Figura 23. Consulte a seção “Estrutura de diretórios” para file descrição do caminho.

Figura 23. Adicionar uart_module.c File projetar
File projetar

Passo 2. Adicione o ring_buffer.c file no projeto. Clique com o botão direito do mouse na pasta Usuário. Selecione “Adicionar existente Files para Group 'User'…”, então selecione o ring_buffer.c file e clique em “Adicionar”, conforme mostrado na Figura 24.\ Consulte a seção “Estrutura de diretórios” para file descrição do caminho.
Figura 24. Adicionar ring_buffer.c File projetar 
File projetar

Passo 3. Incluir o cabeçalho da API file no início de main.c, conforme mostrado na Figura 25. (Ext: #include “middleware/uart_module.h”)
Figura 25. Incluir cabeçalho da API File para main.c
Incluir cabeçalho da API File

Passo 4. Implemente as configurações necessárias para a comunicação UART usando o ht32_board_config.h file. Isso é apresentado em detalhes nas seções “Descrição da configuração” e “Modificação da configuração e perguntas frequentes”.

Modificação de configuração e perguntas frequentes 

Esta seção apresentará como modificar as configurações do UART e explicará algumas questões comuns encontradas durante o uso.

Alterar atribuição de pino UART 

  1. Consultando o capítulo "Atribuição de pinos" da folha de dados HT32F52352, procure a tabela de mapeamento de função alternativa que lista as funções AFIO do tipo de dispositivo. Para os pinos UART relevantes, consulte a coluna “AF6 USART/UART”, conforme mostrado na Figura 26.
    Figura 26. HT32F52352 Tabela de mapeamento de função alternativa
    Tabela de mapeamento de função alternativa
  2. Esta etapa orientará os usuários a localizar os pinos UART correspondentes usando a tabela acima. O HT32F52352 example usa USART1 como o canal padrão. Aqui, os pinos TX e RX são USR1_TX e USR1_RX e estão localizados em PA4 e PA5, respectivamente. A Figura 27 mostra a correspondência dos pinos, bem como as definições dos pinos em “ht32_board_config.h”. Os campos vazios de “Pacote” na tabela de atribuição de pinos significam que não há GPIOs relevantes neste pacote. Para modificar os pinos UART, encontre os locais dos pinos de destino e redefina os pinos usando o “ht32_board_config.h” file.
    Figura 27. Correspondência de pinos e modificação de configurações
    Modificação de configuração

Adicionar um canal UART
Tomando o HT32F52352 HTCFG_UARTM_CH1 como example, aqui está descrito como adicionar um novo canal UART.

Modifique o ht32_board_config.h file
Consultando o capítulo "Atribuição de pinos" da folha de dados HT32F52352, procure a tabela de mapeamento de função alternativa que lista as funções AFIO do tipo de dispositivo. Como USART1 foi usado como HTCFG_UARTM_CH0, o recém-adicionado HTCFG_UARTM_CH1 pode escolher USART0. Aqui, os pinos TX e RX estão localizados em PA2 e PA3 respectivamente, conforme mostrado na metade superior da Figura 28. As modificações correspondentes são implementadas usando as linhas de código 120~126 em ht32_board_config.h, conforme mostrado pela caixa pontilhada vermelha na Figura 28.

Figura 28. Adicionar um canal UART
Canal UART

Perguntas frequentes
Q: Na etapa 5 da seção Compilação e teste, o teste funcional de transmissão está normal. Aqui, o teste “ABCThis is test!” mensagem foi exibida com sucesso, no entanto, para a função de recebimento, por que os cinco valores de entrada não são retornados e exibidos?
A: Verifique se os pinos MCU UART RX e DAP_Tx do UART Jumper-J2 foram encurtados usando um jumper. Como o código do aplicativo “Module_UART” precisa usar a Virtual COM Port (VCP) do e-Link32 Lite, a configuração de curto-circuito deve ser aplicada aos dois pinos esquerdos do UART Jumper-J2, conforme mostrado na Figura 29.

Figura 29. Configuração do Jumper-J2 UART
Jumper UART

P: Depois ao executar “Build” (ou atalho “F7”), aparece uma mensagem de erro indicando que a versão da biblioteca de firmware é anterior à necessária? Veja a Figura 30.
A: A implementação do código do aplicativo “Module_UART” precisa incluir o uart_module.c/h files que tem um requisito para uma determinada versão da biblioteca de firmware. Quando essa mensagem de erro aparece, significa que a biblioteca de firmware usada atualmente é uma versão mais antiga. Portanto, é necessário baixar a versão mais recente através do link fornecido na seção “Biblioteca de firmware”.

Figura 30. Mensagem de erro da versão da biblioteca de firmware
Mensagem de erro de versão

Conclusão

Este documento forneceu uma introdução básica para ajudar os usuários a entender melhor o código do aplicativo “Module_UART” e o protocolo de comunicação UART. Isso foi seguido pelo download e preparação do recurso. O capítulo Descrição Funcional introduziu o file estrutura de diretórios, arquitetura da API, descrição da API e uso da API examples. O capítulo Instruções de Uso demonstrou a preparação ambiental, compilação e teste do código do aplicativo “Module_UART”. Ele também forneceu instruções para transplante de código e configuração de modificação, além de explicar alguns problemas comuns que podem ser encontrados. Tudo isso combinado permitirá que os usuários entendam rapidamente como usar as APIs e, posteriormente, reduzam a quantidade de tempo para começar.

Material de referência

Para obter mais informações, consulte o Holtek weblocal: www.holtek.com

Versões e informações de modificação

Data Autor Liberar Informações de modificação
2022.04.30 蔡期育 (Chi-Yu Tsai) V1.00 Primeira versão

Isenção de responsabilidade

Todas as informações, marcas registradas, logotipos, gráficos, vídeos, clipes de áudio, links e outros itens que aparecem neste web('Informações') são apenas para referência e estão sujeitas a alterações a qualquer momento sem aviso prévio e a critério da Holtek Semiconductor Inc. e suas empresas relacionadas (doravante 'Holtek', 'a empresa', 'nós', ' nós' ou 'nosso'). Embora a Holtek se esforce para garantir a precisão das informações neste website, nenhuma garantia expressa ou implícita é dada pela Holtek quanto à precisão das informações. A Holtek não se responsabiliza por qualquer incorreção ou vazamento.
A Holtek não será responsável por quaisquer danos (incluindo, mas não limitado a vírus de computador, problemas de sistema ou perda de dados) decorrentes do uso ou em conexão com o uso deste website por qualquer parte. Pode haver links nesta área, que permitem visitar o websites de outras empresas.
Esses websites não são controlados pela Holtek. A Holtek não terá nenhuma responsabilidade e nenhuma garantia de qualquer informação exibida em tais sites. Hiperlinks para outros websites são por sua conta e risco.

Limitação de responsabilidade

Em nenhum caso a Holtek Limited será responsável perante qualquer outra parte por qualquer perda ou dano causado direta ou indiretamente em conexão com seu acesso ou uso deste website, o conteúdo do mesmo ou quaisquer bens, materiais ou serviços.

Lei aplicável
A isenção de responsabilidade contida no website será regido e interpretado de acordo com as leis da República da China. Os usuários se submeterão à jurisdição não exclusiva dos tribunais da República da China.

Atualização de isenção de responsabilidade
A Holtek reserva-se o direito de atualizar o Aviso Legal a qualquer momento com ou sem aviso prévio, todas as alterações entram em vigor imediatamente após a publicação no website.

Documentos / Recursos

HOLTEK HT32 MCU UART Nota de aplicação [pdf] Manual do Usuário
Nota de aplicação HT32 MCU, UART, Nota de aplicação HT32 MCU UART, Nota de aplicação, HT32, Nota de aplicação MCU UART, Nota de aplicação HT32 MCU UART

Referências

Deixe um comentário

Seu endereço de e-mail não será publicado. Os campos obrigatórios estão marcados *