Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 18 lip 2025, o 01:18


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 2 ] 
    Autor Wiadomość
    PostNapisane: 25 wrz 2016, o 21:46 
    Offline
    Nowy

    Dołączył(a): 25 wrz 2016
    Posty: 1
    Pomógł: 0

    Witajcie, próbóję podłączyć do stm32 kartę microsd, przez slot zamontowany na wykonanej płytce drukowanej, PIN CS mam na PE15, SCK -PB13 , MISO - PB14, MOSI - PB15

    zastanawiam się czy CS nie powinien być na PB12, tak pokazuje cubeMx w podpowiedziach kiedy zaznaczam NSS. Niestety płytka jest już gotowa, czy ktoś ma pomysł jak to "przepinować", czy można zrobić zworkę z pinu PE15 na pin PB12 ?

    korzystam z gotowego programu na fatfs przez spi, lecz niestety fresult ciągle ukazuje wartość "FR_NOT_READY" a na końcu FR_INVALID_OBJECT, nie wiem gdzie szukać problemu.

    zmiana na inną kartę pamięci 2gb nie pomaga.

    mam pytanie wszystkie linie podłączone są bezpośrednio do portów, jedynie SD CS podniesione jest przez rezystor 10kΩ do +3V.
    czy linię MISO,MOSI,SCK też trzeba podnieść ? i czy można to zrobić programowo ?

    konfiguracja SPI
    Kod:
    void SPI_SD_Init( void )
    {
            RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); //taktowanie dla SPI2
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); //taktowanie dla B

        // GPIOB - PE15( CS )
            GPIOE->MODER |= GPIO_MODER_MODER15_0;
            GPIOE->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR15;

        //sck
            GPIO_InitTypeDef GPIO_InitStruct;

            GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
            GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
            GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
            GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
            GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
            GPIO_Init(GPIOB, &GPIO_InitStruct);

        //MISO
            GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
            GPIO_InitStruct.GPIO_Pin = GPIO_Pin_14;
            GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
            GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
            GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
            GPIO_Init(GPIOB, &GPIO_InitStruct);
        //MOSI
            GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);
            GPIO_InitStruct.GPIO_Pin = GPIO_Pin_15;
            GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
            GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
            GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
            GPIO_Init(GPIOB, &GPIO_InitStruct);

        //SPI
            SPI_InitTypeDef SPI_InitStruct;

            SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
            SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
            SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;
            SPI_InitStruct.SPI_CPOL = SPI_CPOL_High;
            SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;
            SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;
            SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
            SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;
            SPI_InitStruct.SPI_CRCPolynomial = 7;
            SPI_Init(SPI2, &SPI_InitStruct);

            SPI_CalculateCRC(SPI2, DISABLE);
            SPI_Cmd(SPI2, ENABLE);

            RCC->APB1RSTR |= RCC_APB1RSTR_SPI2RST;
            delay_ms( 10 );
            RCC->APB1RSTR &= ~RCC_APB1RSTR_SPI2RST;


        DESELECT();
    }

    static
    void xmit_spi (BYTE Data)  // Wyslanie bajtu do SD
    {
        u8 D = 0;

        while( !( SPI2->SR & SPI_SR_TXE ));
        SPI2->DR = Data;
        while( !( SPI2->SR & SPI_SR_RXNE ));
        D = SPI2->DR;
    }

    static
    BYTE rcvr_spi (void)         // Odebranie bajtu z SD
    {
      u8 Data = 0;
    u8 i;
        while( !( SPI2->SR & SPI_SR_TXE ));
        SPI2->DR = 0xFF;
        while( !( SPI2->SR & SPI_SR_RXNE ));
        for(i=0;i<10;i++);
        Data = SPI2->DR;

      return Data;
    }


    Main.

    Kod:
    /*
     * main.c
     *      Author: Grzegorz H.
     */
    #include "stm32f4xx.h"
    #include "system_stm32f4xx.h"
    #include "delay.h"
    #include "fpu.h"
    #include "spi_sd.h"
    #include "ff.h"

    #define SysTick_Frequency 21000000

    FATFS fatfs;
    FIL plik;
    FRESULT fresult;
    UINT zapisanych_bajtow = 0;
    UINT zapianie_bajtow = 0;
    char * buffor = "123456789abcdef\r\n";
    uint16_t i;

    int main( void )
    {
        SystemInit();



        fpu_enable();
        delay_init( 168 );
        SPI_SD_Init();

        SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
         SysTick_Config(SysTick_Frequency / 100);

        fresult = f_mount( 0, &fatfs );
        fresult = f_open( &plik, "demo.wav", FA_OPEN_ALWAYS | FA_WRITE );
        if( fresult == FR_OK )
        {
            for( i = 0; i < 1000; i++ )
                fresult = f_write( &plik, ( const void * ) buffor, 17, &zapisanych_bajtow );
        }

        fresult = f_close( &plik );

        for(;;)
        {

        }

        return 0;
    }

    void SysTick_Handler()
    {
        disk_timerproc();
    }



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 wrz 2016, o 12:06 
    Offline
    Moderator zasłużony dla forum.atnel.pl
    Avatar użytkownika

    Dołączył(a): 18 lip 2012
    Posty: 3229
    Lokalizacja: Kraków - obok FAB5 ATMEL'a
    Pomógł: 91

    topic7402.html

    _________________
    http://www.jaglarz.info



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 2 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO