177 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			177 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /**
 | ||
|  |   ****************************************************************************** | ||
|  |   * File Name          : SPI.c | ||
|  |   * Description        : This file provides code for the configuration | ||
|  |   *                      of the SPI instances. | ||
|  |   ****************************************************************************** | ||
|  |   * | ||
|  |   * Copyright (c) 2017 STMicroelectronics International N.V.  | ||
|  |   * All rights reserved. | ||
|  |   * | ||
|  |   * Redistribution and use in source and binary forms, with or without  | ||
|  |   * modification, are permitted, provided that the following conditions are met: | ||
|  |   * | ||
|  |   * 1. Redistribution of source code must retain the above copyright notice,  | ||
|  |   *    this list of conditions and the following disclaimer. | ||
|  |   * 2. Redistributions in binary form must reproduce the above copyright notice, | ||
|  |   *    this list of conditions and the following disclaimer in the documentation | ||
|  |   *    and/or other materials provided with the distribution. | ||
|  |   * 3. Neither the name of STMicroelectronics nor the names of other  | ||
|  |   *    contributors to this software may be used to endorse or promote products  | ||
|  |   *    derived from this software without specific written permission. | ||
|  |   * 4. This software, including modifications and/or derivative works of this  | ||
|  |   *    software, must execute solely and exclusively on microcontroller or | ||
|  |   *    microprocessor devices manufactured by or for STMicroelectronics. | ||
|  |   * 5. Redistribution and use of this software other than as permitted under  | ||
|  |   *    this license is void and will automatically terminate your rights under  | ||
|  |   *    this license.  | ||
|  |   * | ||
|  |   * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"  | ||
|  |   * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT  | ||
|  |   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A  | ||
|  |   * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY | ||
|  |   * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT  | ||
|  |   * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
|  |   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||
|  |   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,  | ||
|  |   * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  | ||
|  |   * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING  | ||
|  |   * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | ||
|  |   * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
|  |   * | ||
|  |   ****************************************************************************** | ||
|  |   */ | ||
|  | 
 | ||
|  | /* Includes ------------------------------------------------------------------*/ | ||
|  | #include "spi.h"
 | ||
|  | 
 | ||
|  | #include "gpio.h"
 | ||
|  | #include "dma.h"
 | ||
|  | 
 | ||
|  | /* USER CODE BEGIN 0 */ | ||
|  | 
 | ||
|  | /* USER CODE END 0 */ | ||
|  | 
 | ||
|  | SPI_HandleTypeDef hspi2; | ||
|  | DMA_HandleTypeDef hdma_spi2_tx; | ||
|  | 
 | ||
|  | /* SPI2 init function */ | ||
|  | void MX_SPI2_Init(void) | ||
|  | { | ||
|  |   hspi2.Instance = SPI2; | ||
|  |   hspi2.Init.Mode = SPI_MODE_MASTER; | ||
|  |   hspi2.Init.Direction = SPI_DIRECTION_2LINES; | ||
|  |   hspi2.Init.DataSize = SPI_DATASIZE_8BIT; | ||
|  |   hspi2.Init.CLKPolarity = SPI_POLARITY_HIGH; | ||
|  |   hspi2.Init.CLKPhase = SPI_PHASE_2EDGE; | ||
|  |   hspi2.Init.NSS = SPI_NSS_SOFT; | ||
|  |   hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4; | ||
|  |   hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB; | ||
|  |   hspi2.Init.TIMode = SPI_TIMODE_DISABLE; | ||
|  |   hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; | ||
|  |   hspi2.Init.CRCPolynomial = 10; | ||
|  |   if (HAL_SPI_Init(&hspi2) != HAL_OK) | ||
|  |   { | ||
|  |     Error_Handler(); | ||
|  |   } | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle) | ||
|  | { | ||
|  | 
 | ||
|  |   GPIO_InitTypeDef GPIO_InitStruct; | ||
|  |   if(spiHandle->Instance==SPI2) | ||
|  |   { | ||
|  |   /* USER CODE BEGIN SPI2_MspInit 0 */ | ||
|  | 
 | ||
|  |   /* USER CODE END SPI2_MspInit 0 */ | ||
|  |     /* Peripheral clock enable */ | ||
|  |     __HAL_RCC_SPI2_CLK_ENABLE(); | ||
|  |    | ||
|  |     /**SPI2 GPIO Configuration    
 | ||
|  |     PC2     ------> SPI2_MISO | ||
|  |     PC3     ------> SPI2_MOSI | ||
|  |     PB13     ------> SPI2_SCK  | ||
|  |     */ | ||
|  |     GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3; | ||
|  |     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; | ||
|  |     GPIO_InitStruct.Pull = GPIO_NOPULL; | ||
|  |     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; | ||
|  |     GPIO_InitStruct.Alternate = GPIO_AF5_SPI2; | ||
|  |     HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); | ||
|  | 
 | ||
|  |     GPIO_InitStruct.Pin = GPIO_PIN_13; | ||
|  |     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; | ||
|  |     GPIO_InitStruct.Pull = GPIO_NOPULL; | ||
|  |     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; | ||
|  |     GPIO_InitStruct.Alternate = GPIO_AF5_SPI2; | ||
|  |     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); | ||
|  | 
 | ||
|  |     /* Peripheral DMA init*/ | ||
|  |    | ||
|  |     hdma_spi2_tx.Instance = DMA1_Stream4; | ||
|  |     hdma_spi2_tx.Init.Channel = DMA_CHANNEL_0; | ||
|  |     hdma_spi2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; | ||
|  |     hdma_spi2_tx.Init.PeriphInc = DMA_PINC_DISABLE; | ||
|  |     hdma_spi2_tx.Init.MemInc = DMA_MINC_ENABLE; | ||
|  |     hdma_spi2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; | ||
|  |     hdma_spi2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; | ||
|  |     hdma_spi2_tx.Init.Mode = DMA_NORMAL; | ||
|  |     hdma_spi2_tx.Init.Priority = DMA_PRIORITY_LOW; | ||
|  |     hdma_spi2_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; | ||
|  |     if (HAL_DMA_Init(&hdma_spi2_tx) != HAL_OK) | ||
|  |     { | ||
|  |       Error_Handler(); | ||
|  |     } | ||
|  | 
 | ||
|  |     __HAL_LINKDMA(spiHandle,hdmatx,hdma_spi2_tx); | ||
|  | 
 | ||
|  |   /* USER CODE BEGIN SPI2_MspInit 1 */ | ||
|  | 
 | ||
|  |   /* USER CODE END SPI2_MspInit 1 */ | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle) | ||
|  | { | ||
|  | 
 | ||
|  |   if(spiHandle->Instance==SPI2) | ||
|  |   { | ||
|  |   /* USER CODE BEGIN SPI2_MspDeInit 0 */ | ||
|  | 
 | ||
|  |   /* USER CODE END SPI2_MspDeInit 0 */ | ||
|  |     /* Peripheral clock disable */ | ||
|  |     __HAL_RCC_SPI2_CLK_DISABLE(); | ||
|  |    | ||
|  |     /**SPI2 GPIO Configuration    
 | ||
|  |     PC2     ------> SPI2_MISO | ||
|  |     PC3     ------> SPI2_MOSI | ||
|  |     PB13     ------> SPI2_SCK  | ||
|  |     */ | ||
|  |     HAL_GPIO_DeInit(GPIOC, GPIO_PIN_2|GPIO_PIN_3); | ||
|  | 
 | ||
|  |     HAL_GPIO_DeInit(GPIOB, GPIO_PIN_13); | ||
|  | 
 | ||
|  |     /* Peripheral DMA DeInit*/ | ||
|  |     HAL_DMA_DeInit(spiHandle->hdmatx); | ||
|  |   } | ||
|  |   /* USER CODE BEGIN SPI2_MspDeInit 1 */ | ||
|  | 
 | ||
|  |   /* USER CODE END SPI2_MspDeInit 1 */ | ||
|  | }  | ||
|  | 
 | ||
|  | /* USER CODE BEGIN 1 */ | ||
|  | 
 | ||
|  | /* USER CODE END 1 */ | ||
|  | 
 | ||
|  | /**
 | ||
|  |   * @} | ||
|  |   */ | ||
|  | 
 | ||
|  | /**
 | ||
|  |   * @} | ||
|  |   */ | ||
|  | 
 | ||
|  | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |