2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
STM32-sarjaportti on melko rikas ja siinä on tehokkaita toimintoja. Se voi tarjota jopa 5 sarjaporttia, murto-siirtonopeuden generaattorilla, tukee yksilinjaista optista tiedonsiirtoa ja half-duplex yksilinjaista tiedonsiirtoa, tukee LIN:iä, älykorttiprotokollaa ja IrDA SIRENDEC -spesifikaatioita (tukee vain sarjaportilla 3), DMA , jne.
Sarjaportin perusasetus on siirtonopeusasetus. STM32-sarjaportti on melko yksinkertainen käyttää Niin kauan kuin kytket sarjaportin kellon päälle, asetat vastaavan IO-portin tilan ja määrität sitten baudinopeuden, databitin pituuden, pariteettibitin ja muut tiedot. se. Alla esittelemme lyhyesti nämä rekisterit, jotka liittyvät suoraan sarjaportin peruskokoonpanoon.
1. Ota sarjaportin kello käyttöön. STM32:n oheislaitteena sarjaportin kelloa ohjaa oheislaitteiden aina sallittu -rekisteri. Tässä käyttämämme sarjaportti 1 on APB2ENR-rekisterin bitti 14. Lukuun ottamatta APB2ENR-rekisterin sarjaportin 1 kellon aktivointia, muiden sarjaporttien kellon sallivat bitit ovat kaikki APB1ENR:ssä.
2. Sarjaportin nollaus . Kun oheislaitteessa ilmenee poikkeavuus, oheislaite voidaan nollata asettamalla vastaava bitti nollausrekisteriin, ja sitten oheislaite voidaan konfiguroida uudelleen, jotta se toimii uudelleen.Yleensä kun järjestelmä ensimmäisen kerran määrittää oheislaitteet, se tekee sen ensin
Nollaa tämä oheislaite suorittamalla toiminto. Sarjaportin 1 nollaus saadaan aikaan konfiguroimalla APB2RSTR-rekisterin bitti 14.
3. Sarjaportin siirtonopeuden asetus. Jokaisella sarjaportilla on oma itsenäinen tiedonsiirtonopeusrekisteri USART BRR Asettamalla tämän rekisterin, voit määrittää erilaisia siirtonopeuksia. Tämän rekisterin bittikuvaukset ovat seuraavat:
4. Sarjaportin ohjaus. Jokaisessa STM32:n sarjaportissa on kolme ohjausrekisteriä USART CR1~3. Monet sarjaportin konfiguraatiot asetetaan näiden kolmen rekisterin kautta.
5. Tiedon lähettäminen ja vastaanotto. STM32:n lähettäminen ja vastaanotto tapahtuu datarekisterin USART _DR kautta. Tämä on kaksoisrekisteri, joka sisältää TDR:n ja RDR:n
ajan, se tallennetaan myös tähän rekisteriin.
Voidaan nähdä, että vaikka kyseessä on 32-bittinen rekisteri, vain alempia 9 bittiä (DR[8:0]) käytetään ja muut on varattu. DR[8:0] on sarjaporttidataa, mukaan lukien lähetetty tai vastaanotettu data. Koska se koostuu kahdesta rekisteristä, joista toinen on lähetys (TDR) ja toinen vastaanotto (RDR), tällä rekisterillä on sekä luku- että kirjoitustoiminnot. TDR-rekisteri tarjoaa rinnakkaisrajapinnan sisäisen väylän ja lähtösiirtorekisterin välille. RDR-rekisteri tarjoaa rinnakkaisrajapinnan tulosiirtorekisterin ja sisäisen väylän välillä.
Lähetettäessä tarkistusbitin ollessa käytössä (USART CR1 PCE -bitti on asetettu), MSB:lle kirjoitettu arvo (MSB on 7. tai 8. bitti datan pituudesta riippuen) muutetaan myöhemmillä tarkistusbiteillä. Kun pariteettibitti on otettu käyttöön vastaanottoa varten, luettu MSB-bitti on vastaanotettu pariteettibitti.
6. Sarjaportin tila voidaan lukea tilarekisterin USART SR kautta.
Tässä keskitymme kahteen bittiin, bitteihin 5 ja 6 RXNE ja TC.
RXNE (lukutietorekisteri ei ole tyhjä), kun tämä bitti on asetettu arvoon 1, se ilmaisee, että data on vastaanotettu ja se voidaan lukea. Tällä hetkellä meidän on luettava USART DR mahdollisimman pian Lukemalla USART DR, voimme tyhjentää tämän bitin tai voimme kirjoittaa 0 tähän bittiin tyhjentääksesi sen.
TC (lähetys valmis), kun tämä bitti on asetettu, se tarkoittaa, että USARTDR:n tiedot on lähetetty. Jos tämän bitin keskeytys on asetettu, keskeytys luodaan. Tällä bitillä on myös kaksi tyhjennysmenetelmää: 1: lue USART SR ja kirjoita USARTDR. 2: Kirjoita 0 suoraan tähän bittiin.
- void uart_init(u32 pclk2,u32 bound)
- {
- float temp;
- u16 mantissar
- u16 fraction;
- temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
- mantissa=temp;//得到整数部分
- fraction=(temp-mantissa)*16://得到小数部分
- mantissa<<=4;
- mantissa+=fraction;
- RCC->APB2ENRI=1<<2;//使能PORTA口时钟
- RCC->APB2ENRI=1<<14;//使能串口时钟
- GPIOA->CRH&=0XFFFFF00F;
- GPIOA->CRH|=0X000008B0;//IO状态设置
- RCC->APB2RSTRI=1<<14;//复位串口1
- RCC->APB2RSTR&=~(1<<14)://停止复位
- //波特率设置
- USART1->BRR=mantissa;//波特率设置
- USART1->CR1|=0X200C;//1位停止,无校验位,
-
- USART1->CR1|=1<<8;//PE中断使能
- USART1->CR11=1<<5;//接收缓冲区非空中断使能
- MY_NVIC_Init(3,3,USART1 IRQChannel,2);//组2,最低优先级
- }
Alusta sarjaporttilaitteisto ja ota keskeytykset käyttöön:
Määritysvaiheet:
(1) Kytke GPI0:n ja USART1:n kellot päälle
(2) Aseta kahden USART1-nastan GPI0-tila
(3) Määritä USART1-datamuoto, tiedonsiirtonopeus ja muut parametrit
(4) Ota käyttöön USART1-vastaanottokeskeytystoiminto
(5) Ota lopuksi käyttöön USART1-toiminto