Condivisione della tecnologia

Principio di funzionamento della porta seriale STM32

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

La porta seriale STM32 è piuttosto ricca e ha funzioni potenti. Può fornire fino a 5 porte seriali, con generatore di baud rate frazionario, supporta la comunicazione ottica a linea singola e la comunicazione a linea singola half-duplex, supporta LIN, protocollo smart card e specifica IrDA SIRENDEC (supportata solo dalla porta seriale 3), DMA , eccetera.

L'impostazione più semplice della porta seriale è l'impostazione della velocità di trasmissione. La porta seriale STM32 è abbastanza semplice da usare finché si accende l'orologio della porta seriale, si imposta la modalità della porta IO corrispondente e quindi si configura la velocità di trasmissione, la lunghezza del bit di dati, il bit di parità e altre informazioni. Esso. Di seguito presenteremo brevemente questi registri direttamente correlati alla configurazione di base della porta seriale.

1. Abilita l'orologio della porta seriale. Essendo una periferica di STM32, l'orologio della porta seriale è controllato dal registro di abilitazione sempre della periferica. La porta seriale 1 che utilizziamo qui è il bit 14 del registro APB2ENR. Fatta eccezione per l'abilitazione dell'orologio della porta seriale 1 nel registro APB2ENR, i bit di abilitazione dell'orologio delle altre porte seriali sono tutti in APB1ENR.

2. Ripristino della porta seriale . Quando si verifica un'anomalia in una periferica, la periferica può essere ripristinata impostando il bit corrispondente nel registro di ripristino, quindi la periferica può essere riconfigurata per farla funzionare nuovamente.Generalmente, quando il sistema configura per la prima volta le periferiche, lo farà per primo
Eseguire un'operazione per ripristinare questa periferica. Il reset della porta seriale 1 si ottiene configurando il bit 14 del registro APB2RSTR.

3. Impostazione della velocità di trasmissione della porta seriale. Ciascuna porta seriale ha il proprio registro di baud rate indipendente USART BRR Impostando questo registro, è possibile configurare diverse velocità di baud. Le descrizioni dei bit di questo registro sono le seguenti:

 

4. Controllo della porta seriale. Ciascuna porta seriale di STM32 ha tre registri di controllo USART CR1~3 Molte configurazioni della porta seriale vengono impostate tramite questi tre registri.

5. Invio e ricezione dati. L'invio e la ricezione di STM32 avviene tramite il registro dati USART _DR Questo è un doppio registro, che include TDR e RDR. Quando si scrivono dati su questo registro, la porta seriale li invierà automaticamente quando i dati vengono ricevuti
volta, viene memorizzato anche in questo registro.

Si può vedere che sebbene sia un registro a 32 bit, vengono utilizzati solo i 9 bit inferiori (DR[8:0]) e gli altri sono riservati. DR[8:0] sono i dati della porta seriale, inclusi i dati inviati o ricevuti. Essendo composto da due registri, uno di invio (TDR) e uno di ricezione (RDR), questo registro ha sia funzioni di lettura che di scrittura. Il registro TDR fornisce un'interfaccia parallela tra il bus interno e il registro a scorrimento di uscita. Il registro RDR fornisce un'interfaccia parallela tra il registro a scorrimento di ingresso e il bus interno.

Quando si trasmette con il bit di parità abilitato (il bit USART CR1 PCE è impostato), il valore scritto sull'MSB (MSB è il 7° o l'8° bit a seconda della lunghezza dei dati) verrà modificato dalla successiva sostituzione dei bit di parità. Quando il bit di parità è abilitato per la ricezione, il bit MSB letto è il bit di parità ricevuto.

6. Lo stato della porta seriale può essere letto attraverso il registro di stato USART SR.

Qui ci concentriamo su due bit, i bit 5 e 6 RXNE e TC.
RXNE (il registro dei dati di lettura non è vuoto), quando questo bit è impostato su 1, indica che i dati sono stati ricevuti e possono essere letti. Ciò che dobbiamo fare in questo momento è leggere l'USART DR il prima possibile. Leggendo l'USART DR, possiamo cancellare questo bit, oppure possiamo scrivere 0 su questo bit per cancellarlo direttamente.
TC (invio completato), quando questo bit è impostato, significa che i dati in USARTDR sono stati inviati. Se l'interruzione per questo bit è impostata, verrà generata un'interruzione. Questo bit ha anche due metodi di cancellazione: 1: leggi USART SR e scrivi USARTDR. 2: Scrivi 0 direttamente su questo bit.

  1. void uart_init(u32 pclk2,u32 bound)
  2. {
  3. float temp;
  4. u16 mantissar
  5. u16 fraction;
  6. temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
  7. mantissa=temp;//得到整数部分
  8. fraction=(temp-mantissa)*16://得到小数部分
  9. mantissa<<=4;
  10. mantissa+=fraction;
  11. RCC->APB2ENRI=1<<2;//使能PORTA口时钟
  12. RCC->APB2ENRI=1<<14;//使能串口时钟
  13. GPIOA->CRH&=0XFFFFF00F;
  14. GPIOA->CRH|=0X000008B0;//IO状态设置
  15. RCC->APB2RSTRI=1<<14;//复位串口1
  16. RCC->APB2RSTR&=~(1<<14)://停止复位
  17. //波特率设置
  18. USART1->BRR=mantissa;//波特率设置
  19. USART1->CR1|=0X200C;//1位停止,无校验位,
  20. USART1->CR1|=1<<8;//PE中断使能
  21. USART1->CR11=1<<5;//接收缓冲区非空中断使能
  22. MY_NVIC_Init(3,3,USART1 IRQChannel,2);//组2,最低优先级
  23. }

Inizializza il dispositivo hardware della porta seriale e abilita gli interrupt:

Passaggi di configurazione:

(1) Accendere gli orologi di GPI0 e USART1
(2) Impostare la modalità GPI0 dei due pin USART1
(3) Configurare il formato dati USART1, la velocità di trasmissione e altri parametri
(4) Abilita la funzione di interruzione di ricezione USART1
(5)Abilitare infine la funzione USART1