QUAD SPI initialization on stm32

Thread Starter

harold_potter

Joined Aug 6, 2019
3
Hello. I am trying to communicate with flash via quad spi. I initialized GPIO and QSPI according to referance manual and ST's documents but, it seems I am missing something. I can't write anything in QUADSPI_DR register, it just stay 0x00000000. Can anyone help me with this? The code I wrote :
Code:
void GPIO_init(){
   
int main()
{
    SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_GPIOAEN);
   
    SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_GPIOBEN);
   
    SET_BIT(RCC->AHB3ENR, RCC_AHB3ENR_QSPIEN);
   
    while ((RCC->AHB3ENR & RCC_AHB3ENR_QSPIEN) == 0)
{
}

    GPIOA->MODER |= (0x0000A0A0);
    GPIOA->MODER &= ~(0x00005050);
   
    GPIOB->MODER |= (0x0000000A);
    GPIOB->MODER &= ~(0x00000005);
   
     GPIOB->AFR[0] |= (0XA << GPIO_AFRL_AFSEL0_Pos); //ALTERNATIF FONKSIYON
   
     GPIOB->AFR[0] |= (0XA << GPIO_AFRL_AFSEL1_Pos);
   
     GPIOA->AFR[0] |= (0XA << GPIO_AFRL_AFSEL2_Pos);
   
     GPIOA->AFR[0] |= (0XA << GPIO_AFRL_AFSEL3_Pos);
    
     GPIOA->AFR[0] |= (0XA << GPIO_AFRL_AFSEL6_Pos);
    
     GPIOA->AFR[0] |= (0XA << GPIO_AFRL_AFSEL7_Pos);
   
}

void QSPI_init()
{ 

QUADSPI->CR &= ~(QUADSPI_CR_EN);   
   
QUADSPI->CR |= (QUADSPI_CR_EN);
   
QUADSPI->CCR |= 0x0100759F;   
   
QUADSPI->DLR = 0x00000003;   
   
QUADSPI->ABR = 0x000000AA;   
   
QUADSPI->CR = 0x00000000;
   
QUADSPI->DCR |= (0x1C << 16);

QUADSPI->CR |= (QUADSPI_CR_EN);   
   
QUADSPI->AR = 0xFAAAAAAF;   

//static uint8_t tx_buf[4];
//tx_buf[0] = 0xAA;
//QUADSPI->DR    = (uint32_t)&tx_buf[0];   

QUADSPI->DR    = 0xAFFFFFFA;

}
 
Top