18#include "general_spi.h"
33 if(Check_SPI_Init_Struct(sspi) != HAL_OK)
36 SPI_MspInit(&sspi->hspi);
38 if (HAL_SPI_Init(&sspi->hspi) != HAL_OK)
63 GPIO_InitTypeDef GPIO_InitStruct = {0};
69 GPIO_InitStruct.Pin = sspi->CLK_PIN;
70 GPIO_InitStruct.Alternate = sspi->CLK_GPIO_AlternageFunc;
71 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
72 GPIO_InitStruct.Pull = GPIO_NOPULL;
73 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
74 HAL_GPIO_Init(sspi->CLK_GPIOx, &GPIO_InitStruct);
76 GPIO_InitStruct.Pin = sspi->MISO_PIN;
77 GPIO_InitStruct.Alternate = sspi->MISO_GPIO_AlternageFunc;
78 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
79 GPIO_InitStruct.Pull = GPIO_NOPULL;
80 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
81 HAL_GPIO_Init(sspi->MISO_GPIOx, &GPIO_InitStruct);
83 GPIO_InitStruct.Pin = sspi->MOSI_PIN;
84 GPIO_InitStruct.Alternate = sspi->MOSI_GPIO_AlternageFunc;
85 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
86 GPIO_InitStruct.Pull = GPIO_NOPULL;
87 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
88 HAL_GPIO_Init(sspi->MOSI_GPIOx, &GPIO_InitStruct);
98void SPI_DMA_Init(SPI_HandleTypeDef *hspi, DMA_HandleTypeDef *hdma_rx, DMA_Stream_TypeDef *DMAChannel, uint32_t DMA_CHANNEL_X)
135void SPI_MspInit(SPI_HandleTypeDef *hspi)
141 else if(hspi->Instance==SPI1)
151 __HAL_RCC_SPI1_CLK_ENABLE();
154 HAL_NVIC_SetPriority(SPI1_IRQn, 0, 0);
155 HAL_NVIC_EnableIRQ(SPI1_IRQn);
159 else if(hspi->Instance==SPI2)
168 __HAL_RCC_SPI2_CLK_ENABLE();
171 HAL_NVIC_SetPriority(SPI2_IRQn, 0, 0);
172 HAL_NVIC_EnableIRQ(SPI2_IRQn);
176 else if(hspi->Instance==SPI3)
185 __HAL_RCC_SPI3_CLK_ENABLE();
187 HAL_NVIC_SetPriority(SPI3_IRQn, 0, 0);
188 HAL_NVIC_EnableIRQ(SPI3_IRQn);
199void SPI_MspDeInit(SPI_HandleTypeDef *hspi)
205 else if(hspi->Instance==SPI1)
215 __HAL_RCC_SPI1_FORCE_RESET();
216 __HAL_RCC_SPI1_RELEASE_RESET();
220 else if(hspi->Instance==SPI2)
229 __HAL_RCC_SPI2_FORCE_RESET();
230 __HAL_RCC_SPI2_RELEASE_RESET();
234 else if(hspi->Instance==SPI3)
243 __HAL_RCC_SPI3_FORCE_RESET();
244 __HAL_RCC_SPI3_RELEASE_RESET();
257 if (!IS_SPI_ALL_INSTANCE(sspi->hspi.Instance))
261 if (!IS_SPI_MODE(sspi->hspi.Init.Mode))
263 if (!IS_SPI_DIRECTION(sspi->hspi.Init.Direction))
265 if (!IS_SPI_DATASIZE(sspi->hspi.Init.DataSize))
267 if (!IS_SPI_BAUDRATE_PRESCALER(sspi->hspi.Init.BaudRatePrescaler))
269 if (!IS_SPI_CPOL(sspi->hspi.Init.CLKPolarity))
271 if (!IS_SPI_CPHA(sspi->hspi.Init.CLKPhase))
273 if (!IS_SPI_NSS(sspi->hspi.Init.NSS))
275 if (!IS_SPI_FIRST_BIT(sspi->hspi.Init.FirstBit))
277 if (!IS_SPI_CRC_CALCULATION(sspi->hspi.Init.CRCCalculation))
279 if (!IS_SPI_CRC_POLYNOMIAL(sspi->hspi.Init.NSS) &&
280 (sspi->hspi.Init.CRCCalculation != SPI_CRCCALCULATION_DISABLE))
282 if (!IS_SPI_TIMODE(sspi->hspi.Init.TIMode))
286 if (!IS_GPIO_ALL_INSTANCE(sspi->CLK_GPIOx) || !IS_GPIO_ALL_INSTANCE(sspi->MISO_GPIOx) || !IS_GPIO_ALL_INSTANCE(sspi->MOSI_GPIOx))
288 if (!IS_GPIO_PIN(sspi->CLK_PIN) && !IS_GPIO_PIN(sspi->MISO_PIN) && !IS_GPIO_PIN(sspi->MOSI_PIN))
Заголовочный файл для модуля инициализации портов и работы с ними.
#define MyLibs_Error_Handler(params)
Error_Handler который будет вызыватся в библиотеке
HAL_StatusTypeDef GPIO_Clock_Enable(GPIO_TypeDef *GPIOx)
Включить тактирование порта GPIO.