آموزش STM32 با توابع LL قسمت شانزدهم: استفاده از DMA برای ارسال اطلاعات از حافظه توسط واحد USART

0
387
آموزش STM32 با توابع LL قسمت شانزدهم: استفاده از DMA برای ارسال اطلاعات از حافظه توسط واحد USART
استفاده از DMA برای ارسال اطلاعات از حافظه توسط واحد USART

همانطور که میدانید استفاده از DMA برای انتقال اطلاعات بین وسایل جانبی میکروکنترلر (Peripheral) و حافظه موجب تسریع عملکرد میکروکنترلر خواهد شد. در این بخش مثل بخش قبلی میخواهیم از DMA برای ارتباط بین وسایل جانبی و حافظه استفاده کنیم. اما این بار برای ارسال اطلاعات از حافظه به واحد USART.

با ما همراه باشید.

 

مرحله اول) ایجاد پروژه در محیط STM32CubeMX

همانند قبل مراحل ایجاد پروژه را طی می‌کنیم و تنظیم دیباگ و کلاک را انجام میدهیم. سپس در منوی Connectivity، واحد USART1 را انتخاب کرده و پس از تنظیم پارامترهای این واحد مانند بخش قبلی، از تب DMA Setting کلید Add را می‌زنیم. از منوی کشویی Select، USART1_TX را انتخاب می‌کنیم. این بار DMA را در حالت Normal mode و جهت انتقال اطلاعات را Memory to peripheral انتخاب می‌کنیم. اکنون به تب Project Manger رفته و بقیه تنظیمات را مثل گذشته انجام می‌دهیم و در آخر GENERATE CODE را زده تا به محیط برنامه نویسی وارد شویم.

مرحله اول) ایجاد پروژه در محیط STM32CubeMX
تنظیم واحد USART1 برای کار با DMA
تنظیم DMA

مرحله دوم) نوشتن کد پروژه

در این بخش نیز مثل قبل ابتدا باید به تنظیم واحد DMA بپردازیم. چون از واحد USART تنها برای ارسال اطلاعات استفاده می‌کنیم نیاز به نوشتن کد برای تنظیم آن وجود ندارد و با تنظیماتی که در محیط CubeMX انجام دادیم کدهای مورد نیازی برای این واحد، در پروژه ما ایجاد شده است.

قبل از هر چیز متغیرهای مورد استفاده را به کد اضافه می‌کنیم:

uint8_t message1[] = "\r\n Hey! This is a test message\r\n";
uint8_t ARRAYSIZE = sizeof(message1);

سپس درون int main (بعد از SystemClock_Config) و یا در بدنه تابع MX_DMA_Init، کد زیر را اضافه می‌کنیم :

 LL_DMA_ConfigAddresses(DMA1,
LL_DMA_CHANNEL_4,
(uint32_t)message1,
LL_USART_DMA_GetRegAddr(USART1),
LL_DMA_DIRECTION_MEMORY_TO_PERIPH);

LL_DMA_SetDataLength(DMA1,
LL_DMA_CHANNEL_4,
ARRAYSIZE); 

LL_DMA_EnableChannel(DMA1,
LL_DMA_CHANNEL_4);

LL_USART_EnableDMAReq_TX(USART1);

در آخرین خط، اجازه درخواست ارسال اطلاعات به DMA داده می‌شود. در این پروژه نیازی به نوشتن هیچ کدی در حلقه while(1) نیست و با تنظیماتی که انجام دادیم واحد DMA اطلاعات نوشته شده در حافظه را از طریق USART ارسال خواهد کرد. نتیجه اجرا را می‌توانیم در ترمینال پورت سریال مشاهده کنیم :

نتیجه اجرا در ترمینال

در بخش بعدی در مورد واحد SPI و نحوه ارسال اطلاعات توسط آن، صحبت خواهیم کرد.

لینک پروژه در گیت هاب

 

 

 

منبع:سیسوگ

مطلب قبلیدانلود کتاب الکترونیک عملی برای مخترعان – Practical Electronics for Inventors
مطلب بعدیآموزش رزبری پای با پایتون – قسمت سوم – چالش رقص نور

پاسخ دهید

لطفا نظر خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید