MyLibs 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 MY_LIBS_SPI SPI Tools
7* @ingroup MYLIBS_PERIPHERAL
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 Init defines
71 * @ingroup MY_LIBS_SPI
72 * @brief Настройка SPI
73 * @{
74 */
75#define HAL_SPI_MODULE_ENABLED ///< Включение HAL SPI
76
77#define USE_SPI1 ///< Включить SPI1 в @ref SPI_MspInit
78#define USE_SPI2 ///< Включить SPI2 в @ref SPI_MspInit
79#define USE_SPI3 ///< Включить SPI3 в @ref SPI_MspInit
80/** SPI_INIT
81 * @}
82 */
83/////////////////////////---USER SETTINGS---/////////////////////////
84#include "mylibs_defs.h"
85
86
87
88/////////////////////////////////////////////////////////////////////
89////////////////////////////---DEFINES---////////////////////////////
90
91
92
93////////////////////////////---DEFINES---////////////////////////////
94
95
96/////////////////////////////////////////////////////////////////////
97///////////////////////---STRUCTURES & ENUMS---//////////////////////
98/**
99 * @brief Структура настроек SPI
100 * @details Содержит все необходимые параметры для инициализации SPI,
101 * включая GPIO и DMA.
102 */
103typedef struct
104{
105 SPI_HandleTypeDef hspi; ///< HAL handle SPI
106
107 GPIO_TypeDef *CLK_GPIOx; ///< Порт CLK
108 uint32_t CLK_PIN; ///< Пин CLK
109 uint32_t CLK_GPIO_AlternageFunc; ///< Альтернативная функция для CLK
110
111 GPIO_TypeDef *MISO_GPIOx; ///< Порт MISO
112 uint32_t MISO_PIN; ///< Пин MISO
113 uint32_t MISO_GPIO_AlternageFunc; ///< Альтернативная функция для MISO
114
115 GPIO_TypeDef *MOSI_GPIOx; ///< Порт MOSI
116 uint32_t MOSI_PIN; ///< Пин MOSI
117 uint32_t MOSI_GPIO_AlternageFunc; ///< Альтернативная функция для MOSI
118
119 DMA_Stream_TypeDef *DMAChannel; ///< Канал DMA (NULL если не нужен)
120 uint32_t DMA_CHANNEL_X; ///< Номер канала DMA (0 если не нужен)
121
123///////////////////////---STRUCTURES & ENUMS---//////////////////////
124
125
126/////////////////////////////////////////////////////////////////////
127///////////////////////////---FUNCTIONS---///////////////////////////
128
129/* Инициализация SPI с использованием структуры настроек */
130HAL_StatusTypeDef SPI_Base_Init(SPI_SettingsTypeDef *sspi);
131
132/* Проверка корректности структуры настроек SPI */
133HAL_StatusTypeDef SPI_Check_Init_Struct(SPI_SettingsTypeDef *sspi);
134
135/* Инициализация тактирования и прерываний для выбранного SPI */
136void SPI_MspInit(SPI_HandleTypeDef *hspi);
137
138/* Деинициализация тактирования и прерываний для выбранного SPI */
139void SPI_MspDeInit(SPI_HandleTypeDef *hspi);
140
141
142/**
143 * @cond SPI_INTERNAL
144 */
145
146/* Настройка GPIO для SPI */
148
149/* Настройка DMA для SPI */
150void SPI_DMA_Init(SPI_HandleTypeDef *hspi, DMA_HandleTypeDef *hdma_rx, DMA_Stream_TypeDef *DMAChannel, uint32_t DMA_CHANNEL_X);
151
152#ifndef __USER_LINKDMA
153/**
154 * @brief Аналог HAL макроса для привязки DMA к UART.
155 * @note @ref __HAL_LINKDMA.
156 */
157#define __USER_LINKDMA(__HANDLE__, __PPP_DMA_FIELD__, __DMA_HANDLE__) \
158do{ \
159(__HANDLE__)->__PPP_DMA_FIELD__ = (__DMA_HANDLE__); \
160(__DMA_HANDLE__)->Parent = (__HANDLE__);} while(0U)
161#endif
162
163/** @endcond */
164///////////////////////////---FUNCTIONS---///////////////////////////
165
166#endif // __SPI_GENERAL_H_
167
168/** MY_LIBS_SPI
169 * @}
170 */
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.
Заголочный файл для дефайнов библиотеки MyLibsGeneral.
Структура настроек 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.