STM32_General 1.0
Библиотеки для периферии STM32
Loading...
Searching...
No Matches
general_spi.h
Go to the documentation of this file.
1/**
2**************************************************************************
3* @file general_spi.h
4* @brief Заголовочный файл для модуля инициализации SPI.
5**************************************************************************
6* @defgroup GENERAL_SPI SPI Tools
7* @ingroup STM32_GENERAL
8* @brief Функции и макросы для удобной работы с SPI.
9* @details
10Модуль предоставляет функции для базовой инициализации SPI
11
12
13@par Пример использования:
14@code
15// Структура настроек SPI
16SPI_SettingsTypeDef spi1Settings;
17
18void SPI1_Init(void)
19{
20 // Настройка SPI1 как Master, 8 бит, полный дуплекс
21 spi1Settings.hspi.Instance = SPI1;
22 spi1Settings.hspi.Init.Mode = SPI_MODE_MASTER;
23 spi1Settings.hspi.Init.Direction = SPI_DIRECTION_2LINES;
24 spi1Settings.hspi.Init.DataSize = SPI_DATASIZE_8BIT;
25 spi1Settings.hspi.Init.CLKPolarity = SPI_POLARITY_LOW;
26 spi1Settings.hspi.Init.CLKPhase = SPI_PHASE_1EDGE;
27 spi1Settings.hspi.Init.NSS = SPI_NSS_SOFT;
28 spi1Settings.hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
29 spi1Settings.hspi.Init.FirstBit = SPI_FIRSTBIT_MSB;
30 spi1Settings.hspi.Init.TIMode = SPI_TIMODE_DISABLE;
31 spi1Settings.hspi.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
32
33 // Настройка GPIO
34 spi1Settings.CLK_GPIOx = GPIOA;
35 spi1Settings.CLK_PIN = GPIO_PIN_5;
36 spi1Settings.CLK_GPIO_AlternageFunc = GPIO_AF5_SPI1;
37
38 spi1Settings.MISO_GPIOx = GPIOA;
39 spi1Settings.MISO_PIN = GPIO_PIN_6;
40 spi1Settings.MISO_GPIO_AlternageFunc = GPIO_AF5_SPI1;
41
42 spi1Settings.MOSI_GPIOx = GPIOA;
43 spi1Settings.MOSI_PIN = GPIO_PIN_7;
44 spi1Settings.MOSI_GPIO_AlternageFunc = GPIO_AF5_SPI1;
45
46 // Инициализация SPI
47 if(SPI_Base_Init(&spi1Settings) != HAL_OK)
48 {
49 // Обработка ошибки
50 Error_Handler();
51 }
52}
53@endcode
54
55
56
57* @note Требуется подключение модуля SPI в библиотеке HAL
58@code
59#define HAL_SPI_MODULE_ENABLED
60@endcode
61* @{
62*************************************************************************/
63#ifndef __SPI_GENERAL_H_
64#define __SPI_GENERAL_H_
65
66
67/////////////////////////////////////////////////////////////////////
68/////////////////////////---USER SETTINGS---/////////////////////////
69/**
70 * @addtogroup SPI_INIT SPI Init defines
71 * @ingroup GENERAL_SPI
72 * @ingroup GENERAL_CONFIGS Конфигурации STM32 General
73 * @brief Настройка SPI
74 * @{
75 */
76#define HAL_SPI_MODULE_ENABLED ///< Включение HAL SPI
77
78#define USE_SPI1 ///< Включить SPI1 в @ref SPI_MspInit
79#define USE_SPI2 ///< Включить SPI2 в @ref SPI_MspInit
80#define USE_SPI3 ///< Включить SPI3 в @ref SPI_MspInit
81/** SPI_INIT
82 * @}
83 */
84/////////////////////////---USER SETTINGS---/////////////////////////
85#include "mylibs_defs.h"
86
87
88
89/////////////////////////////////////////////////////////////////////
90////////////////////////////---DEFINES---////////////////////////////
91
92
93
94////////////////////////////---DEFINES---////////////////////////////
95
96
97/////////////////////////////////////////////////////////////////////
98///////////////////////---STRUCTURES & ENUMS---//////////////////////
99/**
100 * @brief Структура настроек SPI
101 * @details Содержит все необходимые параметры для инициализации SPI,
102 * включая GPIO и DMA.
103 */
104typedef struct
105{
106 SPI_HandleTypeDef hspi; ///< HAL handle SPI
107
108 GPIO_TypeDef *CLK_GPIOx; ///< Порт CLK
109 uint32_t CLK_PIN; ///< Пин CLK
110 uint32_t CLK_GPIO_AlternageFunc; ///< Альтернативная функция для CLK
111
112 GPIO_TypeDef *MISO_GPIOx; ///< Порт MISO
113 uint32_t MISO_PIN; ///< Пин MISO
114 uint32_t MISO_GPIO_AlternageFunc; ///< Альтернативная функция для MISO
115
116 GPIO_TypeDef *MOSI_GPIOx; ///< Порт MOSI
117 uint32_t MOSI_PIN; ///< Пин MOSI
118 uint32_t MOSI_GPIO_AlternageFunc; ///< Альтернативная функция для MOSI
119
120 DMA_Stream_TypeDef *DMAChannel; ///< Канал DMA (NULL если не нужен)
121 uint32_t DMA_CHANNEL_X; ///< Номер канала DMA (0 если не нужен)
122
124///////////////////////---STRUCTURES & ENUMS---//////////////////////
125
126
127/////////////////////////////////////////////////////////////////////
128///////////////////////////---FUNCTIONS---///////////////////////////
129
130/* Инициализация SPI с использованием структуры настроек */
131HAL_StatusTypeDef SPI_Base_Init(SPI_SettingsTypeDef *sspi);
132
133/* Проверка корректности структуры настроек SPI */
134HAL_StatusTypeDef SPI_Check_Init_Struct(SPI_SettingsTypeDef *sspi);
135
136/* Инициализация тактирования и прерываний для выбранного SPI */
137void SPI_MspInit(SPI_HandleTypeDef *hspi);
138
139/* Деинициализация тактирования и прерываний для выбранного SPI */
140void SPI_MspDeInit(SPI_HandleTypeDef *hspi);
141
142
143/**
144 * @cond SPI_INTERNAL
145 */
146
147/* Настройка GPIO для SPI */
149
150/* Настройка DMA для SPI */
151void SPI_DMA_Init(SPI_HandleTypeDef *hspi, DMA_HandleTypeDef *hdma_rx, DMA_Stream_TypeDef *DMAChannel, uint32_t DMA_CHANNEL_X);
152
153#ifndef __USER_LINKDMA
154/**
155 * @brief Аналог HAL макроса для привязки DMA к UART.
156 * @note @ref __HAL_LINKDMA.
157 */
158#define __USER_LINKDMA(__HANDLE__, __PPP_DMA_FIELD__, __DMA_HANDLE__) \
159do{ \
160(__HANDLE__)->__PPP_DMA_FIELD__ = (__DMA_HANDLE__); \
161(__DMA_HANDLE__)->Parent = (__HANDLE__);} while(0U)
162#endif
163
164/** @endcond */
165///////////////////////////---FUNCTIONS---///////////////////////////
166
167#endif // __SPI_GENERAL_H_
168
169/** GENERAL_SPI
170 * @}
171 */
void SPI_GPIO_Init(SPI_SettingsTypeDef *sspi)
Инициализация GPIO для SPI.
Definition general_spi.c:58
HAL_StatusTypeDef SPI_Base_Init(SPI_SettingsTypeDef *sspi)
Инициализация SPI с помощью структуры SPI_SettingsTypeDef.
Definition general_spi.c:28
HAL_StatusTypeDef SPI_Check_Init_Struct(SPI_SettingsTypeDef *sspi)
Проверка корректности структуры инициализации SPI.
void SPI_MspInit(SPI_HandleTypeDef *hspi)
Настройка тактирования и прерываний SPI.
void SPI_MspDeInit(SPI_HandleTypeDef *hspi)
Деинициализация тактирования и прерываний SPI.
Структура настроек SPI.
GPIO_TypeDef * MOSI_GPIOx
Порт MOSI.
GPIO_TypeDef * MISO_GPIOx
Порт MISO.
uint32_t MISO_PIN
Пин MISO.
uint32_t CLK_PIN
Пин CLK.
DMA_Stream_TypeDef * DMAChannel
Канал DMA (NULL если не нужен)
uint32_t CLK_GPIO_AlternageFunc
Альтернативная функция для CLK.
GPIO_TypeDef * CLK_GPIOx
Порт CLK.
uint32_t MOSI_PIN
Пин MOSI.
uint32_t DMA_CHANNEL_X
Номер канала DMA (0 если не нужен)
SPI_HandleTypeDef hspi
HAL handle SPI.
uint32_t MISO_GPIO_AlternageFunc
Альтернативная функция для MISO.
uint32_t MOSI_GPIO_AlternageFunc
Альтернативная функция для MOSI.