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

blog
۱۴۰۰-۱۰-۰۶
2 دقیقه

در قسمت قبلی درباره راه‌اندازی واحد ADC و گرفتن اطلاعات توسط DMA صحبت کردیم و در این قیمت می‌خواهیم درباره‌ی استفاده از 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 را زده تا به محیط برنامه‌نویسی وارد شویم.

 

تنظیم DMA

تنظیم DMA

 

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

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

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

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

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

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

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

اطلاعات
5
0
لینک و اشتراک
profile

سیاوش

متخصص الکترونیک

کارشناس ارشد الکترونیک دیجیتال، علاقه‌مند به یادگیری

مقالات بیشتر
slide

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند. فروش در پالت
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد. جستجو در آیسی
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند. پرسش در سیسوگ فرم
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
خانواده سیسوگ

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند.
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد.
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند.
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند.
family

دیدگاه ها

profile
Mohsen گفت :
۱۴۰۰-۱۰-۰۹ ۱۴:۵۳

با سلام. من خاستم از dma برای حالت rx در usart استفاده کنم ولی موفق نشدم . آیا نکته ای وجود داره

profile
سیاوش گفت :
۱۴۰۰-۱۰-۲۶ ۱۱:۰۱

سلام دوست عزیز. برای دریافت اطلاعات از rx رابط USART به وسیله DMA اگر اندازه داده دریافتی رو بدونید، میتونید با قرار دادن یک حلقه و درخواست دادن به اندازه تعداد بایت های کلمه ، اطلاعات رو دریافت کنید. در خصوص گرفتن اطلاعات در حالتی که اندازه داده مشخص نیست، یک مقاله جدا لازمه که احتمالا در آینده می‌نویسم.

profile
محسن گفت :
۱۴۰۰-۱۰-۰۶ ۲۱:۵۲

سلام بازم ممنون از اطلاعاتی که به اشتراک میزارید . اگه من در حالت ارسال circular رو انتخاب نکنم . بعد هر وقت خاستم با dma ارسال کنم همون نوشتن خط اخری تو برنامه بالا کافیه ؟ ممنون

profile
سیاوش گفت :
۱۴۰۰-۱۰-۰۸ ۱۴:۳۷

سلام، خواهش میکنم. خوشحالم که آموزش‌هارو دنبال می‌کنید. توی این آموزش ابهامی وجود داشت که برطرف شد. توی این قسمت بر خلاف قسمت قبلی DMA روی حالت Normal تنظیم می‌شه نه Circular و برای همین نوشته شده بود که سایر پارامترها تغییر نمی‌کنند. حالا می‌رسیم به سوال شما. اگر DMA روی Normal mode تنظیم شده باشد، برای ارسال مجدد اطلاعات باید دستور آخر و دستور قبل از آن، یعنی دو دستور فعال سازی و اجازه درخواست DMA رو دوباره بنویسیم. و اگر بخواهیم اطلاعات ارسالی رو عوض کنیم و پیام دیگری بفرستیم، هر چهار دستور باید مجددا نوشته شوند و این بار آدرس و اندازه پیام جدید رو مشخص کنیم. امیدوارم با این توضیحات جواب سوال شما رو به طور کامل داده باشم.

profile
Mohsen گفت :
۱۴۰۰-۱۰-۰۸ ۱۴:۵۸

سلام ممنون بله ابهام برطرف شد . فقط جهت اطلاع اینکه چه اینتراپت فعال باشه چه غیره فعال در حالت normal برای استفاده مجدد از دستورات بالا باید پرچم اتمام ارسال حتما پاک بشه . در غیره این صورت ارسالی صورت نمی‌گیرد. من با stm32f205rbt تست کردم‌.همچنین در این میکرو کنترلر خط سوم دستورات بالا به این صورت تغییر کرد
ll_dma_enablestream(dma2,ll_dma_stream_0);

become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله