Technologieaustausch

Funktionsprinzip der seriellen STM32-Schnittstelle

2024-07-12

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

Der serielle STM32-Port ist recht umfangreich und verfügt über leistungsstarke Funktionen. Es kann bis zu 5 serielle Ports mit fraktioniertem Baudratengenerator bereitstellen, unterstützt optische Single-Line-Kommunikation und Halbduplex-Single-Line-Kommunikation, unterstützt LIN, Smartcard-Protokoll und IrDA-SIRENDEC-Spezifikation (wird nur von seriellem Port 3 unterstützt), DMA , usw.

Die grundlegendste Einstellung des seriellen Ports ist die Einstellung der Baudrate. Der serielle STM32-Port ist recht einfach zu verwenden, solange Sie den Takt des seriellen Ports einschalten, den Modus des entsprechenden E/A-Ports einstellen und dann die Baudrate, die Datenbitlänge, das Paritätsbit und andere Informationen konfigurieren, die Sie verwenden können Es. Im Folgenden stellen wir diese Register kurz vor, die in direktem Zusammenhang mit der Grundkonfiguration der seriellen Schnittstelle stehen.

1. Aktivieren Sie die Uhr der seriellen Schnittstelle. Als Peripheriegerät von STM32 wird der Takt des seriellen Ports durch das Peripherie-Immer-Aktivierungsregister gesteuert. Der serielle Port 1, den wir hier verwenden, ist Bit 14 des APB2ENR-Registers. Mit Ausnahme der Taktfreigabe des seriellen Ports 1 im APB2ENR-Register befinden sich die Taktfreigabebits anderer serieller Ports alle in APB1ENR.

2. Zurücksetzen der seriellen Schnittstelle . Wenn in einem Peripheriegerät eine Anomalie auftritt, kann das Peripheriegerät durch Setzen des entsprechenden Bits im Reset-Register zurückgesetzt werden. Anschließend kann das Peripheriegerät neu konfiguriert werden, damit es wieder funktioniert.Wenn das System zum ersten Mal Peripheriegeräte konfiguriert, wird dies im Allgemeinen zuerst der Fall sein
Führen Sie einen Vorgang durch, um dieses Peripheriegerät zurückzusetzen. Das Zurücksetzen des seriellen Ports 1 wird durch die Konfiguration von Bit 14 des APB2RSTR-Registers erreicht.

3. Einstellung der Baudrate der seriellen Schnittstelle. Jeder serielle Port verfügt über ein eigenes unabhängiges Baudratenregister USART BRR. Durch Einstellen dieses Registers können Sie verschiedene Baudraten konfigurieren. Die Bitbeschreibungen dieses Registers lauten wie folgt:

 

4. Steuerung der seriellen Schnittstelle. Jeder serielle Port von STM32 verfügt über drei Steuerregister USART CR1~3. Viele Konfigurationen des seriellen Ports werden über diese drei Register eingestellt.

5. Senden und Empfangen von Daten. Das Senden und Empfangen von STM32 erfolgt über das Datenregister USART _DR. Beim Schreiben von Daten in dieses Register werden diese automatisch gesendet
Gleichzeitig wird es auch in diesem Register gespeichert.

Es ist ersichtlich, dass, obwohl es sich um ein 32-Bit-Register handelt, nur die unteren 9 Bits (DR[8:0]) verwendet werden und die anderen reserviert sind. DR[8:0] sind Daten der seriellen Schnittstelle, einschließlich gesendeter oder empfangener Daten. Da es aus zwei Registern besteht, einem zum Senden (TDR) und einem zum Empfangen (RDR), verfügt dieses Register sowohl über Lese- als auch über Schreibfunktionen. Das TDR-Register stellt eine parallele Schnittstelle zwischen dem internen Bus und dem Ausgangsschieberegister bereit. Das RDR-Register stellt eine parallele Schnittstelle zwischen dem Eingangsschieberegister und dem internen Bus bereit.

Beim Senden mit aktiviertem Paritätsbit (das USART CR1 PCE-Bit ist gesetzt) ​​wird der in das MSB geschriebene Wert (MSB ist das 7. oder 8. Bit, abhängig von der Länge der Daten) durch nachfolgende Paritätsbits ersetzt. Wenn das Paritätsbit für den Empfang aktiviert ist, ist das gelesene MSB-Bit das empfangene Paritätsbit.

6. Der Status der seriellen Schnittstelle kann über das Statusregister USART SR gelesen werden.

Hier konzentrieren wir uns auf zwei Bits, die Bits 5 und 6 RXNE und TC.
RXNE (Lesedatenregister ist nicht leer). Wenn dieses Bit auf 1 gesetzt ist, zeigt es an, dass Daten empfangen wurden und ausgelesen werden können. Zu diesem Zeitpunkt müssen wir den USART DR so schnell wie möglich lesen. Durch Lesen des USART DR können wir dieses Bit löschen oder 0 in dieses Bit schreiben, um es direkt zu löschen.
TC (Senden abgeschlossen): Wenn dieses Bit gesetzt ist, bedeutet dies, dass die Daten in USARTDR gesendet wurden. Wenn der Interrupt für dieses Bit gesetzt ist, wird ein Interrupt generiert. Dieses Bit verfügt auch über zwei Löschmethoden: 1: USART SR lesen und USARTDR schreiben. 2: Schreiben Sie 0 direkt in dieses 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. }

Initialisieren Sie das Hardwaregerät der seriellen Schnittstelle und aktivieren Sie Interrupts:

Konfigurationsschritte:

(1) Schalten Sie die Uhren von GPI0 und USART1 ein
(2) Stellen Sie den GPI0-Modus der beiden USART1-Pins ein
(3) Konfigurieren Sie das USART1-Datenformat, die Baudrate und andere Parameter
(4) Aktivieren Sie die USART1-Empfangsunterbrechungsfunktion
(5) Aktivieren Sie abschließend die USART1-Funktion