Advertisement
Guest User

Untitled

a guest
Aug 29th, 2019
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.93 KB | None | 0 0
  1.         GPIO_PinAFConfig(SPI1_SCK_PORT,  SPI1_SCK_PIN_SRC,  SPI1_SCK_AF); // SCK
  2.         GPIO_PinAFConfig(SPI1_MISO_PORT, SPI1_MISO_PIN_SRC, SPI1_MISO_AF); // MOSI
  3.         GPIO_PinAFConfig(SPI1_MOSI_PORT, SPI1_MOSI_PIN_SRC, SPI1_MOSI_AF); // MISO
  4.  
  5.         RCC_AHB1PeriphClockCmd_safe(SPI1_CLK_GPIO_FN_PARAM, ENABLE);
  6.         RCC_APB2PeriphClockCmd_safe(RCC_APB2Periph_SPI1, ENABLE);
  7.  
  8.         baud_prescaler = (clk.PCLK2_Frequency) / freq;
  9.  
  10.         gpio_init.GPIO_Mode  = GPIO_Mode_AF;
  11.         gpio_init.GPIO_OType = GPIO_OType_PP;
  12.         gpio_init.GPIO_PuPd  = GPIO_PuPd_NOPULL;
  13.  
  14.         if      (freq <=  2000000UL) gpio_init.GPIO_Speed = GPIO_Speed_2MHz;
  15.         else if (freq <= 25000000UL) gpio_init.GPIO_Speed = GPIO_Speed_25MHz;
  16.         else if (freq <= 50000000UL) gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
  17.         else                         gpio_init.GPIO_Speed = GPIO_Speed_100MHz;
  18.  
  19.         gpio_init.GPIO_Pin = (uint32_t)SPI1_SCK_PIN;
  20.         GPIO_Init(SPI1_SCK_PORT, &gpio_init);
  21.         gpio_init.GPIO_Pin = (uint32_t)SPI1_MOSI_PIN;
  22.         GPIO_Init(SPI1_MOSI_PORT, &gpio_init);
  23.         gpio_init.GPIO_Pin = (uint32_t)SPI1_MISO_PIN;
  24.         GPIO_Init(SPI1_MISO_PORT, &gpio_init);
  25.  
  26.     if      (baud_prescaler <= 2)   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
  27.     else if (baud_prescaler <= 4)   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
  28.     else if (baud_prescaler <= 8)   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
  29.     else if (baud_prescaler <= 16)  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;
  30.     else if (baud_prescaler <= 32)  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;
  31.     else if (baud_prescaler <= 64)  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;
  32.     else if (baud_prescaler <= 128) SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;
  33.     else                            SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
  34.  
  35.     SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  36.     SPI_InitStructure.SPI_Mode      = SPI_Mode_Master;
  37.     SPI_InitStructure.SPI_DataSize  = SPI_DataSize_8b;
  38.     SPI_InitStructure.SPI_CPOL      = cpol;
  39.     SPI_InitStructure.SPI_CPHA      = cpha;
  40.  
  41.     SPI_InitStructure.SPI_NSS       = SPI_NSS_Soft;
  42.     SPI_InitStructure.SPI_FirstBit  = SPI_FirstBit_MSB;
  43.  
  44.     SPI_Init(spi, &SPI_InitStructure);
  45.  
  46.     SPI_Cmd(spi, ENABLE);
  47.  
  48.             DMA_InitTypeDef dma_init;
  49.  
  50.             RCC_AHB1PeriphClockCmd_safe(dma_data->rx.rcc | dma_data->tx.rcc, ENABLE);
  51.  
  52.             DMA_DeInit(dma_tx_stream);
  53.             DMA_DeInit(dma_rx_stream);
  54.  
  55.             dma_init.DMA_BufferSize         = 1;
  56.             dma_init.DMA_PeripheralInc      = DMA_PeripheralInc_Disable;
  57.             dma_init.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
  58.             dma_init.DMA_MemoryDataSize     = DMA_MemoryDataSize_Byte;
  59.             dma_init.DMA_Mode               = DMA_Mode_Normal;
  60.             dma_init.DMA_Priority           = DMA_Priority_Medium;
  61.             dma_init.DMA_FIFOMode           = DMA_FIFOMode_Disable;
  62.             dma_init.DMA_FIFOThreshold      = DMA_FIFOThreshold_1QuarterFull;
  63.             dma_init.DMA_MemoryBurst        = DMA_MemoryBurst_Single;
  64.             dma_init.DMA_PeripheralBurst    = DMA_PeripheralBurst_Single;
  65.             dma_init.DMA_PeripheralBaseAddr = (uint32_t)&spi->DR;
  66.             dma_init.DMA_Memory0BaseAddr    = NULL;
  67.             dma_init.DMA_MemoryInc          = DMA_MemoryInc_Disable;
  68.  
  69.             dma_init.DMA_Channel            = dma_data->tx.ch;
  70.             dma_init.DMA_DIR                = DMA_DIR_MemoryToPeripheral;
  71.             DMA_Init(dma_tx_stream, &dma_init);
  72.  
  73.             dma_init.DMA_Channel            = dma_data->rx.ch;
  74.             dma_init.DMA_DIR                = DMA_DIR_PeripheralToMemory;
  75.             DMA_Init(dma_rx_stream, &dma_init);
  76.  
  77.         if (rbuf != NULL)
  78.         {
  79.             dma_rx_stream->M0AR = (uint32_t)rbuf;
  80.             dma_rx_stream->CR  |= DMA_MemoryInc_Enable;
  81.         }
  82.         else
  83.         {
  84.             dma_rx_stream->M0AR = (uint32_t)&dummy_buf;
  85.             dma_rx_stream->CR  &= ~DMA_MemoryInc_Enable;
  86.         }
  87.  
  88.         if (wbuf != NULL)
  89.         {
  90.             dma_tx_stream->M0AR = (uint32_t)wbuf;
  91.             dma_tx_stream->CR  |= DMA_MemoryInc_Enable;
  92.         }
  93.         else
  94.         {
  95.             dma_tx_stream->M0AR = (uint32_t)&dummy_buf;
  96.             dma_tx_stream->CR  &= ~DMA_MemoryInc_Enable;
  97.         }
  98.  
  99.         dma_rx_stream->NDTR = cnt;
  100.         dma_tx_stream->NDTR = cnt;
  101.  
  102.         DMA_ClearITPendingBit(dma_rx_stream, dma_data->rx.it_tcif);
  103.         DMA_ClearITPendingBit(dma_tx_stream, dma_data->tx.it_tcif);
  104.         DMA_ITConfig(dma_rx_stream, DMA_IT_TC, ENABLE);
  105.  
  106.         SPI_I2S_DMACmd(spi, SPI_I2S_DMAReq_Tx | SPI_I2S_DMAReq_Rx, ENABLE);
  107.         DMA_Cmd(dma_rx_stream, ENABLE);
  108.         DMA_Cmd(dma_tx_stream, ENABLE);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement