เขียนข้อมูลลง sdcard stm32f4

Started by yokky7935, April 10, 2015, 04:20:59 PM

Previous topic - Next topic

yokky7935

เขียนข้อมูลลง sdcard stm32f4 ทำไมเมื่อนำฟังก์ชันเขียนข้อมูลลงsdcardมาไว้ใน while(1)แล้วโปรแกรมไม่นำข้อมูลลงsdcardให้คะ
int main(void)
{
SystemInit();
LED_GPIOInitialize();
FRESULT L_RESULT;
FATFS obj_FATFS;  //Fatfs object
FIL fil;  //File object
uint32_t total, free;  //Free and total space
int a = 5555;
int b = 7935;
int c = 1234;

L_RESULT = f_mount(&obj_FATFS,"",1);
  if(L_RESULT == FR_OK)
  {
      // LED Green On
  GPIO_SetBits(GPIOD,GPIO_Pin_14);  // LED red
  //Try to open file
         if (f_open(&fil, "file.txt", FA_OPEN_ALWAYS | FA_READ | FA_WRITE) == FR_OK) {
             //File opened, turn off RED and turn on GREEN led
        GPIO_ResetBits(GPIOD,GPIO_Pin_14);
        GPIO_SetBits(GPIOD,GPIO_Pin_12); 
                 }

                 
  }

    while(1)
    {
                                                         f_printf(&fil, "%d\n", a);
        f_printf(&fil, "%d\n", b);
        f_printf(&fil, "%d\n", c);
                                                         f_close(&fil);
    }
}//end main

zerochero

Quote from: yokky7935 on April 10, 2015, 04:20:59 PM
เขียนข้อมูลลง sdcard stm32f4 ทำไมเมื่อนำฟังก์ชันเขียนข้อมูลลงsdcardมาไว้ใน while(1)แล้วโปรแกรมไม่นำข้อมูลลงsdcardให้คะ
int main(void)
{
      SystemInit();
      LED_GPIOInitialize();
      FRESULT L_RESULT;
         FATFS obj_FATFS;  //Fatfs object
         FIL fil;  //File object
         uint32_t total, free;  //Free and total space
         int a = 5555;
         int b = 7935;
         int c = 1234;
         
          L_RESULT = f_mount(&obj_FATFS,"",1);
              if(L_RESULT == FR_OK)
              {
                  // LED Green On
                 GPIO_SetBits(GPIOD,GPIO_Pin_14);  // LED red
                 //Try to open file
                        if (f_open(&fil, "file.txt", FA_OPEN_ALWAYS | FA_READ | FA_WRITE) == FR_OK) {
                            //File opened, turn off RED and turn on GREEN led
                           GPIO_ResetBits(GPIOD,GPIO_Pin_14);
                           GPIO_SetBits(GPIOD,GPIO_Pin_12); 
                                   }

                                   
              }
            
    while(1)
    {
                                                         f_printf(&fil, "%d\n", a);
                           f_printf(&fil, "%d\n", b);
                           f_printf(&fil, "%d\n", c);
                                                         f_close(&fil);
    }
}//end main
1. ถ้าไม่มี While(1) ทำงานได้ใช่ไหมครับ???
2. mount ผ่าน open ได้ใช่ไหม???
3. แนะนำให้ Tap โปรแกรมให้ดูสวยงามด้วยครับ เพื่อให้ผู้ที่มาช่วยเหลืออ่านง่ายครับ

yokky7935

ถ้าเขียนไว้นอก while(1) สามารถใช้งานได้คะ
สามารถmountได้ค่ะ


zerochero

Quote from: yokky7935 on April 11, 2015, 12:12:35 AM
ถ้าเขียนไว้นอก while(1) สามารถใช้งานได้คะ
สามารถmountได้ค่ะ

โอเคครับผม
ตามหลักการใช้งาน Fatfs จะต้องดำเนินการตามขั้นตอน 4 ลำดับ ดังนี้
1. Mount
2. Open
3. Write/Read
4. Close

1. หลังคุณ Mount นั้นหมายความว่าคุณได้เข้าถือครอง SD Card นั้น จากนั้น คุณจะ Open
2. หลังคุณ Open คุณสามารถ Write/Read ได้ จากนั้นคุณจะต้อง Close ไฟล์ที่ Open

คราวนี้คุณลองเอา Close ออกมานอก while(1) แล้วลองแก้ while(1) เป็นให้เขียนสัก 10 ครั้งดูครับ