Menerapkan Fungsi DMA2D dengan Papan Nucleo STM32H563

Daftar Isi

DMA 2D transfer result

Artikel ini bertujuan untuk memperkenalkan penerapan mode DMA2D melalui papan pengembangan STM32H563. Yang dimaksud dengan mode DMA 2D adalah bahwa DMA dapat menyesuaikan mode dan kemampuan pengalamatan DMA secara dinamis dengan mengatur offset pengalamatan intra-blok dan offset pengalamatan blok terlebih dahulu. Dengan kata lain, saat DMA melakukan transmisi data, pengalamatan intra-blok tidak lagi selalu ditetapkan untuk disimpan secara berurutan, tetapi interval alamat untuk mengakses data selama dua transmisi yang berurutan dapat ditentukan melalui pemrograman. Untuk transfer blok yang berulang, prosesnya tidak lagi sekadar memulai ulang dari posisi yang sama setiap kali, tetapi alamat awal transfer baru dapat disesuaikan sesuai dengan offset alamat blok.

Prinsip transmisi DMA 2D

Asumsikan bahwa tiga transfer dimulai untuk permintaan DMA yang sama, yang sesuai dengan tiga blok transfer DMA.

DMA transfer block
DMA transfer block

Seperti yang ditunjukkan pada gambar di atas, 5 data yang ditandai dengan warna merah [yaitu, blok pertama] dikirimkan untuk pertama kalinya, dan akses data dilakukan sesuai dengan gambar. Pada kali kedua dan ketiga juga serupa dengan kali pertama, dan masing-masing 5 data berwarna hijau [yaitu, blok kedua] serta 5 data berwarna biru [yaitu, blok ketiga] dikirimkan. Jelaslah bahwa aturan akses data di setiap blok transmisi sama, dengan dua ruang penyimpanan yang dipisahkan oleh dua. Pada saat yang sama, ketika transmisi kedua dimulai setelah transmisi pertama selesai, atau transmisi ketiga dimulai setelah transmisi kedua selesai, alamat awal diatur mundur 14 ruang alamat dari posisi saat ini sebelum dimulai.

Bagaimana cara menggunakan fungsi DMA 2D?

Dalam contoh ini, kami menggunakan papan Nucleo STM32H563ZI. Dan USART3 dari chip tersebut harus dihubungkan dengan VCP dari STLINK onboard. Gunakan asisten debugging port serial di sisi PC untuk mengirimkan tiga set data ke MCU secara bertahap, isinya adalah 5 karakter R, 5 karakter G, dan 5 karakter B. Aktifkan fungsi DMA 2D yang diterima oleh USART3. 

Ngomong-ngomong, sebagai pengingat, tidak semua saluran GPDMA seri STM32H5 mendukung fungsi pengalamatan DMA 2D. Apakah saluran DMA mendukung fungsi 2D telah ditulis dengan jelas di antarmuka konfigurasi CubeMx. Jika Anda menggunakan konfigurasi CubeMx, Anda dapat memilih kata yang sesuai. Di sini saya memilih DMA CH6 dari GPDMA1, yang mendukung fungsi DMA 2D.

Konfigurasi dasar untuk menggunakan STM32CubeMX adalah sebagai berikut:

Basic configuration of STM32CubeMx
Basic configuration of STM32CubeMx

Fokus konfigurasi kami adalah pengalamatan 2D, dengan rincian sebagai berikut:

Sekarang ini adalah penerimaan USART3DMA, jelas alamat sumbernya tetap, yaitu register data penerima USART3, sehingga offset yang terkait dengan alamat sumber di sini adalah 0. Alamat tujuan akses DMA adalah memori, yang bersifat variabel. Setiap kali satu bagian data disimpan dalam blok, data tersebut digeser ke depan sebanyak dua posisi, sesuai dengan nilai Offset Alamat Tujuan di bawah ini. Ketika putaran transmisi berikutnya dimulai setelah setiap transmisi blok selesai, alamat awal tepat berada 14 posisi ke belakang, sesuai dengan nilai Offset Alamat Tujuan Blok berikut, ke belakang bernilai negatif, dan ke depan bernilai positif. Di sini, total 3 transfer blok diulang, sesuai dengan nilai penghitung Pengulangan di bawah ini.

2D addressing configuration
2D addressing configuration

Faktanya, setelah 3 putaran transmisi blok DMA yang berulang, data yang diterima tampak seperti pola yang ditunjukkan oleh panah pada gambar di bawah ini.

DMA 2D transfer result
DMA 2D transfer result

Gunakan STM32CubeMx untuk menyelesaikan konfigurasi, lalu tambahkan kode pengguna untuk melakukan debug dan verifikasi. Kode pengguna yang perlu ditambahkan secara manual terutama terdiri dari dua baris berikut:

				
					__HAL_LINKDMA(&huart3, hdmarx, handle_GPDMA1_Channel6);

HAL_UART_Receive_DMA(&huart3,(uint8_t *)aRxBuffer, 5); //Receive 5 data per block
				
			

Gambar berikut ini menunjukkan hasil berdasarkan proses debugging. Melalui tiga kali penerimaan DMA yang independen, data disimpan secara teratur dalam urutan RGB.

Result of DMA data transfer
Result of DMA data transfer

Berlangganan

Daftar ke milis kami untuk mendapatkan pembaruan blog bulanan, berita teknologi, dan studi kasus. Kami tidak akan pernah mengirimkan spam, dan Anda dapat berhenti berlangganan kapan saja.

Scroll to Top

Instant Quote