adc
spi.cpp@3:1d62b3be52e8, 2020-10-28 (annotated)
- Committer:
- yuliyasm
- Date:
- Wed Oct 28 15:35:08 2020 +0000
- Revision:
- 3:1d62b3be52e8
new
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yuliyasm | 3:1d62b3be52e8 | 1 | void Error_Handler(){}; |
yuliyasm | 3:1d62b3be52e8 | 2 | /** |
yuliyasm | 3:1d62b3be52e8 | 3 | ****************************************************************************** |
yuliyasm | 3:1d62b3be52e8 | 4 | * File Name : SPI.c |
yuliyasm | 3:1d62b3be52e8 | 5 | * Description : This file provides code for the configuration |
yuliyasm | 3:1d62b3be52e8 | 6 | * of the SPI instances. |
yuliyasm | 3:1d62b3be52e8 | 7 | ****************************************************************************** |
yuliyasm | 3:1d62b3be52e8 | 8 | * @attention |
yuliyasm | 3:1d62b3be52e8 | 9 | * |
yuliyasm | 3:1d62b3be52e8 | 10 | * <h2><center>© Copyright (c) 2020 STMicroelectronics. |
yuliyasm | 3:1d62b3be52e8 | 11 | * All rights reserved.</center></h2> |
yuliyasm | 3:1d62b3be52e8 | 12 | * |
yuliyasm | 3:1d62b3be52e8 | 13 | * This software component is licensed by ST under Ultimate Liberty license |
yuliyasm | 3:1d62b3be52e8 | 14 | * SLA0044, the "License"; You may not use this file except in compliance with |
yuliyasm | 3:1d62b3be52e8 | 15 | * the License. You may obtain a copy of the License at: |
yuliyasm | 3:1d62b3be52e8 | 16 | * www.st.com/SLA0044 |
yuliyasm | 3:1d62b3be52e8 | 17 | * |
yuliyasm | 3:1d62b3be52e8 | 18 | ****************************************************************************** |
yuliyasm | 3:1d62b3be52e8 | 19 | */ |
yuliyasm | 3:1d62b3be52e8 | 20 | |
yuliyasm | 3:1d62b3be52e8 | 21 | /* Includes ------------------------------------------------------------------*/ |
yuliyasm | 3:1d62b3be52e8 | 22 | #include "spi.h" |
yuliyasm | 3:1d62b3be52e8 | 23 | |
yuliyasm | 3:1d62b3be52e8 | 24 | /* USER CODE BEGIN 0 */ |
yuliyasm | 3:1d62b3be52e8 | 25 | |
yuliyasm | 3:1d62b3be52e8 | 26 | /* USER CODE END 0 */ |
yuliyasm | 3:1d62b3be52e8 | 27 | |
yuliyasm | 3:1d62b3be52e8 | 28 | SPI_HandleTypeDef hspi1; |
yuliyasm | 3:1d62b3be52e8 | 29 | DMA_HandleTypeDef hdma_spi1_rx; |
yuliyasm | 3:1d62b3be52e8 | 30 | DMA_HandleTypeDef hdma_spi1_tx; |
yuliyasm | 3:1d62b3be52e8 | 31 | |
yuliyasm | 3:1d62b3be52e8 | 32 | /* SPI1 init function */ |
yuliyasm | 3:1d62b3be52e8 | 33 | void MX_SPI1_Init(void) |
yuliyasm | 3:1d62b3be52e8 | 34 | { |
yuliyasm | 3:1d62b3be52e8 | 35 | |
yuliyasm | 3:1d62b3be52e8 | 36 | hspi1.Instance = SPI1; |
yuliyasm | 3:1d62b3be52e8 | 37 | hspi1.Init.Mode = SPI_MODE_MASTER; |
yuliyasm | 3:1d62b3be52e8 | 38 | hspi1.Init.Direction = SPI_DIRECTION_2LINES; |
yuliyasm | 3:1d62b3be52e8 | 39 | hspi1.Init.DataSize = SPI_DATASIZE_8BIT; |
yuliyasm | 3:1d62b3be52e8 | 40 | hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH; |
yuliyasm | 3:1d62b3be52e8 | 41 | hspi1.Init.CLKPhase = SPI_PHASE_2EDGE; |
yuliyasm | 3:1d62b3be52e8 | 42 | hspi1.Init.NSS = SPI_NSS_SOFT; |
yuliyasm | 3:1d62b3be52e8 | 43 | hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128; |
yuliyasm | 3:1d62b3be52e8 | 44 | hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; |
yuliyasm | 3:1d62b3be52e8 | 45 | hspi1.Init.TIMode = SPI_TIMODE_DISABLE; |
yuliyasm | 3:1d62b3be52e8 | 46 | hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; |
yuliyasm | 3:1d62b3be52e8 | 47 | hspi1.Init.CRCPolynomial = 0x0; |
yuliyasm | 3:1d62b3be52e8 | 48 | hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE; |
yuliyasm | 3:1d62b3be52e8 | 49 | hspi1.Init.NSSPolarity = SPI_NSS_POLARITY_LOW; |
yuliyasm | 3:1d62b3be52e8 | 50 | hspi1.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA; |
yuliyasm | 3:1d62b3be52e8 | 51 | hspi1.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN; |
yuliyasm | 3:1d62b3be52e8 | 52 | hspi1.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN; |
yuliyasm | 3:1d62b3be52e8 | 53 | hspi1.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE; |
yuliyasm | 3:1d62b3be52e8 | 54 | hspi1.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE; |
yuliyasm | 3:1d62b3be52e8 | 55 | hspi1.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE; |
yuliyasm | 3:1d62b3be52e8 | 56 | hspi1.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_DISABLE; |
yuliyasm | 3:1d62b3be52e8 | 57 | hspi1.Init.IOSwap = SPI_IO_SWAP_DISABLE; |
yuliyasm | 3:1d62b3be52e8 | 58 | if (HAL_SPI_Init(&hspi1) != HAL_OK) |
yuliyasm | 3:1d62b3be52e8 | 59 | { |
yuliyasm | 3:1d62b3be52e8 | 60 | Error_Handler(); |
yuliyasm | 3:1d62b3be52e8 | 61 | } |
yuliyasm | 3:1d62b3be52e8 | 62 | |
yuliyasm | 3:1d62b3be52e8 | 63 | } |
yuliyasm | 3:1d62b3be52e8 | 64 | |
yuliyasm | 3:1d62b3be52e8 | 65 | void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle) |
yuliyasm | 3:1d62b3be52e8 | 66 | { |
yuliyasm | 3:1d62b3be52e8 | 67 | |
yuliyasm | 3:1d62b3be52e8 | 68 | GPIO_InitTypeDef GPIO_InitStruct = {0}; |
yuliyasm | 3:1d62b3be52e8 | 69 | if(spiHandle->Instance==SPI1) |
yuliyasm | 3:1d62b3be52e8 | 70 | { |
yuliyasm | 3:1d62b3be52e8 | 71 | /* USER CODE BEGIN SPI1_MspInit 0 */ |
yuliyasm | 3:1d62b3be52e8 | 72 | |
yuliyasm | 3:1d62b3be52e8 | 73 | /* USER CODE END SPI1_MspInit 0 */ |
yuliyasm | 3:1d62b3be52e8 | 74 | /* SPI1 clock enable */ |
yuliyasm | 3:1d62b3be52e8 | 75 | __HAL_RCC_SPI1_CLK_ENABLE(); |
yuliyasm | 3:1d62b3be52e8 | 76 | |
yuliyasm | 3:1d62b3be52e8 | 77 | __HAL_RCC_GPIOA_CLK_ENABLE(); |
yuliyasm | 3:1d62b3be52e8 | 78 | __HAL_RCC_GPIOB_CLK_ENABLE(); |
yuliyasm | 3:1d62b3be52e8 | 79 | /**SPI1 GPIO Configuration |
yuliyasm | 3:1d62b3be52e8 | 80 | PA5 ------> SPI1_SCK |
yuliyasm | 3:1d62b3be52e8 | 81 | PA6 ------> SPI1_MISO |
yuliyasm | 3:1d62b3be52e8 | 82 | PB5 ------> SPI1_MOSI |
yuliyasm | 3:1d62b3be52e8 | 83 | */ |
yuliyasm | 3:1d62b3be52e8 | 84 | GPIO_InitStruct.Pin = GPIO_PIN_5; |
yuliyasm | 3:1d62b3be52e8 | 85 | GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
yuliyasm | 3:1d62b3be52e8 | 86 | GPIO_InitStruct.Pull = GPIO_PULLUP; |
yuliyasm | 3:1d62b3be52e8 | 87 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
yuliyasm | 3:1d62b3be52e8 | 88 | GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; |
yuliyasm | 3:1d62b3be52e8 | 89 | HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); |
yuliyasm | 3:1d62b3be52e8 | 90 | |
yuliyasm | 3:1d62b3be52e8 | 91 | GPIO_InitStruct.Pin = GPIO_PIN_6; |
yuliyasm | 3:1d62b3be52e8 | 92 | GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
yuliyasm | 3:1d62b3be52e8 | 93 | GPIO_InitStruct.Pull = GPIO_NOPULL; |
yuliyasm | 3:1d62b3be52e8 | 94 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
yuliyasm | 3:1d62b3be52e8 | 95 | GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; |
yuliyasm | 3:1d62b3be52e8 | 96 | HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); |
yuliyasm | 3:1d62b3be52e8 | 97 | |
yuliyasm | 3:1d62b3be52e8 | 98 | GPIO_InitStruct.Pin = GPIO_PIN_5; |
yuliyasm | 3:1d62b3be52e8 | 99 | GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
yuliyasm | 3:1d62b3be52e8 | 100 | GPIO_InitStruct.Pull = GPIO_NOPULL; |
yuliyasm | 3:1d62b3be52e8 | 101 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
yuliyasm | 3:1d62b3be52e8 | 102 | GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; |
yuliyasm | 3:1d62b3be52e8 | 103 | HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); |
yuliyasm | 3:1d62b3be52e8 | 104 | |
yuliyasm | 3:1d62b3be52e8 | 105 | /* SPI1 DMA Init */ |
yuliyasm | 3:1d62b3be52e8 | 106 | /* SPI1_RX Init */ |
yuliyasm | 3:1d62b3be52e8 | 107 | hdma_spi1_rx.Instance = DMA1_Stream0; |
yuliyasm | 3:1d62b3be52e8 | 108 | hdma_spi1_rx.Init.Request = DMA_REQUEST_SPI1_RX; |
yuliyasm | 3:1d62b3be52e8 | 109 | hdma_spi1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; |
yuliyasm | 3:1d62b3be52e8 | 110 | hdma_spi1_rx.Init.PeriphInc = DMA_PINC_DISABLE; |
yuliyasm | 3:1d62b3be52e8 | 111 | hdma_spi1_rx.Init.MemInc = DMA_MINC_ENABLE; |
yuliyasm | 3:1d62b3be52e8 | 112 | hdma_spi1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; |
yuliyasm | 3:1d62b3be52e8 | 113 | hdma_spi1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; |
yuliyasm | 3:1d62b3be52e8 | 114 | hdma_spi1_rx.Init.Mode = DMA_NORMAL; |
yuliyasm | 3:1d62b3be52e8 | 115 | hdma_spi1_rx.Init.Priority = DMA_PRIORITY_HIGH; |
yuliyasm | 3:1d62b3be52e8 | 116 | hdma_spi1_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; |
yuliyasm | 3:1d62b3be52e8 | 117 | if (HAL_DMA_Init(&hdma_spi1_rx) != HAL_OK) |
yuliyasm | 3:1d62b3be52e8 | 118 | { |
yuliyasm | 3:1d62b3be52e8 | 119 | Error_Handler(); |
yuliyasm | 3:1d62b3be52e8 | 120 | } |
yuliyasm | 3:1d62b3be52e8 | 121 | |
yuliyasm | 3:1d62b3be52e8 | 122 | __HAL_LINKDMA(spiHandle,hdmarx,hdma_spi1_rx); |
yuliyasm | 3:1d62b3be52e8 | 123 | |
yuliyasm | 3:1d62b3be52e8 | 124 | /* SPI1_TX Init */ |
yuliyasm | 3:1d62b3be52e8 | 125 | hdma_spi1_tx.Instance = DMA1_Stream1; |
yuliyasm | 3:1d62b3be52e8 | 126 | hdma_spi1_tx.Init.Request = DMA_REQUEST_SPI1_TX; |
yuliyasm | 3:1d62b3be52e8 | 127 | hdma_spi1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; |
yuliyasm | 3:1d62b3be52e8 | 128 | hdma_spi1_tx.Init.PeriphInc = DMA_PINC_DISABLE; |
yuliyasm | 3:1d62b3be52e8 | 129 | hdma_spi1_tx.Init.MemInc = DMA_MINC_ENABLE; |
yuliyasm | 3:1d62b3be52e8 | 130 | hdma_spi1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; |
yuliyasm | 3:1d62b3be52e8 | 131 | hdma_spi1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; |
yuliyasm | 3:1d62b3be52e8 | 132 | hdma_spi1_tx.Init.Mode = DMA_NORMAL; |
yuliyasm | 3:1d62b3be52e8 | 133 | hdma_spi1_tx.Init.Priority = DMA_PRIORITY_HIGH; |
yuliyasm | 3:1d62b3be52e8 | 134 | hdma_spi1_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; |
yuliyasm | 3:1d62b3be52e8 | 135 | if (HAL_DMA_Init(&hdma_spi1_tx) != HAL_OK) |
yuliyasm | 3:1d62b3be52e8 | 136 | { |
yuliyasm | 3:1d62b3be52e8 | 137 | Error_Handler(); |
yuliyasm | 3:1d62b3be52e8 | 138 | } |
yuliyasm | 3:1d62b3be52e8 | 139 | |
yuliyasm | 3:1d62b3be52e8 | 140 | __HAL_LINKDMA(spiHandle,hdmatx,hdma_spi1_tx); |
yuliyasm | 3:1d62b3be52e8 | 141 | |
yuliyasm | 3:1d62b3be52e8 | 142 | /* SPI1 interrupt Init */ |
yuliyasm | 3:1d62b3be52e8 | 143 | HAL_NVIC_SetPriority(SPI1_IRQn, 0, 0); |
yuliyasm | 3:1d62b3be52e8 | 144 | HAL_NVIC_EnableIRQ(SPI1_IRQn); |
yuliyasm | 3:1d62b3be52e8 | 145 | /* USER CODE BEGIN SPI1_MspInit 1 */ |
yuliyasm | 3:1d62b3be52e8 | 146 | |
yuliyasm | 3:1d62b3be52e8 | 147 | /* USER CODE END SPI1_MspInit 1 */ |
yuliyasm | 3:1d62b3be52e8 | 148 | } |
yuliyasm | 3:1d62b3be52e8 | 149 | } |
yuliyasm | 3:1d62b3be52e8 | 150 | |
yuliyasm | 3:1d62b3be52e8 | 151 | void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle) |
yuliyasm | 3:1d62b3be52e8 | 152 | { |
yuliyasm | 3:1d62b3be52e8 | 153 | |
yuliyasm | 3:1d62b3be52e8 | 154 | if(spiHandle->Instance==SPI1) |
yuliyasm | 3:1d62b3be52e8 | 155 | { |
yuliyasm | 3:1d62b3be52e8 | 156 | /* USER CODE BEGIN SPI1_MspDeInit 0 */ |
yuliyasm | 3:1d62b3be52e8 | 157 | |
yuliyasm | 3:1d62b3be52e8 | 158 | /* USER CODE END SPI1_MspDeInit 0 */ |
yuliyasm | 3:1d62b3be52e8 | 159 | /* Peripheral clock disable */ |
yuliyasm | 3:1d62b3be52e8 | 160 | __HAL_RCC_SPI1_CLK_DISABLE(); |
yuliyasm | 3:1d62b3be52e8 | 161 | |
yuliyasm | 3:1d62b3be52e8 | 162 | /**SPI1 GPIO Configuration |
yuliyasm | 3:1d62b3be52e8 | 163 | PA5 ------> SPI1_SCK |
yuliyasm | 3:1d62b3be52e8 | 164 | PA6 ------> SPI1_MISO |
yuliyasm | 3:1d62b3be52e8 | 165 | PB5 ------> SPI1_MOSI |
yuliyasm | 3:1d62b3be52e8 | 166 | */ |
yuliyasm | 3:1d62b3be52e8 | 167 | HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5|GPIO_PIN_6); |
yuliyasm | 3:1d62b3be52e8 | 168 | |
yuliyasm | 3:1d62b3be52e8 | 169 | HAL_GPIO_DeInit(GPIOB, GPIO_PIN_5); |
yuliyasm | 3:1d62b3be52e8 | 170 | |
yuliyasm | 3:1d62b3be52e8 | 171 | /* SPI1 DMA DeInit */ |
yuliyasm | 3:1d62b3be52e8 | 172 | HAL_DMA_DeInit(spiHandle->hdmarx); |
yuliyasm | 3:1d62b3be52e8 | 173 | HAL_DMA_DeInit(spiHandle->hdmatx); |
yuliyasm | 3:1d62b3be52e8 | 174 | |
yuliyasm | 3:1d62b3be52e8 | 175 | /* SPI1 interrupt Deinit */ |
yuliyasm | 3:1d62b3be52e8 | 176 | HAL_NVIC_DisableIRQ(SPI1_IRQn); |
yuliyasm | 3:1d62b3be52e8 | 177 | /* USER CODE BEGIN SPI1_MspDeInit 1 */ |
yuliyasm | 3:1d62b3be52e8 | 178 | |
yuliyasm | 3:1d62b3be52e8 | 179 | /* USER CODE END SPI1_MspDeInit 1 */ |
yuliyasm | 3:1d62b3be52e8 | 180 | } |
yuliyasm | 3:1d62b3be52e8 | 181 | } |
yuliyasm | 3:1d62b3be52e8 | 182 | |
yuliyasm | 3:1d62b3be52e8 | 183 | /* USER CODE BEGIN 1 */ |
yuliyasm | 3:1d62b3be52e8 | 184 | |
yuliyasm | 3:1d62b3be52e8 | 185 | /* USER CODE END 1 */ |
yuliyasm | 3:1d62b3be52e8 | 186 | |
yuliyasm | 3:1d62b3be52e8 | 187 | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
yuliyasm | 3:1d62b3be52e8 | 188 |