Nota de aplicação HOLTEK HT32 MCU UART Manual do usuário
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
Figura 2. 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
Figura 4. Formato do pacote de dados UART de 8 bits
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
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/
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
Figura 8. 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:
- 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.
- 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”.
- 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
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:
- Até quatro canais UART são suportados. Seus parâmetros de entrada são UARTM_CH0, UARTM_CH1, UARTM_CH2 e UARTM_CH3.
- 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.
- 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.
- 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)
- 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
Descrição API
- 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
- USART_InitTypeDef
- 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
- 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
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
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
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:
- Variáveis globais incluindo sinalizadores e status para um único canal ocupam 40 bytes de RAM.
- 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:
- 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).
- 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
- 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.
- 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
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:
- 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).
- 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
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
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
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
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
Figura 22. Teste Funcional do Código do Aplicativo “Module_UART” – Receber
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
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
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
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
- 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
- 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
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
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
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
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 |