informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Port serial STM32 cukup kaya dan memiliki fungsi yang kuat. Ini dapat menyediakan hingga 5 port serial, dengan generator baud rate pecahan, mendukung komunikasi optik jalur tunggal dan komunikasi jalur tunggal setengah dupleks, mendukung LIN, protokol kartu pintar dan spesifikasi IrDA SIRENDEC (hanya didukung oleh port serial 3), DMA , dll.
Pengaturan paling dasar dari port serial adalah pengaturan baud rate. Port serial STM32 cukup mudah digunakan, selama Anda mengaktifkan jam port serial, mengatur mode port IO yang sesuai, dan kemudian mengkonfigurasi baud rate, panjang bit data, bit paritas, dan informasi lainnya, Anda dapat menggunakan dia. Di bawah ini, kami akan memperkenalkan secara singkat register-register ini yang berhubungan langsung dengan konfigurasi dasar port serial.
1. Aktifkan jam port serial. Sebagai periferal STM32, jam port serial dikendalikan oleh register selalu aktifkan periferal. Port serial 1 yang kami gunakan di sini adalah bit 14 dari register APB2ENR. Kecuali untuk pengaktifan jam pada port serial 1 di register APB2ENR, bit pengaktifan jam dari port serial lainnya semuanya ada di APB1ENR.
2. Reset port serial . Ketika suatu kelainan terjadi pada suatu periferal, periferal tersebut dapat direset dengan mengatur bit yang sesuai dalam register reset, dan kemudian periferal tersebut dapat dikonfigurasi ulang agar dapat berfungsi kembali.Umumnya, saat sistem pertama kali mengonfigurasi periferal, sistem akan melakukan konfigurasi terlebih dahulu
Lakukan operasi untuk mengatur ulang periferal ini. Reset port serial 1 dicapai dengan mengkonfigurasi bit 14 dari register APB2RSTR.
3. Pengaturan laju baud port serial. Setiap port serial memiliki register baud rate tersendiri USART BRR. Dengan mengatur register ini, Anda dapat mengkonfigurasi baud rate yang berbeda. Deskripsi bit register ini adalah sebagai berikut:
4. Kontrol port serial. Setiap port serial STM32 memiliki tiga register kontrol USART CR1~3. Banyak konfigurasi port serial diatur melalui ketiga register ini.
5. Pengiriman dan penerimaan data. Pengiriman dan penerimaan STM32 dilakukan melalui register data USART _DR. Ini adalah register ganda, termasuk TDR dan RDR. Saat menulis data ke register ini, port serial akan mengirimkannya secara otomatis
waktu, itu juga disimpan dalam register ini.
Terlihat bahwa meskipun registernya 32-bit, hanya 9 bit terbawah (DR[8:0]) yang digunakan, dan bit lainnya dicadangkan. DR[8:0] adalah data port serial, termasuk data yang dikirim atau diterima. Karena terdiri dari dua register, satu untuk pengirim (TDR) dan satu lagi untuk menerima (RDR), register ini mempunyai fungsi membaca dan menulis. Register TDR menyediakan antarmuka paralel antara bus internal dan register geser keluaran. Register RDR menyediakan antarmuka paralel antara register geser input dan bus internal.
Saat transmisi dengan bit pemeriksaan diaktifkan (bit USART CR1 PCE diatur), nilai yang ditulis ke MSB (MSB adalah bit ke-7 atau ke-8 tergantung pada panjang data) akan diubah dengan penggantian bit pemeriksaan berikutnya. Ketika bit paritas diaktifkan untuk penerimaan, bit MSB yang dibaca adalah bit paritas yang diterima.
6. Status port serial dapat dibaca melalui status register USART SR.
Di sini kita fokus pada dua bit, bit 5 dan 6 RXNE dan TC.
RXNE (register data baca tidak kosong), bila bit ini disetel ke 1, menandakan bahwa data telah diterima dan dapat dibaca. Yang harus kita lakukan saat ini adalah membaca USART DR secepatnya. Dengan membaca USART DR, kita dapat menghapus bit ini, atau kita dapat menulis 0 pada bit ini untuk menghapusnya secara langsung.
TC (kirim selesai), bila bit ini diset berarti data di USARTDR sudah terkirim. Jika interupsi untuk bit ini disetel, interupsi akan dihasilkan. Bit ini juga memiliki dua metode kliring: 1: membaca USART SR dan menulis USARTDR. 2: Tulis 0 langsung ke bit ini.
- 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,最低优先级
- }
Inisialisasi perangkat keras port serial dan aktifkan interupsi:
Langkah-langkah konfigurasi:
(1) Nyalakan jam GPI0 dan USART1
(2) Atur mode GPI0 dari dua pin USART1
(3) Konfigurasikan format data USART1, baud rate, dan parameter lainnya
(4) Aktifkan fungsi interupsi penerimaan USART1
(5) Terakhir aktifkan fungsi USART1