STM32F407 DISCOVERY USB FLASH BELLEK YAZMA

Başlatan Murat Mert, 02 Kasım 2019, 15:44:30

Murat Mert

S.A.

Hocamın ricası ile Üniversitede iklimlendirme bölümünde bir test ve eğitim cihazını toplayıp 2.8" ili9341 ekranı ve değerlerini tutmaları için Stm32f407 disco ile ili9341 sd kart modülünü kullandım. Sıcaklık, gaz basıncı vs sensörlerden gelen bilgileri ve çalışma durumunu txt olarak sd karta kayıt ediyor ve bunu Pc ile tahtaya yansıtıp dersde yorumluyorlardı. Sd kart şimdilerde su koyuyormuş. Hocaya usb den direk pc ye bağlayalım dedim olmaz kurcalarlar diyor. Pc olsa işim daha kolaylaşacak ama istemiyor. Flaş bellek olsun dedi bir şey de diyemedim. :(
MikroC Arm'da usb flash bellek ile ilgili örneklerden çalışma yapıyorum flash bellek takılınca ve sökülünce algılıyor ama FAT kısmında sıkıntı var.
USBHost_MSCApplication() bu fonksiyona gitmiyor.

Daha önce MikroC Arm ile bu konuda çalışan arkadaşlardan yardım rica ediyorum. Çalışan örnekleri varmıdır.



#include <stdint.h>
#include "__Lib_FAT32.h"
sfr sbit PSW at GPIOC_ODR.B0;
sfr sbit BTN at GPIOA_IDR.B0;

extern const code char cmd_bmp[7238];           // image
extern const code char Consolas6x13_Regular[];  // font

const char msgDevC[] = "Device Connected ...\r";
const char msgDevD[] = "Device Disconnected ...\r";
const char msg1[] = "Simple Mass Storage Class demo.\r";
const char msg2[] = "Plug USB Flash Stick with FAT32 filesystem.\r";
const char msg3[] = "Example will list root folder content.\r";
signed char err;

unsigned int xPos, yPos, buffPos;
char txtBuff[60];                  // holds one line of text

static uint8_t MSC_App_State = 0;  // main application state

void USB0Interrupt() iv IVT_INT_OTG_FS{
  USBHost_IntHandler();
}







// Application Part
uint8_t USBHost_MSCApplication(){
  uint8_t status = 0;
  int8_t fhandle;
  uint32_t fsize, i, j;
  UART2_Write_Text("FAT_32_in\r");
  switch(MSC_App_State){
    case 0:
      if (FAT32_Init() == 0){
        MSC_App_State = 1;
      }
      break;
        
    case 1:
      FAT32_Dir();
      MSC_App_State = 2;
      break;
    
    case 2 :
      break;
  }
  return 0;
}

void EventHandler(uint8_t event){
  switch(event){
    case _USB_HOST_EVENT_DEVICE_CONNECTED :
      UART2_Write_Text(msgDevC); // flash bellek takılı
      Delay_ms(500);
      MSC_App_State = 0;
      xPos = 20;
      yPos = 20;
      buffPos = 0;
      break;

    case _USB_HOST_EVENT_DEVICE_DISCONNECTED :
      ClearDisplay();
      UART2_Write_Text(msgDevD); // flash bellek takılı değil
      break;

  }
}

void DisplayInit(){
  UART2_Write_Text(msg1);
  UART2_Write_Text(msg2);
  UART2_Write_Text(msg3);
  Delay_ms(2000);
}

void main() {



  GPIO_Digital_Output(&GPIOC_BASE, _GPIO_PINMASK_0);
  GPIO_Digital_Input(&GPIOA_BASE, _GPIO_PINMASK_0);
  GPIO_Alternate_Function_Enable(&_GPIO_MODULE_OTG_FS_PA89_10_11_12);
  UART2_Init_Advanced(9600, _UART_8_BIT_DATA, _UART_NOPARITY, _UART_ONE_STOPBIT, &_GPIO_MODULE_USART2_PA23);
  PSW = 1;  // Turn off power switch
  Delay_ms(200);
  PSW = 0;  // Turn on power switch
  UART2_Write_Text("DENEME\r");
  DisplayInit();
  
  USBHost_MSCInit();
  USBHost_RegisterDeviceEventHandler(EventHandler);
  USBHost_Init();

  NVIC_IntEnable(IVT_INT_OTG_FS);


  while(1){
    USBHost_Main();

  }

}
mert07