Yuliya Smirnova / ADE7912

Dependents:   h7adc

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers spi.cpp Source File

spi.cpp

00001 void Error_Handler(){};
00002 /**
00003   ******************************************************************************
00004   * File Name          : SPI.c
00005   * Description        : This file provides code for the configuration
00006   *                      of the SPI instances.
00007   ******************************************************************************
00008   * @attention
00009   *
00010   * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
00011   * All rights reserved.</center></h2>
00012   *
00013   * This software component is licensed by ST under Ultimate Liberty license
00014   * SLA0044, the "License"; You may not use this file except in compliance with
00015   * the License. You may obtain a copy of the License at:
00016   *                             www.st.com/SLA0044
00017   *
00018   ******************************************************************************
00019   */
00020 
00021 /* Includes ------------------------------------------------------------------*/
00022 #include "spi.h"
00023 
00024 /* USER CODE BEGIN 0 */
00025 
00026 /* USER CODE END 0 */
00027 
00028 SPI_HandleTypeDef hspi1;
00029 DMA_HandleTypeDef hdma_spi1_rx;
00030 DMA_HandleTypeDef hdma_spi1_tx;
00031 
00032 /* SPI1 init function */
00033 void MX_SPI1_Init(void)
00034 {
00035 
00036   hspi1.Instance = SPI1;
00037   hspi1.Init.Mode = SPI_MODE_MASTER;
00038   hspi1.Init.Direction = SPI_DIRECTION_2LINES;
00039   hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
00040   hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;
00041   hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
00042   hspi1.Init.NSS = SPI_NSS_SOFT;
00043   hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128;
00044   hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
00045   hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
00046   hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
00047   hspi1.Init.CRCPolynomial = 0x0;
00048   hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
00049   hspi1.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
00050   hspi1.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
00051   hspi1.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
00052   hspi1.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
00053   hspi1.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
00054   hspi1.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE;
00055   hspi1.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;
00056   hspi1.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_DISABLE;
00057   hspi1.Init.IOSwap = SPI_IO_SWAP_DISABLE;
00058   if (HAL_SPI_Init(&hspi1) != HAL_OK)
00059   {
00060     Error_Handler();
00061   }
00062 
00063 }
00064 
00065 void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
00066 {
00067 
00068   GPIO_InitTypeDef GPIO_InitStruct = {0};
00069   if(spiHandle->Instance==SPI1)
00070   {
00071   /* USER CODE BEGIN SPI1_MspInit 0 */
00072 
00073   /* USER CODE END SPI1_MspInit 0 */
00074     /* SPI1 clock enable */
00075     __HAL_RCC_SPI1_CLK_ENABLE();
00076 
00077     __HAL_RCC_GPIOA_CLK_ENABLE();
00078     __HAL_RCC_GPIOB_CLK_ENABLE();
00079     /**SPI1 GPIO Configuration
00080     PA5     ------> SPI1_SCK
00081     PA6     ------> SPI1_MISO
00082     PB5     ------> SPI1_MOSI
00083     */
00084     GPIO_InitStruct.Pin = GPIO_PIN_5;
00085     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
00086     GPIO_InitStruct.Pull = GPIO_PULLUP;
00087     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
00088     GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
00089     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
00090 
00091     GPIO_InitStruct.Pin = GPIO_PIN_6;
00092     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
00093     GPIO_InitStruct.Pull = GPIO_NOPULL;
00094     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
00095     GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
00096     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
00097 
00098     GPIO_InitStruct.Pin = GPIO_PIN_5;
00099     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
00100     GPIO_InitStruct.Pull = GPIO_NOPULL;
00101     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
00102     GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
00103     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
00104 
00105     /* SPI1 DMA Init */
00106     /* SPI1_RX Init */
00107     hdma_spi1_rx.Instance = DMA1_Stream0;
00108     hdma_spi1_rx.Init.Request = DMA_REQUEST_SPI1_RX;
00109     hdma_spi1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
00110     hdma_spi1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
00111     hdma_spi1_rx.Init.MemInc = DMA_MINC_ENABLE;
00112     hdma_spi1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
00113     hdma_spi1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
00114     hdma_spi1_rx.Init.Mode = DMA_NORMAL;
00115     hdma_spi1_rx.Init.Priority = DMA_PRIORITY_HIGH;
00116     hdma_spi1_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
00117     if (HAL_DMA_Init(&hdma_spi1_rx) != HAL_OK)
00118     {
00119       Error_Handler();
00120     }
00121 
00122     __HAL_LINKDMA(spiHandle,hdmarx,hdma_spi1_rx);
00123 
00124     /* SPI1_TX Init */
00125     hdma_spi1_tx.Instance = DMA1_Stream1;
00126     hdma_spi1_tx.Init.Request = DMA_REQUEST_SPI1_TX;
00127     hdma_spi1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
00128     hdma_spi1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
00129     hdma_spi1_tx.Init.MemInc = DMA_MINC_ENABLE;
00130     hdma_spi1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
00131     hdma_spi1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
00132     hdma_spi1_tx.Init.Mode = DMA_NORMAL;
00133     hdma_spi1_tx.Init.Priority = DMA_PRIORITY_HIGH;
00134     hdma_spi1_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
00135     if (HAL_DMA_Init(&hdma_spi1_tx) != HAL_OK)
00136     {
00137       Error_Handler();
00138     }
00139 
00140     __HAL_LINKDMA(spiHandle,hdmatx,hdma_spi1_tx);
00141 
00142     /* SPI1 interrupt Init */
00143     HAL_NVIC_SetPriority(SPI1_IRQn, 0, 0);
00144     HAL_NVIC_EnableIRQ(SPI1_IRQn);
00145   /* USER CODE BEGIN SPI1_MspInit 1 */
00146 
00147   /* USER CODE END SPI1_MspInit 1 */
00148   }
00149 }
00150 
00151 void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
00152 {
00153 
00154   if(spiHandle->Instance==SPI1)
00155   {
00156   /* USER CODE BEGIN SPI1_MspDeInit 0 */
00157 
00158   /* USER CODE END SPI1_MspDeInit 0 */
00159     /* Peripheral clock disable */
00160     __HAL_RCC_SPI1_CLK_DISABLE();
00161 
00162     /**SPI1 GPIO Configuration
00163     PA5     ------> SPI1_SCK
00164     PA6     ------> SPI1_MISO
00165     PB5     ------> SPI1_MOSI
00166     */
00167     HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5|GPIO_PIN_6);
00168 
00169     HAL_GPIO_DeInit(GPIOB, GPIO_PIN_5);
00170 
00171     /* SPI1 DMA DeInit */
00172     HAL_DMA_DeInit(spiHandle->hdmarx);
00173     HAL_DMA_DeInit(spiHandle->hdmatx);
00174 
00175     /* SPI1 interrupt Deinit */
00176     HAL_NVIC_DisableIRQ(SPI1_IRQn);
00177   /* USER CODE BEGIN SPI1_MspDeInit 1 */
00178 
00179   /* USER CODE END SPI1_MspDeInit 1 */
00180   }
00181 }
00182 
00183 /* USER CODE BEGIN 1 */
00184 
00185 /* USER CODE END 1 */
00186 
00187 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
00188