آموزش STM32 با توابع LL قسمت سی‌ و یکم: راه‌اندازی و استفاده از کارت‌ حافظه SD

آموزش STM32 با توابع LL قسمت سی‌ و یکم: راه‌اندازی و استفاده از کارت‌ حافظه SD

آموزش STM32 با توابع LL قسمت سی‌ و یکم: راه‌اندازی و استفاده از کارت‌ حافظه SD
آموزش STM32 با توابع LL قسمت سی‌ و یکم: راه‌اندازی و استفاده از کارت‌ حافظه SD

بهره‌گیری از کارت‌ حافظه SD در کنار حافظه‌های موجود در میکرو، می‌تواند درزمینه‌های بسیاری کاربرد داشته باشد. برای اینکه مدیرت حافظه و فایل‌ها با سهولت هر چه بیشتر انجام شود، می‌توانیم از سیستم فایل استفاده کنیم. با استفاده از کتابخانه ff نوشته‌شده توسط ChaN که با عنوان ELM by ChAN شناخته می‌شود، انجام این کار بسیار ساده‌تر خواهد شد. در ادامه روند ایجاد یک پروژه، اضافه کردن این فایل‌های کتابخانه‌ای و استفاده از کارت حافظه را باهم بررسی می‌کنیم. با سیسوگ همراه باشید.

 

ایجاد پروژه

برای ایجاد پروژه مثل همیشه تنظیمات دیباگ و کلاک و USART1 را انجام می‌دهیم. مسیر و نام را مشخص می‌کنیم و درایورهای LL را انتخاب می‌کنیم. توجه کنید که در این مرحله نیازی به انتخاب FATfs نیست، زیرا این فایل‌ها را پس از ایجاد پروژه به‌صورت دستی اضافه خواهیم کرد (به دلیل اینکه آخرین نسخه کتابخانه را اضافه کنیم و بتوانیم از توابع آماده و بیشتری استفاده کنیم). در مرحله بعد وارد برنامه Keil می‌شویم.

 

اضافه کردن فایل‌های مورد نیاز

آخرین ورژن کتابخانه ff را می‌توانید از سایت elm-chan، قسمت Softwares و سپس صفحه FatFs Module دانلود کنید. در زمان نوشتن این مقاله آخرین ورژن منتشرشده، FatFs R0.14b بوده است. از درون این فایل، به فایل‌های ff.h، ff.c، ffconf، ffsystem و ffunicode نیاز داریم. یه پوشه به اسم fatfs، در مسیر پروژه بسازیم و این فایل‌ها را درون آن کپی کنیم. در قسمت دانلود در لینک پروژه‌های نمونه (زیر لینک دانلود آخرین ورژن) می‌توانیم بقیه‌ی فایل‌های موردنیاز را دانلود کنیم. در فایل دانلود شده از پوشه stm32، فایل‌های diskio.h، mmc_stm32f1_spi.c و STM32F100.h را در پوشه fatfs که ساختیم کپی می‌کنیم.

در این مرحله باید محتویات پوشه ما شبیه به تصویر زیر باشد:

فایل mmc_stm32f1_spi را برای ویرایش باز می‌کنیم و در قسمت تعریف پین‌ها پین مربوط به CS را تصحیح می‌کنیم، همچنین مقدار MMC_CD را 1 تعریف می‌کنیم؛

سپس در محیط Keil از قسمت Project -> Manage -> Project items… یا دکمه میانبر آن وارد قسمت مدیرت فایل‌ها می‌شویم. از قسمت Groups و کلید New(insert) یک گروه جدید می‌سازیم و نام آن را FatFS می‌گذاریم. سپس فایل‌های با پسوند .c پوشه fatfs که در مسیر پروژه ساخته بودیم را به این گروه اضافه می‌کنیم. در پایان کار این منو نیز باید شبیه به تصویر زیر باشد:

در مرحله بعد از قسمت Project -> Options for target و از تب C/C++، مسیر پوشه fatfs را به Include Paths اضافه می‌کنیم؛

در این پروژه نیز می‌توانیم مانند پروژه قبلی، اعمال مربوط به ریدایرکت کردن USART1 را انجام دهیم. اکنون همه فایل‌های موردنیاز به پروژه اضافه‌شده‌اند. به سراغ نوشتن کد می‌رویم.

 

نوشتن کد پروژه

قبل از هر چیز، یک بار پروژه را کامپایل می‌کنیم تا اگر اشتباهی رخ‌داده است در همین مرحله متوجه شویم. در صورت نبود خطا ادامه می‌دهیم. در فایل main.c کتابخانه‌های موردنیاز را اضافه و ثابت کلاک سیستم را تعریف می‌کنیم؛

در ادامه باید متغیرهای مورداستفاده برای ایجاد فایل و نوشتن و خواندن را تعریف کنیم؛

سپس برای استفاده از تابع تنظیم زمان‌بندی، که در فایل mmc_stm32f1_spi.c و بانام disk_timerproc موجود است، باید وقفه SysTick را روی یک میلی‌ثانیه تنظیم کنیم. با استفاده از کد زیر این کار را انجام می‌دهیم:

حالا می‌توانیم در فایل stm32f1xx_it.c تابع گفته‌شده را اعلان و در روال وقفه سیستیک فراخوانی کنیم؛

در مرحله بعد باید دیسک را آماده‌ به‌ کار کنیم. یک متغیر برای دریافت وضعیت عملیات انجام‌شده تعریف می‌کنیم و با توابع آماده‌ای که اضافه کرده‌ایم دیسک را آماده می‌کنیم و وضعیت را به ترمینال سریال می‌فرستیم؛

کتابخانه ff امکانات زیادی برای مدیریت فایل و خواندن و نوشتن به ما می‌دهد، که در اینجا از بعضی از آن‌ها استفاده خواهیم کرد. برای مثال می‌توانیم فضای کل موجود روی کارت حافظه SD و فضای خالی آن را با استفاده از توابع موجود در کتابخانه دریافت کنیم؛

همچنین امکان باز کردن یک فایل (ایجاد فایل در صورت موجود نبود آن) و نوشتن در آن یا خواندن اطلاعات آن وجود دارد. برای این کار می‌توانیم مشابه کد زیر از توابع موردنیاز استفاده کنیم؛

علاوه بر این‌ها، امکان تغییر محتویات یک فایل و به‌عنوان‌مثال اضافه کردن اطلاعات به آن نیز وجود دارد؛

در صورت نیاز توابعی برای پاک کردن فایل‌های ساخته‌شده وجود دارد؛

برای پایان کار یک مرحله دیگر نیاز است. در نرم‌افزار Keil به‌طور پیش‌فرض بهینه‌سازی کد در حداکثر سطح ممکن یعنی Level3 تنظیم‌شده است. این مقدار را در تنظیمات Project -> Options for target و تب C/C++، روی مقدار Level0 قرار می‌دهیم و سپس کد را کامپایل می‌کنیم.

اگر همه مراحل را به‌درستی طی کرده باشیم و کارت حافظه SD را با فرمت fat32 به میکرو متصل کنیم -شماتیک بورد به‌کاررفته در این پروژه و اتصالات مربوط به آن را می‌توانید از این لینک از سایت سیسوگ دریافت کنید- پس از اتصال پورت سریال به بورد و دانلود برنامه روی میکرو و ریست کردن آن، می‌توانیم نتیجه اجرا را روی ترمینال سریال ببینیم؛

همچنین در صورت اتصال این کارت حافظه به یک memory card reader و باز کردن محتویات آن در کامپیوتر (در صورت اجرا نکردن دستورات مربوط به حذف کردن فایل) می‌توانیم فایل ایجادشده و اطلاعات درون آن را مشاهده کنیم؛

 

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

حمایت از سیاوش

خوشحال میشیم برای تداوم و کیفیت ما رو حمایت کنید.

1 نفر

پــــســنــدیـده انـد

توجه

سیاوش
سیاوش

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

دیدگاه ها

0 دیدگاه

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 2 سال پیش

راه اندازی LCD گرافیکی Nokia 1661 و دانلود کتابخانه آن

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموت‌های درب بازکن تا ریموت‌های دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی می‌کنند و آن‌هم ارسال اطلاعات به‌صورت بی‌سیم است....

Zeus ‌ Zeus ‌
  • 5 سال پیش

همه چیز درباره ریموت کنترل‌های هاپینگ

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

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 10 ماه پیش

آموزش قدم به قدم راه اندازی +NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش

مسابقه چهارم: کدام حلقه سریع‌تر است؟

حدود ۷ ماه پیش، مسابقه سوم سیسوگ رو برگزار کردیم و کلی نکته در مورد خواندن رشته‌های ورودی را بررسی کردیم. فکر...

Zeus ‌ Zeus ‌
  • 1 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک