Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- GPIO_PinAFConfig(SPI1_SCK_PORT, SPI1_SCK_PIN_SRC, SPI1_SCK_AF); // SCK
- GPIO_PinAFConfig(SPI1_MISO_PORT, SPI1_MISO_PIN_SRC, SPI1_MISO_AF); // MOSI
- GPIO_PinAFConfig(SPI1_MOSI_PORT, SPI1_MOSI_PIN_SRC, SPI1_MOSI_AF); // MISO
- RCC_AHB1PeriphClockCmd_safe(SPI1_CLK_GPIO_FN_PARAM, ENABLE);
- RCC_APB2PeriphClockCmd_safe(RCC_APB2Periph_SPI1, ENABLE);
- baud_prescaler = (clk.PCLK2_Frequency) / freq;
- gpio_init.GPIO_Mode = GPIO_Mode_AF;
- gpio_init.GPIO_OType = GPIO_OType_PP;
- gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL;
- if (freq <= 2000000UL) gpio_init.GPIO_Speed = GPIO_Speed_2MHz;
- else if (freq <= 25000000UL) gpio_init.GPIO_Speed = GPIO_Speed_25MHz;
- else if (freq <= 50000000UL) gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
- else gpio_init.GPIO_Speed = GPIO_Speed_100MHz;
- gpio_init.GPIO_Pin = (uint32_t)SPI1_SCK_PIN;
- GPIO_Init(SPI1_SCK_PORT, &gpio_init);
- gpio_init.GPIO_Pin = (uint32_t)SPI1_MOSI_PIN;
- GPIO_Init(SPI1_MOSI_PORT, &gpio_init);
- gpio_init.GPIO_Pin = (uint32_t)SPI1_MISO_PIN;
- GPIO_Init(SPI1_MISO_PORT, &gpio_init);
- if (baud_prescaler <= 2) SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
- else if (baud_prescaler <= 4) SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
- else if (baud_prescaler <= 8) SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
- else if (baud_prescaler <= 16) SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;
- else if (baud_prescaler <= 32) SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;
- else if (baud_prescaler <= 64) SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;
- else if (baud_prescaler <= 128) SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;
- else SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
- SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
- SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
- SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
- SPI_InitStructure.SPI_CPOL = cpol;
- SPI_InitStructure.SPI_CPHA = cpha;
- SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
- SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
- SPI_Init(spi, &SPI_InitStructure);
- SPI_Cmd(spi, ENABLE);
- DMA_InitTypeDef dma_init;
- RCC_AHB1PeriphClockCmd_safe(dma_data->rx.rcc | dma_data->tx.rcc, ENABLE);
- DMA_DeInit(dma_tx_stream);
- DMA_DeInit(dma_rx_stream);
- dma_init.DMA_BufferSize = 1;
- dma_init.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
- dma_init.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
- dma_init.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
- dma_init.DMA_Mode = DMA_Mode_Normal;
- dma_init.DMA_Priority = DMA_Priority_Medium;
- dma_init.DMA_FIFOMode = DMA_FIFOMode_Disable;
- dma_init.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull;
- dma_init.DMA_MemoryBurst = DMA_MemoryBurst_Single;
- dma_init.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
- dma_init.DMA_PeripheralBaseAddr = (uint32_t)&spi->DR;
- dma_init.DMA_Memory0BaseAddr = NULL;
- dma_init.DMA_MemoryInc = DMA_MemoryInc_Disable;
- dma_init.DMA_Channel = dma_data->tx.ch;
- dma_init.DMA_DIR = DMA_DIR_MemoryToPeripheral;
- DMA_Init(dma_tx_stream, &dma_init);
- dma_init.DMA_Channel = dma_data->rx.ch;
- dma_init.DMA_DIR = DMA_DIR_PeripheralToMemory;
- DMA_Init(dma_rx_stream, &dma_init);
- if (rbuf != NULL)
- {
- dma_rx_stream->M0AR = (uint32_t)rbuf;
- dma_rx_stream->CR |= DMA_MemoryInc_Enable;
- }
- else
- {
- dma_rx_stream->M0AR = (uint32_t)&dummy_buf;
- dma_rx_stream->CR &= ~DMA_MemoryInc_Enable;
- }
- if (wbuf != NULL)
- {
- dma_tx_stream->M0AR = (uint32_t)wbuf;
- dma_tx_stream->CR |= DMA_MemoryInc_Enable;
- }
- else
- {
- dma_tx_stream->M0AR = (uint32_t)&dummy_buf;
- dma_tx_stream->CR &= ~DMA_MemoryInc_Enable;
- }
- dma_rx_stream->NDTR = cnt;
- dma_tx_stream->NDTR = cnt;
- DMA_ClearITPendingBit(dma_rx_stream, dma_data->rx.it_tcif);
- DMA_ClearITPendingBit(dma_tx_stream, dma_data->tx.it_tcif);
- DMA_ITConfig(dma_rx_stream, DMA_IT_TC, ENABLE);
- SPI_I2S_DMACmd(spi, SPI_I2S_DMAReq_Tx | SPI_I2S_DMAReq_Rx, ENABLE);
- DMA_Cmd(dma_rx_stream, ENABLE);
- DMA_Cmd(dma_tx_stream, ENABLE);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement