HOLTEK HT32 MCU UART Nota applicativa Manuale dell'utente
Introduzione
Il ricevitore/trasmettitore asincrono universale - UART è un'interfaccia di trasmissione seriale ampiamente utilizzata che fornisce una trasmissione dati full-duplex asincrona flessibile. Il codice dell'applicazione "Module_UART" fornito in questa nota applicativa utilizza interrupt TX/RX con ring buffer software per implementare semplici funzioni di trasmissione/ricezione UART tramite API, le cui funzioni correlate sono descritte di seguito. Ciò semplificherà l'intero processo di trasmissione dei dati e consentirà agli utenti di comprendere e implementare rapidamente le applicazioni di comunicazione UART.
- Funzioni di trasmissione/ricezione: lettura byte, scrittura byte, lettura buffer, scrittura buffer, ecc.
- Funzioni di stato: ottenere la lunghezza del buffer, lo stato TX, ecc.
Questo documento introdurrà innanzitutto il protocollo di comunicazione UART, che aiuterà gli utenti a comprendere meglio la comunicazione UART dal principio all'applicazione. Segue il download e la preparazione delle risorse necessarie per il codice dell'applicazione, inclusa la libreria del firmware, il download del codice dell'applicazione, file e la configurazione della directory, nonché un'introduzione allo strumento software del terminale utilizzato nella nota applicativa. Nel capitolo Descrizione funzionale, verranno introdotte la struttura della directory del codice dell'applicazione, le impostazioni dei parametri e la descrizione dell'API. L'utilizzo dell'API verrà descritto utilizzando il codice dell'applicazione "Module_UART" e verrà elencato anche il consumo di risorse Flash/RAM richiesto per le API. Il capitolo Istruzioni per l'uso guiderà l'utente attraverso le fasi di preparazione ambientale, compilazione e test per confermare che il codice dell'applicazione funzionerà correttamente. Fornirà quindi istruzioni che spiegano come integrare le API nei progetti dell'utente e infine fornirà un riferimento per le modifiche e i problemi comuni che potrebbero verificarsi.
Abbreviazioni utilizzate:
- UART: Ricevitore/trasmettitore asincrono universale
- API: Interfaccia di programmazione dell'applicazione
- LSB: Bit meno significativo
- MSB: Bit più significativo
- Per PC: Personal computer
- SK: Starter Kit, scheda di sviluppo HT32
- IDE: Ambiente di sviluppo integrato
Protocollo di comunicazione UART
L'UART è un tipo di interfaccia di comunicazione seriale che implementa la conversione dei dati da parallelo a seriale nel suo trasmettitore e quindi comunica in modo seriale con un ricevitore simile. Il ricevitore esegue quindi una conversione dei dati da seriale a parallelo dopo la ricezione dei dati. La Figura 1 mostra un diagramma schematico della comunicazione seriale che mostra come i dati vengono trasferiti in un ordine bit per bit. Pertanto, per la comunicazione bidirezionale tra trasmettitore e ricevitore, sono necessari solo due fili, TX e RX, per trasferire i dati in modo seriale tra loro. TX è il pin su cui l'UART trasmette i dati seriali ed è collegato al pin RX del ricevitore. Pertanto, i dispositivi trasmettitore e ricevitore devono collegare in modo incrociato i pin TX e RX per eseguire la comunicazione bidirezionale UART, come mostrato in Figura 2.
Figura 1. Diagramma di comunicazione seriale
Figura 2. Schema del circuito UART
Durante la comunicazione seriale UART, la trasmissione dei dati è asincrona. Ciò significa che non c'è orologio o altro segnale di sincronizzazione tra il trasmettitore e il ricevitore. Qui viene utilizzata una velocità di trasmissione, che è la velocità di trasmissione/ricezione dei dati seriali e che viene impostata da entrambe le parti prima del trasferimento dei dati. Inoltre, all'inizio e alla fine del pacchetto di dati vengono aggiunti bit speciali come i bit di inizio e di fine per formare un pacchetto di dati UART completo. La Figura 3 mostra la struttura del pacchetto di dati UART mentre la Figura 4 mostra un pacchetto di dati UART a 8 bit senza bit di parità.
Figura 3. Struttura del pacchetto di dati UART
Figura 4. Formato pacchetto dati UART a 8 bit
Ogni parte del pacchetto di dati UART viene introdotta nell'ordine seguente.
- Bit di inizio: Questo indica l'inizio di un pacchetto di dati. Il pin UART TX di solito rimane a un livello logico alto prima che inizi la trasmissione. Se inizia la trasmissione dei dati, il trasmettitore UART tirerà il pin TX dall'alto verso il basso, cioè da 1 a 0, e poi lo manterrà lì per un ciclo di clock. Il ricevitore UART inizierà a leggere i dati quando viene rilevata una transizione da alta a bassa sul pin RX.
- Dati: Questi sono i dati effettivi trasferiti, con una lunghezza dati di 7, 8 o 9 bit. I dati vengono solitamente trasferiti prima con LSB.
- Bit di parità: Il numero di "1" logico nei dati viene utilizzato per determinare se i dati sono stati modificati durante la trasmissione. Per la parità pari, il numero totale di "1" logico nei dati dovrebbe essere un numero pari, al contrario, il numero totale di "1" logico nei dati dovrebbe essere un numero dispari per la parità dispari.
- Bit di arresto: Questo indica la fine di un pacchetto di dati, dove il trasmettitore UART tirerà il pin TX dal basso verso l'alto, cioè da 0 a 1, e poi lo manterrà lì per un periodo di tempo di 1 o 2 bit.
Come accennato in precedenza, poiché non esiste un segnale di clock nel circuito UART, la stessa velocità di trasmissione/ricezione dei dati seriali, nota come baud rate, deve essere definita tra il trasmettitore e il ricevitore per implementare una trasmissione senza errori. La velocità di trasmissione è definita dal numero di bit trasferiti al secondo, in bps (bit al secondo). Alcuni baud rate standard e comunemente usati sono 4800bps, 9600bps, 19200bps, 115200bps, ecc. Il tempo corrispondente richiesto per il trasferimento di un singolo bit di dati è mostrato di seguito.
Tabella 1. Velocità di trasmissione rispetto al tempo di trasmissione a 1 bit
Velocità in baud | Trasmissione a 1 bit Tempo |
4800 bps | 208.33 µs |
9600 bps | 104.16 µs |
19200 bps | 52.08 µs |
115200 bps | 8.68 µs |
Download e preparazione delle risorse
Questo capitolo introdurrà il codice dell'applicazione e lo strumento software utilizzato, nonché come configurare la directory e file sentiero.
Libreria firmware
Innanzitutto, assicurarsi che la libreria del firmware Holtek HT32 sia stata scaricata prima di utilizzare il codice dell'applicazione. Il link per il download è mostrato di seguito. Qui ci sono due opzioni, HT32_M0p_Vyyyymmdd.zip per la serie HT32F5xxxx e HT32_M3_Vyyyymmdd.zip per la serie HT32F1xxxx. Scarica e decomprimi il file desiderato file.
La cerniera lampo file contiene diverse cartelle che possono essere classificate come Documento, Libreria firmware, Strumenti e altri elementi, il cui percorso di posizionamento è mostrato in Figura 5. Lo zip della libreria firmware HT32 file con un file nome di HT32_STD_xxxxx_FWLib_Vm.n.r_s.zip si trova nella cartella Firmware_Library.
Figura 5. Contenuto di HT32_M0p_Vyyyymmdd.zip
Codice dell'applicazione
Scarica il codice dell'applicazione dal seguente link. Il codice dell'applicazione è impacchettato in un zip file con un file nome di HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip. Vedere Figura 6 per il file convenzioni sui nomi.
Figura 6. Codice dell'applicazione File Nome Introduzione
Link per il download: https://mcu.holtek.com.tw/ht32/app.fw/Module_UART/
File e configurazione della directory
Poiché il codice dell'applicazione non contiene la libreria del firmware HT32 files, il codice dell'applicazione e la libreria del firmware sono stati decompressi files devono essere inseriti nel percorso corretto prima di iniziare la compilazione. Il codice dell'applicazione zip file di solito contiene una o più cartelle, come applicazione e libreria, come mostrato nella Figura 7. Posizionare la cartella dell'applicazione nella directory principale della libreria del firmware HT32 per completare la file configurazione del percorso, come mostrato nella Figura 8. In alternativa, decomprimere contemporaneamente il codice dell'applicazione e la libreria del firmware HT32 nello stesso percorso per ottenere gli stessi risultati di configurazione.
Figura 7. Contenuto di HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip
Figura 8. Percorso di decompressione
Software terminale
Il codice dell'applicazione può trasferire messaggi attraverso la porta COM per implementare la selezione delle funzioni o la visualizzazione dello stato. Ciò richiede che il lato host abbia installato in anticipo il software del terminale. Gli utenti possono scegliere il software di connessione appropriato o utilizzare software con licenza gratuita come Tera Term. Nel codice dell'applicazione, il canale UART è configurato con una lunghezza di parola di 8 bit, nessuna parità, 1 bit di stop e una velocità di trasmissione di 115200 bps.
Descrizione funzionale
Questo capitolo fornirà una descrizione funzionale per il codice dell'applicazione, comprese le informazioni sulla struttura della directory, l'architettura dell'API, la descrizione delle impostazioni, ecc
Struttura Directory
Il codice dell'applicazione file contiene una cartella dell'applicazione. Il livello successivo è la cartella "Module_UART" che contiene due programmi applicativi, "UART_Module_Example” e “UART_Bridge”. Il pertinente files sono elencati e descritti di seguito.
Tabella 2. Struttura della directory del codice dell'applicazione
Cartella / File Nome | Descrizione |
\\applicazione\Module_UART\UART_Module_Example*1 | |
_CreaProgetto.bat | Script batch per la creazione di progetti files |
_ProjectSource.ini | Inizializzazione file per aggiungere codice sorgente ai progetti |
ht32_board_config.h | Impostare file relativo all'assegnazione degli I/O periferici IC |
ht32fxxxxx_01_it.c | Programma di servizio di interruzione file |
principale.c | Codice sorgente del programma principale |
\\applicazione\Modulo_UART\UART_Bridge*2 | |
_CreaProgetto.bat | Script batch per la creazione di progetti files |
_ProjectSource.ini | Inizializzazione file per aggiungere codice sorgente ai progetti |
ht32_board_config.h | Impostare file relativo all'assegnazione degli I/O periferici IC |
ht32fxxxxx_01_it.c | Programma di servizio di interruzione file |
principale.c | Codice sorgente del programma principale |
uart_bridge.h uart_bridge.c | Intestazione del ponte UART file e codice sorgente file |
\\utilità\middleware | |
uart_modulo.h*3 uart_modulo.c*3 | Intestazione dell'API file e codice sorgente file |
\\utilità\comune | |
ringbuffer.h ring_buffer.c | Intestazione del buffer circolare del software file e codice sorgente file |
Nota:
- Nel “UART_Module_Example", le operazioni di lettura e scrittura dell'API vengono eseguite in modo loopback, fare riferimento a "API Usage Examples” per maggiori dettagli.
- Nel codice dell'applicazione "UART_Bridge", vengono attivati due canali UART, UART CH0 e UART CH1, e viene implementato un protocollo di comunicazione personalizzato tramite le strutture COMMAND tra i due dispositivi UART. Per ulteriori informazioni, fare riferimento a "API Usage Examples”.
- Il codice dell'applicazione deve utilizzare uart_module.c/h files che hanno un requisito di versione della libreria del firmware. Il requisito può cambiare di volta in volta in base all'aggiornamento. Per confermare l'attuale requisito della versione della libreria del firmware, fare riferimento al contenuto del controllo delle dipendenze cercando la parola chiave "Verifica delle dipendenze" nel main.c file. Se la versione della libreria firmware non soddisfa i requisiti, scaricare la versione più recente dal collegamento fornito nella sezione "Libreria firmware".
Architettura dell'API
Ogni API ha un importante parametro CH, che è il canale UART. Ciò determina quale canale UART deve essere controllato. Attualmente sono supportati fino a quattro canali UART e pertanto quattro simboli costanti sono definiti come segue. Questi sono usati come parametro CH fornendo alle API la base per il controllo.
- UARTM_CH0: parametro di input – controlla o configura UART CH0
- UARTM_CH1: parametro di input – controlla o configura UART CH1
- UARTM_CH2: parametro di input – controlla o configura UART CH2
- UARTM_CH3: parametro di input – controlla o configura UART CH3
Lo spazio di memoria non verrà sprecato se viene utilizzato un solo canale UART. Questo perché è possibile impostare il numero dei canali UART supportati e il codice del canale UART inutilizzato verrà rimosso dal preprocessore per aumentare lo spazio di memoria disponibile. L'architettura dell'API è mostrata in Figura 9.
Figura 9. Diagramma a blocchi dell'architettura API
Ogni API è composta da quattro gruppi di impostazioni o controlli relativi al canale UART in modo che gli utenti debbano solo inserire il parametro CH desiderato. Per configurare l'API pertinente, è necessario solo disporre di una tabella dei parametri di configurazione di base UART aggiuntiva con il modulo della struttura, USART_InitTypeDef. L'API implementerà la configurazione di base UART in base ai contenuti dei parametri nella tabella. Fare riferimento alla sezione "Descrizione dell'API" per la tabella della struttura della configurazione di base di UART.
Il modulo uart_module.c/.h files contengono solo l'interrupt (CHx_IRQ) e la tabella di stato (CHx Status) di ciascun canale UART mentre tutte le impostazioni necessarie per la comunicazione UART sono fornite da ht32_board_config.h. I parametri rilevanti per l'hardware nel file ht32_board_config.h file sono riportati nella tabella sottostante. Maggiori dettagli sono forniti nella sezione “Descrizione dell'impostazione”.
I parametri rilevanti per l'hardware in ht32_board_config.h includono le impostazioni I/O e le impostazioni della porta UART fisica, come segue.
Tabella 3. Simboli di definizione in ht32_board_config.h
Simbolo | Descrizione |
HTCFG_UARTM_CH0 | Nome della porta UART fisica; Example: UART0, UART1… |
HTCFG_UARTM0_TX_GPIO_PORT | Definisce il nome della porta di TX per CH0; Example: LA, SI, DO… |
HTCFG_UARTM0_TX_GPIO_PIN | Definisce il numero di pin di TX per CH0; Example: 0~15 |
HTCFG_UARTM0_RX_GPIO_PORT | Definisce il nome della porta di RX per CH0; Example: LA, SI, DO… |
HTCFG_UARTM0_RX_GPIO_PIN | Definisce il numero di pin di TX per CH0; Example: 0~15 |
HTCFG_UARTM0_TX_BUFFER_SIZE | Definisce la dimensione del buffer TX per CH0; Example: 128 |
HTCFG_UARTM0_RX_BUFFER_SIZE | Definisce la dimensione del buffer RX per CH0; Example: 128 |
Per modificare la configurazione AFIO del canale UART, fare riferimento alla relativa scheda tecnica del dispositivo. Attualmente solo le definizioni I/O per UART CH0 hanno effetto poiché solo UART CH0 è stato configurato in ht32_board_config.h. Per aggiungere UART CH1~3, le loro definizioni I/O devono essere completate facendo riferimento alla definizione UART CH0 o facendo riferimento alla sezione "Modifica delle impostazioni e domande frequenti".
Esistono tre caratteristiche principali dell'architettura API:
- Sono supportati fino a quattro canali UART. I loro parametri di input sono UARTM_CH0, UARTM_CH1, UARTM_CH2 e UARTM_CH3.
- Il numero di canali UART può essere impostato e i canali inutilizzati non ridurranno lo spazio di memoria disponibile.
- Tutte le impostazioni UART e le definizioni I/O sono completamente separate dalle API. Ciò aumenta la praticità di gestione dei valori di impostazione e riduce la possibilità di impostazioni errate o mancanti.
Descrizione dell'impostazione
Questa sezione introdurrà le impostazioni dei parametri in ht32_board_config.h e uart_module.h files.
- ht32_board_config.h: Questo file viene utilizzato per le definizioni dei pin e le impostazioni relative alla scheda di sviluppo, che includono il canale IP UART (UART0, UART1, USART0...) utilizzato dallo Starter Kit (SK), le corrispondenti posizioni dei pin TX/RX e le dimensioni del buffer TX/RX. La Figura 10 mostra i contenuti delle impostazioni dello Starter Kit HT32F52352. A seconda dell'integrazione funzionale dello sviluppo, gli utenti possono fare riferimento alla sezione "Assegnazione pin" della scheda tecnica del dispositivo utilizzato per implementare le definizioni dei pin. Ulteriori dettagli sulla modifica delle impostazioni saranno descritti nella sezione "Modifica delle impostazioni e domande frequenti".
Figura 10. Impostazioni ht32_board_config.h (HT32F52352)
- uart_modulo.h: Questa è l'intestazione dell'API file utilizzato dal codice dell'applicazione, che include le relative impostazioni predefinite, definizioni delle funzioni, ecc. Come mostrato nella Figura 11, il contenuto delle impostazioni predefinite può essere sovrascritto da configurazioni esterne, come le impostazioni in ht32_board_config.h file.
Figura 11. Impostazioni predefinite in uart_module.h
Descrizione dell'API
- Descrizione del tipo di dati del codice dell'applicazione.
- USART_InitTypeDef
Questa è la struttura di configurazione di base UART che è composta dalle configurazioni BaudRate, WordLength, StopBits, Parity e Mode, come mostrato di seguito.Variabile Nome Tipo Descrizione USART_BaudRate u32 Velocità di trasmissione della comunicazione UART USART_Lunghezza parola u16 Lunghezza della parola di comunicazione UART: 7, 8 o 9 bit USART_StopBit u16 Lunghezza del bit di stop della comunicazione UART: 1 o 2 bit USART_Parità u16 Parità di comunicazione UART: pari, dispari, segno, spazio o nessuna parità USART_Modalità u16 modalità di comunicazione UART; le API supportano solo la modalità normale
- USART_InitTypeDef
- Prima di utilizzare le funzioni API, completare la configurazione di base di UART nel programma principale. La configurazione di base UART per questo codice applicativo è mostrata nella Figura 12. Qui la velocità di trasmissione è 115200 bps, la lunghezza della parola è 8 bit, la lunghezza del bit di stop è 1 bit e non c'è parità.
Figura 12. Configurazione di base UART
- La Figura 13 mostra le funzioni API dichiarate in uart_module.h file. Le seguenti tabelle spiegano la funzione, i parametri di input e l'utilizzo delle funzioni API.
Figura 13. Dichiarazioni delle funzioni API in uart_module.h
Nome | void UARTM_Init(u32 CH, USART_InitTypeDef *pUART_Init, u32 uRxTimeOutValue) | |
Funzione | Inizializzazione del modulo UART | |
Ingresso | CH | canale UART |
pUART_Init | Puntatore della struttura di configurazione di base UART | |
uRxTimeOutValue | Valore di timeout UART RX FIFO. Quando il FIFO RX riceve nuovi dati, il contatore si azzererà e si riavvierà. Una volta che il contatore raggiunge il valore di timeout preimpostato e l'interruzione di timeout corrispondente è stata abilitata, verrà generata un'interruzione di timeout. | |
Utilizzo | UARTM_Init(UARTM_CH0, &USART_InitStructure, 40);//Eseguire la configurazione di base di UART//Fare riferimento alla Figura 12 per la configurazione di USART_InitStructure |
Nome | u32 UARTM_WriteByte(u32 CH, u8 uDati) | |
Funzione | Operazione byte di scrittura del modulo UART (TX) | |
Ingresso | CH | canale UART |
uData | I dati da scrivere | |
Produzione | SUCCESSO | Riuscito |
ERRORE | Fallito | |
Utilizzo | UARTM_WriteByte(UARTM_CH0, 'A'); //UART scrive 1 byte – 'A' |
Nome | u32 UARTM_Write(u32 CH, u8 *pBuffer, u32 uLength) | |
Funzione | Operazione di scrittura del modulo UART (TX) | |
Ingresso | CH | canale UART |
pBuffer | Puntatore del buffer | |
uLunghezza | La lunghezza dei dati da scrivere | |
Produzione | SUCCESSO | Riuscito |
ERRORE | Fallito | |
Utilizzo | u8 Test[] = “Questo è il test!\r\n”; UARTM_Write(UARTM_CH0, Test, sizeof(Test) -1); //UART scrive i dati pBuffer |
Nome | u32 UARTM_ReadByte(u32 CH, u8 *pData) | |
Funzione | Operazione di byte di lettura del modulo UART (RX) | |
Ingresso | CH | canale UART |
pData | L'indirizzo in cui inserire i dati letti | |
Produzione | SUCCESSO | Riuscito |
ERRORE | Non riuscito (nessun dato) | |
Utilizzo | u8 Dati Temp; if (UARTM_ReadByte(UARTM_CH0, &TempData) == SUCCESS){UARTM_WriteByte(UARTM_CH0, TempData);}//Se UARTM_ReadByte() restituisce SUCCESS allora UART scrive questo byte di dati |
Nome | u32 UARTM_Leggi(u32 CH, u8 *pBuffer, u32 uLength) | |
Funzione | Operazione di lettura del modulo UART (RX) | |
Ingresso | CH | canale UART |
pBuffer | Puntatore del buffer | |
uLunghezza | La lunghezza dei dati da leggere | |
Produzione | Leggi il conteggio | La lunghezza dei dati è stata letta |
Utilizzo | u8 Prova2[10]; u32 Lente; Len = UARTM_Read(UARTM_CH0, Test2, 5);if (Len > 0){UARTM_Write(UARTM_CH0, Test2, Len);}//UARTM_Read() legge 5 byte di dati e memorizza i dati in Test2 e assegna il conteggio dei byte letti a Len//Scrivi i dati originati da Test2 |
Nome | u32 UARTM_GetReadBufferLength(u32 CH) | |
Funzione | Ottenere la lunghezza del buffer di lettura (RX) | |
Ingresso | CH | canale UART |
Produzione | uLunghezza | Leggere la lunghezza del buffer |
Utilizzo | UARTM_Init(UARTM_CH0, &USART_InitStructure, 40); //inizializzazione del modulo UART while (UARTM_GetReadBufferLength(UARTM_CH0) < 5);//Attendi finché UARTM_ReadBuffer non ha ricevuto 5 byte di dati |
Nome | u32 UARTM_GetWriteBufferLength(u32 CH) | |
Funzione | Ottenere la lunghezza del buffer di scrittura (TX) | |
Ingresso | CH | canale UART |
Produzione | uLunghezza | Scrivere la lunghezza del buffer |
Nome | u8 UARTM_IsTxFinito(u32 CH) | |
Funzione | Ottenere lo stato TX | |
Ingresso | CH | canale UART |
Produzione | VERO | Stato TX: terminato |
FALSO | Stato TX: non terminato | |
Utilizzo | UARTM_WriteByte(UARTM_CH0, 'O'); #if 1 // "uart_module.c" SVN >= 525 requiredwhile (UARTM_IsTxFinished(UARTM_CH0) == FALSE) #elsewhile (1) #endif //Questa API può essere utilizzata per controllare lo stato TX, come mostrato sopra; attendere fino al termine dell'API UARTM_WriteByte(), ovvero lo stato TX è TRUE, quindi continuare con le azioni successive.//Viene aggiunta una restrizione perché questa funzione non è stata aggiunta finché il numero di versione SVN in uart_module.c non è 525. |
Nome | vuoto UARTM_DiscardReadBuffer(u32 CH) | |
Funzione | Elimina i dati nel buffer di lettura | |
Ingresso | CH | canale UART |
Utilizzo dell'API Esamples
Questa sezione dimostrerà la scrittura e la lettura dell'API example del codice dell'applicazione "Module_UART" utilizzando il processo di inizializzazione e il "UART_Module_Example” processo del codice dell'applicazione. Prima di utilizzare le API, gli utenti devono includere l'intestazione dell'API file nel codice sorgente del programma principale file (#include "middleware/uart_module.h").
Come mostrato nella Figura 14, quando si accede al processo di inizializzazione, definire prima la struttura di configurazione di base dell'UART. Quindi configurare i membri della struttura di configurazione di base UART tra cui BaudRate, WordLength, StopBits, Parity e Mode. Infine, chiama la funzione di inizializzazione dell'API, il cui completamento indica la fine del processo di inizializzazione. Dopo questo gli utenti possono continuare le operazioni di scrittura e lettura in base alla configurazione di base UART preimpostata.
Figura 14. Diagramma di flusso di inizializzazione
Il "UART_Module_Example" il codice dell'applicazione dimostra le operazioni di lettura e scrittura dell'API in modalità loopback. Il diagramma di flusso per questo è mostrato nella Figura 15. Le funzioni API utilizzate includono UARTM_WriteByte(), UARTM_Write(), UARTM_ReadByte(), UARTM_Read() e UARTM_GetReadBufferLength(). La loro descrizione è fornita nella sezione “Descrizione API”.
Figura 15. Diagramma di flusso di scrittura e lettura esamples
C'è un altro codice dell'applicazione "UART_Bridge" nella cartella "Module_UART" di cui è correlato file la descrizione è introdotta nella sezione “Struttura delle directory”. Il codice applicativo “UART_Bridge” attiva due canali UART, UART CH0 e UART CH1, e poi personalizza il protocollo di comunicazione tra i due dispositivi UART attraverso le strutture COMMAND, gCMD1 e gCMD2. Questi sono definiti in uart_bridge.c, come mostrato di seguito. UARTBridge_CMD1TypeDef gCMD1:
Variabile Nome | Tipo | Descrizione |
uIntestazione | u8 | Intestazione |
uCmd | u8 | Comando |
uData[3] | u8 | Dati |
UARTBridge_CMD2TypeDef gCMD2:
Variabile Nome | Tipo | Descrizione |
uIntestazione | u8 | Intestazione |
uCmdA | u8 | Comando A |
uCmdB | u8 | Comando B |
uData[3] | u8 | Dati |
Nel codice dell'applicazione "UART_Bridge", utilizzare gCMD1 per ricevere i dati come pacchetto di comandi e quindi analizzarli. Quindi, in base al protocollo di comunicazione personalizzato, impostare gCMD2 come pacchetto di risposta e trasmetterlo. Quello che segue è un example di un pacchetto di comando gCMD1) e un pacchetto di risposta (gCMD2). Pacchetto di comandi (UARTBridge_CMD1TypeDef gCMD1):
byte 0 | byte 1 | Byte 2 ~ Byte 4 |
uIntestazione | uCmd | uDati [3] |
"UN" | “1” | "x, y, z" |
Pacchetto di risposta (UARTBridge_CMD2TypeDef gCMD2):
byte 0 | byte 1 | byte 2 | Byte 3 ~ Byte 5 |
uIntestazione | uCmdA | uCmdB | uDati [3] |
"B" | "UN" | “1” | "x, y, z" |
Occupazione delle risorse
Prendendo l'HT32F52352 come example, le risorse occupate dal modulo UART sono mostrate di seguito.
Modello: HT32F52352 | |
Dimensione ROM | 946 byte |
Dimensioni RAM | 40*1 + 256*2 Byte |
Nota:
- Le variabili globali inclusi i flag e lo stato per un singolo canale occupano 40 byte di RAM.
- Questo è per una condizione in cui viene utilizzato un singolo canale e la dimensione del buffer TX/RX è di 128/128 byte. La dimensione del buffer può essere impostata in base ai requisiti dell'applicazione.
Tabella 4. Occupazione delle risorse del codice dell'applicazione
- Ambiente di compilazione: MDK-Arm V5.36, ARMCC V5.06 aggiornamento 7 (build 960)
- Opzione Ottimizza: Livello 2 (-O2)
Istruzioni per l'uso
Questo capitolo introdurrà la preparazione dell'ambiente per il codice dell'applicazione “Module_UART”, nonché le fasi di compilazione e test.
Preparazione ambientale
L'hardware e il software necessari per il codice dell'applicazione "Module_UART" sono elencati di seguito.
Tabella 5. Preparazione ambientale hardware/software
Hardware/Software | Contare | Nota |
Kit di avviamento | 1 | Questa nota applicativa utilizza lo Starter Kit HT32F52352 come esample |
Cavo USB | 1 | Micro USB, collegato al PC |
Codice dell'applicazione | — | Il percorso di download, file e la configurazione della directory sono introdotte nella sezione "Download e preparazione delle risorse". Percorso: "\\application\Module_UART\UART_Module_Example " |
Termine Tera | — | Fare riferimento alla sezione "Software del terminale". |
KeilIDE | — | Keil uVision V5.xx |
Innanzitutto, utilizzare lo Starter Kit HT32F52352 combinato con la funzione Virtual COM Port (VCP) di e-Link32 Lite per l'introduzione dell'applicazione UART. Ciò richiede l'implementazione della seguente preparazione ambientale:
- Ci sono due interfacce USB sulla scheda. Utilizzare il cavo USB per collegare il PC e l'interfaccia eLink32 Lite sulla scheda come mostrato nella Figura 16-(a).
- Poiché il codice dell'applicazione deve utilizzare la funzione VCP (Virtual COM Port) di e-Link32 Lite, assicurarsi che PAx*2 e DAP_Tx di UART Jumper-J2*1 siano stati cortocircuitati utilizzando un ponticello. La posizione J2 è indicata dalla Figura 16-(b).
Nota
- J2 sullo Starter Kit ha due opzioni, PAx e DAP_Tx in corto o PAx e RS232_Tx in corto. Fare riferimento al manuale dell'utente dello Starter Kit per le funzioni di impostazione dettagliate.
- La posizione del pin MCU UART RX su diversi kit di avvio è diversa. Questo esample utilizza PAx per indicare il pin RX.
Figura 16. Diagramma a blocchi del kit di avviamento HT32
Ora utilizza la scheda target utente combinata con la funzione Virtual COM Port (VCP) di e-Link32 Pro per l'introduzione dell'applicazione UART. Ciò richiede l'implementazione della seguente preparazione ambientale:
- Un lato di e-Link32 Pro è collegato a un PC tramite un cavo Mini USB e l'altro lato è collegato alla scheda di destinazione dell'utente tramite il suo cavo grigio a 10 bit. La connessione tra le interfacce SWD del cavo e la scheda target è implementata utilizzando linee Dupont, come mostrato nella Figura 17-(a).
- I pin di comunicazione seriale di e-Link32 Pro sono Pin#7 VCOM_RXD e Pin#8-VCOM_TXD. Questi devono essere collegati ai pin TX e RX della scheda di destinazione dell'utente, come mostrato nella Figura 17-(b).
Figura 17. Diagramma a blocchi della scheda target e-Link32 Pro + utente
Compilazione e test
Questa sezione prenderà il file “application\Module_UART\UART_Module_Example” come example per introdurre i processi di compilazione e test. Prima di questo, assicurati che tutti i preparativi descritti nella sezione precedente siano stati implementati e che il software del terminale Tera Term sia stato scaricato.
Le fasi operative dettagliate sono riepilogate di seguito.
Passaggio 1. Test di accensione
Configurare l'ambiente hardware come descritto nella sezione precedente. Dopo l'accensione, il LED di alimentazione D9 in basso a sinistra dello Starter Kit si illuminerà. Il LED USB D1 sull'e-Link32 Lite in alto a destra si illuminerà al termine dell'enumerazione USB. Se D1 non si illumina dopo un lungo periodo di tempo, confermare se il cavo USB è in grado di comunicare. In caso contrario, rimuoverlo e reinserirlo nuovamente.
Passo 2. Genera un progetto
Apri l'applicazione\Module_UART\UART_Module_Example, fare clic su _CreateProject.bat file per generare un progetto, come mostrato nella Figura 18. Poiché questa nota applicativa utilizza lo Starter Kit HT32F52352, aprire il progetto Keil IDE "Project_52352.uvprojx" che si trova nella cartella MDK_ARMv5.
Figura 18. Eseguire _CreateProject.bat per generare il progetto
Passaggio 3. Compilare e programmare
Dopo che il progetto è stato aperto, prima fai clic su "Build" (o usa la scorciatoia "F7"), quindi fai clic su "Download" (o usa la scorciatoia "F8"). Successivamente, i risultati della compilazione e del download verranno visualizzati nella finestra Build Output. Vedere Figura 19.
Figura 19. Creazione e download dei risultati
Passo 4. Apri il software Tera Term e configura la porta seriale
Apri il software Tera Term e la porta COM. Prestare attenzione al fatto che il numero della porta COM generato dallo Starter Kit sia corretto o meno. Quindi fare clic su "Setup >> Serial Port" per accedere all'interfaccia di configurazione. La configurazione dell'interfaccia UART del codice applicativo “Module_UART” è descritta nella sezione “Terminal Software”. Il risultato della configurazione è mostrato nella Figura 20.
Figura 20. Risultato impostazione porta seriale Tera Term
Passaggio 5. Ripristinare il sistema e testare
Premere il tasto SK reset – B1 Reset. Dopo questo, un "ABCQuesto è un test!" messaggio sarà
trasmesso tramite l'API e verrà visualizzato nella finestra Tera Term, come mostrato nella Figura 21. Per quanto riguarda la funzione di ricezione, quando si inseriscono i dati nella finestra Tera Term, verrà utilizzata l'API pertinente per determinare la lunghezza del buffer di ricezione. Quando i dati ricevuti dal PC raggiungono i 5 byte, i 5 byte di dati ricevuti verranno inviati in sequenza. Come mostrato nella Figura 22, i dati inseriti in sequenza sono "1, 2, 3, 4, 5", che vengono ricevuti e determinati tramite l'API. Successivamente, i dati "1, 2, 3, 4, 5" verranno stampati dopo i cinque input.
Figura 21. Test funzionale del codice dell'applicazione “Module_UART” – Trasmissione
Figura 22. Test funzionale del codice dell'applicazione "Module_UART" - Ricevi
Istruzioni per il trapianto
Questa sezione introdurrà come integrare le API nei progetti dell'utente.
Fase 1. Aggiungi uart_module.c file nel progetto. Fare clic con il tasto destro sulla cartella Utente. Seleziona “Aggiungi esistente Files al gruppo 'Utente'…”, quindi selezionare uart_module.c file e fare clic su "Aggiungi", come mostrato nella Figura 23. Fare riferimento alla sezione "Struttura delle directory" per la file descrizione del percorso.
Figura 23. Aggiungere uart_module.c File Progettare
Passo 2. Aggiungere ring_buffer.c file nel progetto. Fare clic con il tasto destro sulla cartella Utente. Seleziona “Aggiungi esistente Files al gruppo 'Utente'…”, quindi selezionare ring_buffer.c file e fare clic su "Aggiungi", come mostrato nella Figura 24.\ Fare riferimento alla sezione "Struttura delle directory" per il file descrizione del percorso.
Figura 24. Aggiungere ring_buffer.c File Progettare
Passo 3. Includi l'intestazione dell'API file all'inizio di main.c, come mostrato nella Figura 25. (Ext: #include "middleware/uart_module.h")
Figura 25. Includi intestazione API File a main.c
Passo 4. Implementa le impostazioni richieste per la comunicazione UART utilizzando ht32_board_config.h file. Questo è descritto in dettaglio nelle sezioni "Descrizione delle impostazioni" e "Modifica delle impostazioni e domande frequenti".
Modifica delle impostazioni e domande frequenti
Questa sezione introdurrà come modificare le impostazioni UART e spiegherà alcune domande comuni riscontrate durante l'uso.
Cambia l'assegnazione dei pin UART
- Facendo riferimento al capitolo "Assegnazione pin" della scheda tecnica HT32F52352, cercare la tabella di mappatura delle funzioni alternative che elenca le funzioni AFIO del tipo di dispositivo. Per i pin rilevanti per UART, fare riferimento alla colonna "AF6 USART/UART", come mostrato nella Figura 26.
Figura 26. Tabella di mappatura delle funzioni alternative HT32F52352
- Questo passaggio guiderà gli utenti a individuare i pin UART corrispondenti utilizzando la tabella sopra. L'HT32F52352 esample utilizza USART1 come canale predefinito. Qui, i pin TX e RX sono USR1_TX e USR1_RX e si trovano rispettivamente su PA4 e PA5. La Figura 27 mostra la corrispondenza dei pin e le definizioni dei pin in "ht32_board_config.h". I campi vuoti di "Pacchetto" nella tabella di assegnazione dei pin indicano che non ci sono GPIO rilevanti in questo pacchetto. Per modificare i pin UART, trova le posizioni dei pin di destinazione e ridefinisci i pin utilizzando "ht32_board_config.h" file.
Figura 27. Corrispondenza dei pin e modifica delle impostazioni
Aggiungi un canale UART
Prendendo l'HT32F52352 HTCFG_UARTM_CH1 come example, qui viene descritto come aggiungere un nuovo canale UART.
Modifica ht32_board_config.h file
Facendo riferimento al capitolo "Assegnazione pin" della scheda tecnica HT32F52352, cercare la tabella di mappatura delle funzioni alternative che elenca le funzioni AFIO del tipo di dispositivo. Poiché USART1 è stato utilizzato come HTCFG_UARTM_CH0, HTCFG_UARTM_CH1 appena aggiunto può scegliere USART0. Qui, i pin TX e RX si trovano rispettivamente su PA2 e PA3, come mostrato nella metà superiore della Figura 28. Le modifiche corrispondenti sono implementate utilizzando le righe di codice 120~126 in ht32_board_config.h, come mostrato dalla casella tratteggiata rossa in Figura 28.
Figura 28. Aggiunta di un canale UART
Domande frequenti
Q: Nel passaggio 5 della sezione Compilazione e test, il test funzionale di trasmissione è normale. Qui, "ABCQuesto è un test!" messaggio è stato visualizzato correttamente, tuttavia per la funzione di ricezione, perché i cinque valori di input non vengono restituiti e visualizzati?
A: Verificare se i pin MCU UART RX e DAP_Tx di UART Jumper-J2 sono stati cortocircuitati utilizzando un ponticello. Poiché il codice dell'applicazione "Module_UART" deve utilizzare la porta COM virtuale (VCP) di e-Link32 Lite, l'impostazione di cortocircuito deve essere applicata ai due pin di sinistra di UART Jumper-J2, come mostrato nella Figura 29.
Figura 29. Impostazione UART Jumper-J2
D:Dopo eseguendo "Build" (o scorciatoia "F7"), viene visualizzato un messaggio di errore che indica che la versione della libreria del firmware è precedente a quella richiesta? Vedere Figura 30.
A: L'implementazione del codice dell'applicazione "Module_UART" deve includere uart_module.c/h files che richiede una determinata versione della libreria del firmware. Quando viene visualizzato un messaggio di errore di questo tipo, significa che la libreria del firmware attualmente utilizzata è una versione precedente. Pertanto è necessario scaricare la versione più recente tramite il collegamento fornito nella sezione “Libreria firmware”.
Figura 30. Messaggio di errore della versione della libreria firmware
Conclusione
Questo documento ha fornito un'introduzione di base per aiutare gli utenti a comprendere meglio il codice dell'applicazione "Module_UART" e il protocollo di comunicazione UART. Questo è stato seguito dal download e dalla preparazione delle risorse. Il capitolo Descrizione Funzionale ha introdotto il file struttura della directory, architettura dell'API, descrizione dell'API e utilizzo dell'API esamples. Il capitolo Istruzioni per l'uso ha dimostrato la preparazione ambientale, la compilazione e il test del codice applicativo "Module_UART". Ha anche fornito istruzioni per il trapianto di codice e l'impostazione della modifica, oltre a spiegare alcuni problemi comuni che potrebbero verificarsi. Tutto questo combinato consentirà agli utenti di capire rapidamente come utilizzare le API e successivamente ridurre la quantità di tempo per iniziare.
Materiale di riferimento
Per ulteriori informazioni, consultare Holtek websito: www.holtek.com
Versioni e informazioni sulle modifiche
Data | Autore | Pubblicazione | Informazioni sulla modifica |
2022.04.30 | 蔡期育 (Chi-Yu Tsai) | V1.00 | Prima versione |
Disclaimer
Tutte le informazioni, marchi, loghi, grafica, video, clip audio, collegamenti e altri elementi che appaiono su questo websito ("Informazioni") sono solo di riferimento ed è soggetto a modifiche in qualsiasi momento senza preavviso ea discrezione di Holtek Semiconductor Inc. e delle sue società collegate (di seguito "Holtek", "l'azienda", "noi", " noi' o 'nostro'). Mentre Holtek si impegna a garantire l'accuratezza delle Informazioni su questo websito, Holtek non fornisce alcuna garanzia esplicita o implicita sull'accuratezza delle Informazioni. Holtek non si assume alcuna responsabilità per eventuali inesattezze o perdite.
Holtek non sarà responsabile per eventuali danni (inclusi, a titolo esemplificativo ma non esaustivo, virus informatici, problemi di sistema o perdita di dati) di qualsiasi natura derivanti dall'uso o in connessione con l'uso di questo websito da qualsiasi parte. Potrebbero esserci collegamenti in quest'area, che consentono di visitare il websiti di altre aziende.
Questi webi siti non sono controllati da Holtek. Holtek non si assume alcuna responsabilità e non garantisce in alcun modo le Informazioni visualizzate in tali siti. Collegamenti ipertestuali ad altro webi siti sono a proprio rischio.
Limitazione di responsabilità
In nessun caso Holtek Limited sarà responsabile nei confronti di terzi per eventuali perdite o danni di qualsiasi natura o comunque causati direttamente o indirettamente in relazione all'accesso o all'utilizzo di questo websito, il suo contenuto o qualsiasi bene, materiale o servizio.
Legge applicabile
Il Disclaimer contenuto nel websito sarà disciplinato e interpretato in conformità con le leggi della Repubblica di Cina. Gli utenti si sottoporranno alla giurisdizione non esclusiva dei tribunali della Repubblica di Cina.
Aggiornamento della dichiarazione di non responsabilità
Holtek si riserva il diritto di aggiornare il Disclaimer in qualsiasi momento con o senza preavviso, tutte le modifiche sono efficaci immediatamente dopo la pubblicazione sul websito.
Documenti / Risorse
![]() |
HOLTEK HT32 MCU UART Nota applicativa [pdf] Manuale d'uso HT32 MCU, Nota applicativa UART, HT32 MCU UART, Nota applicativa, HT32, MCU UART Nota applicativa, HT32 MCU UART Nota applicativa |