راه اندازی micro SD در میکروکنترلرهای STM32

0

راه اندازی micro SD در میکروکنترلرهای STM32

در بخش­های قبلی مفاهیم مورد نیاز برای استفاده از کارت حافظه SD بیان گردید. در این قسمت نحوه راه اندازی و استفاده از آن در میکروکنترلرهای stm32 بیان شده است.

سخت افزار مورد نیاز

  • میکروکنترلر دارای پورت SDMMC
  • پروگرمر
  • RAM reader

نرم افزار مورد نیاز

  • STM32CubeMX
  • IAR

نحوه اتصال

در زیر ترتیب پایه های حافظه Micro SD نشان داده شده است.

pinout کارت حافظه micro SD
pinout کارت حافظه micro SD
شماتیک قسمت کارت حافظه
شماتیک قسمت کارت حافظه
نحوه اتصال کارت حافظه micro SD بورد F746GDISCOVERY32
نحوه اتصال کارت حافظه micro SD بورد F746GDISCOVERY32

تنظیمات پروژه در نرم افزار STM32CubeMX

برای تنظیم پورت SDMMC به قسمت SDMMC1 بروید. سپس از قمست Mode گزینه SD 4bits Wide bus را انتخاب کنید. در این پروژه از مد 4 بیتی است. در صورتیکه از مد 1 بیتی استفاده می­کنید گزینه SD 1 bit را انتخاب نمایید. در شکل 6 چگونگی تنظیم واحد SDMMC نشان داده شده است.

نحوه تنظیم کتابخانه FATFS در نرم افزار stm32cubemx (بخش چهارم)
نحوه تنظیم کتابخانه FATFS در نرم افزار stm32cubemx (بخش چهارم)

تنظیمات FATFS

جهت فعال نمودن کتابخانه FATFS ابتدا از قسمت Middleware بر روی گزینه FATFS (شکل 7) کلیک کنید. سپس در قسمت Mode گزینه SD Card (شکل 8) را انتخاب نمایید. در شکل زیر نحوه تنظیم سایر پارامترهای مربوطه نشان داده شده است.

چگونگی انتخاب کتابخانه FATFS در نرم افزار stm32cumbemx
چگونگی انتخاب کتابخانه FATFS در نرم افزار stm32cumbemx
نحوه تنظیم کتابخانه FATFS در نرم افزار stm32cubemx (بخش اول)
نحوه تنظیم کتابخانه FATFS در نرم افزار stm32cubemx (بخش اول)
نحوه تنظیم کتابخانه FATFS در نرم افزار stm32cubemx (بخش دوم)
نحوه تنظیم کتابخانه FATFS در نرم افزار stm32cubemx (بخش دوم)
نحوه تنظیم کتابخانه FATFS در نرم افزار stm32cubemx (بخش سوم)
نحوه تنظیم کتابخانه FATFS در نرم افزار stm32cubemx (بخش سوم)

سپس به سربرگ Platform Settings بروید. در این بخش تنظیمات مرتبط با پایه GPIO که برای تشخیص حضور کارت حافظه انجام می­شود. همانطور که در شکل  نشان داده شده است پایه PC13 برای این منظور در نظر گرفته شده است. لذا در سربرگ Platform Setting قسمت Found Solution بر روی پایه PC13 تنظیم شده است.

نحوه تنظیم کتابخانه FATFS در نرم افزار stm32cubemx (بخش سوم)
نحوه تنظیم کتابخانه FATFS در نرم افزار stm32cubemx (بخش سوم)

در نهایت به سر برگ Project Manager بروید. در قسمت­های Project Name و Project Location به ترتیب نام و مسیر ذخیره برنامه را تعیین کنید. در قسمت Toolchain/ IDE گزینه EWARM را انتخاب نمایید. در نهایت روی گزینه Generate Code کلیک کنید تا کد اولیه برنامه تولید شود.

نحوه تنظیم کتابخانه FATFS در نرم افزار stm32cubemx (بخش چهارم)
نحوه تنظیم کتابخانه FATFS در نرم افزار stm32cubemx (بخش چهارم)

توسعه نرم افزار

بعد از تولید ایجاد پروژه نوبت به گسترش نرم افزار می­رسد. در این نرم افزار ابتدا سخت افزار و درایور FATFS تنظیم می­شوند. برای استفاده از کارت حافظه باید ابتدا mount شود. با mount کردن کارت حافظه کلیه فایل­ها و دایرکتوری­های کارت حافظه در اختیار نرم افزار قرار می­گیرد. برای این منظور از تابع f_mount استفاده می­شود.

در این مثال آموزشی ابتدا با استفاده از تابع f_open یک فایل به نام example.txt باز می­شود. لازم به ذکر است که در صورتیکه فایل مورد نظر در حافظه وجود داشته باشد فایل باز می­شود، در غیر اینصورت فایل جدیدی ایجاد می­گردد. سپس با استفاده از تابع f_write رشته Hello World در آن نوشته می­شود. در نهایت با فراخوانی تابع f_close فایل مورد نظر  بسته شده است. این روال دقیقا مشابه کار با فایل در سایر محیطهای دیگر نظیر C++ است.  در کد زیر تابع main نشان داده شده است.

int main(void)
{
  /* define a File system object structure */
  FATFS sFileSystem;     
  /* define a File object structure */
  FIL sFile; 
  /* define a File system object structure */  
  UINT un32NumberOfWrittenBytes;                        

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_SDMMC1_SD_Init();
  MX_FATFS_Init();
  /* USER CODE BEGIN 2 */
  /* Mount immediately the Logical Drive . SDPath is the SD logical drive path */
  if (f_mount(&sFileSystem, SDPath, 1) == FR_OK)                                                            
  {
    /* define a string that contains the directory of desired file */
    char asFileDirectory[] = "example.txt";          
    /* open the file. the third parameter determines the its mode. */
    if (f_open(&sFile, asFileDirectory, FA_READ | FA_WRITE | FA_CREATE_ALWAYS) == FR_OK)
    {
      /* define a string that contains data which is going to be written in SD card */
      char asWriteDataToSDcard[] = "Hello World\n";     
      /* write the data to SD card. un32NumberOfWrittenBytes is the number of written bytes */
      if (f_write(&sFile, asWriteDataToSDcard, sizeof(asWriteDataToSDcard), &un32NumberOfWrittenBytes) == FR_OK)       
      {
        /* colse the file when you have done with it */
        f_close(&sFile); 
      }
      else
      {
        /* could not write successfully */
        while (1);
      }
    }
    else 
    {
      /* could not open successfully */
      while (1);
    }
  }
  else
  {
    /* could not mount successfully */
    while (1);
  }
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  }
}
 

نتیجه برنامه

مشاهده فایل ایجاد شده در کارت حافظه SD
مشاهده فایل ایجاد شده در کارت حافظه SD
Choose your Reaction!
دیدگاه خود را بنویسید

آدرس ایمیل شما منتشر نخواهد شد.

redronic.com