From 6da7a04be564ea2d8eb7cb3f8460a0f6381134d3 Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Tue, 21 Oct 2025 03:44:50 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BA=D0=BE=D1=80=D1=80.=20gitignore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- Doc/html/_s_p_i__usage__example-example.html | 165 ++++++ Doc/html/examples.html | 116 ++++ Doc/html/examples.js | 4 + Doc/html/general__spi_8c.html | 233 ++++++++ Doc/html/general__spi_8c.js | 8 + Doc/html/general__spi_8c__incl.map | 14 + Doc/html/general__spi_8c__incl.md5 | 1 + Doc/html/general__spi_8c__incl.png | Bin 0 -> 8326 bytes Doc/html/general__spi_8c_source.html | 428 ++++++++++++++ Doc/html/general__spi_8h.html | 185 ++++++ Doc/html/general__spi_8h.js | 11 + Doc/html/general__spi_8h__dep__incl.map | 5 + Doc/html/general__spi_8h__dep__incl.md5 | 1 + Doc/html/general__spi_8h__dep__incl.png | Bin 0 -> 2903 bytes Doc/html/general__spi_8h__incl.map | 9 + Doc/html/general__spi_8h__incl.md5 | 1 + Doc/html/general__spi_8h__incl.png | Bin 0 -> 4015 bytes Doc/html/general__spi_8h_source.html | 305 ++++++++++ Doc/html/general__uart_8c.html | 257 +++++++++ Doc/html/general__uart_8c.js | 9 + Doc/html/general__uart_8c__incl.map | 14 + Doc/html/general__uart_8c__incl.md5 | 1 + Doc/html/general__uart_8c__incl.png | Bin 0 -> 7161 bytes Doc/html/general__uart_8c_source.html | 526 ++++++++++++++++++ Doc/html/general__uart_8h.html | 191 +++++++ Doc/html/general__uart_8h.js | 14 + Doc/html/general__uart_8h__dep__incl.map | 5 + Doc/html/general__uart_8h__dep__incl.md5 | 1 + Doc/html/general__uart_8h__dep__incl.png | Bin 0 -> 2909 bytes Doc/html/general__uart_8h__incl.map | 9 + Doc/html/general__uart_8h__incl.md5 | 1 + Doc/html/general__uart_8h__incl.png | Bin 0 -> 4018 bytes Doc/html/general__uart_8h_source.html | 286 ++++++++++ Doc/html/group___m_y___l_i_b_s___s_p_i.html | 328 +++++++++++ Doc/html/group___m_y___l_i_b_s___s_p_i.js | 22 + Doc/html/group___m_y___l_i_b_s___s_p_i.map | 5 + Doc/html/group___m_y___l_i_b_s___s_p_i.md5 | 1 + Doc/html/group___m_y___l_i_b_s___s_p_i.png | Bin 0 -> 1432 bytes Doc/html/group___m_y___l_i_b_s___u_a_r_t.html | 317 +++++++++++ Doc/html/group___m_y___l_i_b_s___u_a_r_t.js | 16 + Doc/html/group___m_y___l_i_b_s___u_a_r_t.map | 5 + Doc/html/group___m_y___l_i_b_s___u_a_r_t.md5 | 1 + Doc/html/group___m_y___l_i_b_s___u_a_r_t.png | Bin 0 -> 1477 bytes ...m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.html | 273 +++++++++ ...__m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.js | 16 + ..._m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.map | 5 + ..._m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.md5 | 1 + ..._m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.png | Bin 0 -> 1541 bytes Doc/html/group___s_p_i___i_n_i_t.html | 220 ++++++++ Doc/html/group___s_p_i___i_n_i_t.js | 7 + Doc/html/group___s_p_i___i_n_i_t.map | 4 + Doc/html/group___s_p_i___i_n_i_t.md5 | 1 + Doc/html/group___s_p_i___i_n_i_t.png | Bin 0 -> 952 bytes Doc/html/group___u_a_r_t___i_n_i_t.html | 280 ++++++++++ Doc/html/group___u_a_r_t___i_n_i_t.js | 10 + Doc/html/group___u_a_r_t___i_n_i_t.map | 4 + Doc/html/group___u_a_r_t___i_n_i_t.md5 | 1 + Doc/html/group___u_a_r_t___i_n_i_t.png | Bin 0 -> 980 bytes Doc/html/search/all_1c.js | 4 + Doc/html/search/defines_0.js | 4 + Doc/html/search/functions_5.js | 14 + Doc/html/search/functions_6.js | 9 + Doc/html/search/functions_7.js | 8 + Doc/html/struct_s_p_i___settings_type_def.js | 15 + .../struct_u_a_r_t___settings_type_def.js | 9 + Doc/latex/_s_p_i__usage__example-example.tex | 52 ++ Doc/latex/examples.tex | 4 + Doc/latex/general__spi_8c.tex | 79 +++ Doc/latex/general__spi_8c__incl.md5 | 1 + Doc/latex/general__spi_8c__incl.pdf | Bin 0 -> 22708 bytes Doc/latex/general__spi_8c_source.tex | 290 ++++++++++ Doc/latex/general__spi_8h.tex | 58 ++ Doc/latex/general__spi_8h__dep__incl.md5 | 1 + Doc/latex/general__spi_8h__dep__incl.pdf | Bin 0 -> 20677 bytes Doc/latex/general__spi_8h__incl.md5 | 1 + Doc/latex/general__spi_8h__incl.pdf | Bin 0 -> 22499 bytes Doc/latex/general__spi_8h_source.tex | 176 ++++++ Doc/latex/general__uart_8c.tex | 99 ++++ Doc/latex/general__uart_8c__incl.md5 | 1 + Doc/latex/general__uart_8c__incl.pdf | Bin 0 -> 23053 bytes Doc/latex/general__uart_8c_source.tex | 389 +++++++++++++ Doc/latex/general__uart_8h.tex | 64 +++ Doc/latex/general__uart_8h__dep__incl.md5 | 1 + Doc/latex/general__uart_8h__dep__incl.pdf | Bin 0 -> 20651 bytes Doc/latex/general__uart_8h__incl.md5 | 1 + Doc/latex/general__uart_8h__incl.pdf | Bin 0 -> 22463 bytes Doc/latex/general__uart_8h_source.tex | 162 ++++++ Doc/latex/group___m_y___l_i_b_s___s_p_i.md5 | 1 + Doc/latex/group___m_y___l_i_b_s___s_p_i.pdf | Bin 0 -> 14926 bytes Doc/latex/group___m_y___l_i_b_s___s_p_i.tex | 195 +++++++ Doc/latex/group___m_y___l_i_b_s___u_a_r_t.md5 | 1 + Doc/latex/group___m_y___l_i_b_s___u_a_r_t.pdf | Bin 0 -> 15507 bytes Doc/latex/group___m_y___l_i_b_s___u_a_r_t.tex | 193 +++++++ ..._m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.md5 | 1 + ..._m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.pdf | Bin 0 -> 14982 bytes ..._m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.tex | 136 +++++ Doc/latex/group___s_p_i___i_n_i_t.md5 | 1 + Doc/latex/group___s_p_i___i_n_i_t.pdf | Bin 0 -> 13122 bytes Doc/latex/group___s_p_i___i_n_i_t.tex | 91 +++ Doc/latex/group___u_a_r_t___i_n_i_t.md5 | 1 + Doc/latex/group___u_a_r_t___i_n_i_t.pdf | Bin 0 -> 13466 bytes Doc/latex/group___u_a_r_t___i_n_i_t.tex | 139 +++++ 103 files changed, 6519 insertions(+), 2 deletions(-) create mode 100644 Doc/html/_s_p_i__usage__example-example.html create mode 100644 Doc/html/examples.html create mode 100644 Doc/html/examples.js create mode 100644 Doc/html/general__spi_8c.html create mode 100644 Doc/html/general__spi_8c.js create mode 100644 Doc/html/general__spi_8c__incl.map create mode 100644 Doc/html/general__spi_8c__incl.md5 create mode 100644 Doc/html/general__spi_8c__incl.png create mode 100644 Doc/html/general__spi_8c_source.html create mode 100644 Doc/html/general__spi_8h.html create mode 100644 Doc/html/general__spi_8h.js create mode 100644 Doc/html/general__spi_8h__dep__incl.map create mode 100644 Doc/html/general__spi_8h__dep__incl.md5 create mode 100644 Doc/html/general__spi_8h__dep__incl.png create mode 100644 Doc/html/general__spi_8h__incl.map create mode 100644 Doc/html/general__spi_8h__incl.md5 create mode 100644 Doc/html/general__spi_8h__incl.png create mode 100644 Doc/html/general__spi_8h_source.html create mode 100644 Doc/html/general__uart_8c.html create mode 100644 Doc/html/general__uart_8c.js create mode 100644 Doc/html/general__uart_8c__incl.map create mode 100644 Doc/html/general__uart_8c__incl.md5 create mode 100644 Doc/html/general__uart_8c__incl.png create mode 100644 Doc/html/general__uart_8c_source.html create mode 100644 Doc/html/general__uart_8h.html create mode 100644 Doc/html/general__uart_8h.js create mode 100644 Doc/html/general__uart_8h__dep__incl.map create mode 100644 Doc/html/general__uart_8h__dep__incl.md5 create mode 100644 Doc/html/general__uart_8h__dep__incl.png create mode 100644 Doc/html/general__uart_8h__incl.map create mode 100644 Doc/html/general__uart_8h__incl.md5 create mode 100644 Doc/html/general__uart_8h__incl.png create mode 100644 Doc/html/general__uart_8h_source.html create mode 100644 Doc/html/group___m_y___l_i_b_s___s_p_i.html create mode 100644 Doc/html/group___m_y___l_i_b_s___s_p_i.js create mode 100644 Doc/html/group___m_y___l_i_b_s___s_p_i.map create mode 100644 Doc/html/group___m_y___l_i_b_s___s_p_i.md5 create mode 100644 Doc/html/group___m_y___l_i_b_s___s_p_i.png create mode 100644 Doc/html/group___m_y___l_i_b_s___u_a_r_t.html create mode 100644 Doc/html/group___m_y___l_i_b_s___u_a_r_t.js create mode 100644 Doc/html/group___m_y___l_i_b_s___u_a_r_t.map create mode 100644 Doc/html/group___m_y___l_i_b_s___u_a_r_t.md5 create mode 100644 Doc/html/group___m_y___l_i_b_s___u_a_r_t.png create mode 100644 Doc/html/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.html create mode 100644 Doc/html/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.js create mode 100644 Doc/html/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.map create mode 100644 Doc/html/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.md5 create mode 100644 Doc/html/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.png create mode 100644 Doc/html/group___s_p_i___i_n_i_t.html create mode 100644 Doc/html/group___s_p_i___i_n_i_t.js create mode 100644 Doc/html/group___s_p_i___i_n_i_t.map create mode 100644 Doc/html/group___s_p_i___i_n_i_t.md5 create mode 100644 Doc/html/group___s_p_i___i_n_i_t.png create mode 100644 Doc/html/group___u_a_r_t___i_n_i_t.html create mode 100644 Doc/html/group___u_a_r_t___i_n_i_t.js create mode 100644 Doc/html/group___u_a_r_t___i_n_i_t.map create mode 100644 Doc/html/group___u_a_r_t___i_n_i_t.md5 create mode 100644 Doc/html/group___u_a_r_t___i_n_i_t.png create mode 100644 Doc/html/search/all_1c.js create mode 100644 Doc/html/search/defines_0.js create mode 100644 Doc/html/search/functions_5.js create mode 100644 Doc/html/search/functions_6.js create mode 100644 Doc/html/search/functions_7.js create mode 100644 Doc/html/struct_s_p_i___settings_type_def.js create mode 100644 Doc/html/struct_u_a_r_t___settings_type_def.js create mode 100644 Doc/latex/_s_p_i__usage__example-example.tex create mode 100644 Doc/latex/examples.tex create mode 100644 Doc/latex/general__spi_8c.tex create mode 100644 Doc/latex/general__spi_8c__incl.md5 create mode 100644 Doc/latex/general__spi_8c__incl.pdf create mode 100644 Doc/latex/general__spi_8c_source.tex create mode 100644 Doc/latex/general__spi_8h.tex create mode 100644 Doc/latex/general__spi_8h__dep__incl.md5 create mode 100644 Doc/latex/general__spi_8h__dep__incl.pdf create mode 100644 Doc/latex/general__spi_8h__incl.md5 create mode 100644 Doc/latex/general__spi_8h__incl.pdf create mode 100644 Doc/latex/general__spi_8h_source.tex create mode 100644 Doc/latex/general__uart_8c.tex create mode 100644 Doc/latex/general__uart_8c__incl.md5 create mode 100644 Doc/latex/general__uart_8c__incl.pdf create mode 100644 Doc/latex/general__uart_8c_source.tex create mode 100644 Doc/latex/general__uart_8h.tex create mode 100644 Doc/latex/general__uart_8h__dep__incl.md5 create mode 100644 Doc/latex/general__uart_8h__dep__incl.pdf create mode 100644 Doc/latex/general__uart_8h__incl.md5 create mode 100644 Doc/latex/general__uart_8h__incl.pdf create mode 100644 Doc/latex/general__uart_8h_source.tex create mode 100644 Doc/latex/group___m_y___l_i_b_s___s_p_i.md5 create mode 100644 Doc/latex/group___m_y___l_i_b_s___s_p_i.pdf create mode 100644 Doc/latex/group___m_y___l_i_b_s___s_p_i.tex create mode 100644 Doc/latex/group___m_y___l_i_b_s___u_a_r_t.md5 create mode 100644 Doc/latex/group___m_y___l_i_b_s___u_a_r_t.pdf create mode 100644 Doc/latex/group___m_y___l_i_b_s___u_a_r_t.tex create mode 100644 Doc/latex/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.md5 create mode 100644 Doc/latex/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.pdf create mode 100644 Doc/latex/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.tex create mode 100644 Doc/latex/group___s_p_i___i_n_i_t.md5 create mode 100644 Doc/latex/group___s_p_i___i_n_i_t.pdf create mode 100644 Doc/latex/group___s_p_i___i_n_i_t.tex create mode 100644 Doc/latex/group___u_a_r_t___i_n_i_t.md5 create mode 100644 Doc/latex/group___u_a_r_t___i_n_i_t.pdf create mode 100644 Doc/latex/group___u_a_r_t___i_n_i_t.tex diff --git a/.gitignore b/.gitignore index fdc4b61..4e5f666 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ -/MyLibsGeneral/.vscode/ -/Doc/ \ No newline at end of file +/MyLibsGeneral/.vscode/ \ No newline at end of file diff --git a/Doc/html/_s_p_i__usage__example-example.html b/Doc/html/_s_p_i__usage__example-example.html new file mode 100644 index 0000000..e9f6df9 --- /dev/null +++ b/Doc/html/_s_p_i__usage__example-example.html @@ -0,0 +1,165 @@ + + + + + + + +MyLibs: SPI_Usage_Example + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
MyLibs 1.0 +
+
Расширенные библиотеки для STM32
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SPI_Usage_Example
+
+
+

Пример использования SPI_Base_Init.

+

Пример использования SPI_Base_Init. Инициализация SPI1 с базовыми настройками:

#include "general_spi.h"
+
+ +
+
void SPI1_Init(void)
+
{
+
// Настройка SPI1
+
mySPI.hspi.Instance = SPI1;
+
mySPI.hspi.Init.Mode = SPI_MODE_MASTER;
+
mySPI.hspi.Init.Direction = SPI_DIRECTION_2LINES;
+
mySPI.hspi.Init.DataSize = SPI_DATASIZE_8BIT;
+
mySPI.hspi.Init.CLKPolarity = SPI_POLARITY_LOW;
+
mySPI.hspi.Init.CLKPhase = SPI_PHASE_1EDGE;
+
mySPI.hspi.Init.NSS = SPI_NSS_SOFT;
+
mySPI.hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
+
mySPI.hspi.Init.FirstBit = SPI_FIRSTBIT_MSB;
+
mySPI.hspi.Init.TIMode = SPI_TIMODE_DISABLE;
+
mySPI.hspi.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
+
+
// Настройка GPIO для SPI
+
mySPI.CLK_GPIOx = GPIOA;
+
mySPI.CLK_PIN = GPIO_PIN_5;
+
mySPI.CLK_GPIO_AlternageFunc = GPIO_AF5_SPI1;
+
+
mySPI.MISO_GPIOx = GPIOA;
+
mySPI.MISO_PIN = GPIO_PIN_6;
+
mySPI.MISO_GPIO_AlternageFunc = GPIO_AF5_SPI1;
+
+
mySPI.MOSI_GPIOx = GPIOA;
+
mySPI.MOSI_PIN = GPIO_PIN_7;
+
mySPI.MOSI_GPIO_AlternageFunc = GPIO_AF5_SPI1;
+
+
// Инициализация SPI
+
if(SPI_Base_Init(&mySPI) != HAL_OK)
+
{
+
// Обработка ошибки
+
}
+
}
+
Заголовочный файл для модуля инициализации SPI.
+
HAL_StatusTypeDef SPI_Base_Init(SPI_SettingsTypeDef *sspi)
Инициализация SPI с помощью структуры SPI_SettingsTypeDef.
Definition general_spi.c:23
+
Структура настроек SPI.
+
GPIO_TypeDef * MOSI_GPIOx
Порт MOSI.
+
GPIO_TypeDef * MISO_GPIOx
Порт MISO.
+
uint32_t MISO_PIN
Пин MISO.
+
uint32_t CLK_PIN
Пин CLK.
+
uint32_t CLK_GPIO_AlternageFunc
Альтернативная функция для CLK.
+
GPIO_TypeDef * CLK_GPIOx
Порт CLK.
+
uint32_t MOSI_PIN
Пин MOSI.
+
SPI_HandleTypeDef hspi
HAL handle SPI.
+
uint32_t MISO_GPIO_AlternageFunc
Альтернативная функция для MISO.
+
uint32_t MOSI_GPIO_AlternageFunc
Альтернативная функция для MOSI.
+
+
+
+ + + + diff --git a/Doc/html/examples.html b/Doc/html/examples.html new file mode 100644 index 0000000..425d399 --- /dev/null +++ b/Doc/html/examples.html @@ -0,0 +1,116 @@ + + + + + + + +MyLibs: Examples + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
MyLibs 1.0 +
+
Расширенные библиотеки для STM32
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Examples
+
+
+
Here is a list of all examples:
+
+
+
+ + + + diff --git a/Doc/html/examples.js b/Doc/html/examples.js new file mode 100644 index 0000000..2b5561e --- /dev/null +++ b/Doc/html/examples.js @@ -0,0 +1,4 @@ +var examples = +[ + [ "SPI_Usage_Example", "_s_p_i__usage__example-example.html", null ] +]; \ No newline at end of file diff --git a/Doc/html/general__spi_8c.html b/Doc/html/general__spi_8c.html new file mode 100644 index 0000000..f4f02f1 --- /dev/null +++ b/Doc/html/general__spi_8c.html @@ -0,0 +1,233 @@ + + + + + + + +MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Src/general_spi.c File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
MyLibs 1.0 +
+
Расширенные библиотеки для STM32
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
general_spi.c File Reference
+
+
+ +

Модуль для инициализации SPI. +More...

+
#include "general_spi.h"
+#include "general_gpio.h"
+
Include dependency graph for general_spi.c:
+
+
+ +
+

Go to the source code of this file.

+ + + + + + + + + + + + + +

+Functions

HAL_StatusTypeDef SPI_Base_Init (SPI_SettingsTypeDef *sspi)
 Инициализация SPI с помощью структуры SPI_SettingsTypeDef.
void SPI_GPIO_Init (SPI_SettingsTypeDef *sspi)
 Инициализация GPIO для SPI.
void SPI_DMA_Init (SPI_HandleTypeDef *hspi, DMA_HandleTypeDef *hdma_rx, DMA_Stream_TypeDef *DMAChannel, uint32_t DMA_CHANNEL_X)
void SPI_MspInit (SPI_HandleTypeDef *hspi)
 Настройка тактирования и прерываний SPI.
void SPI_MspDeInit (SPI_HandleTypeDef *hspi)
 Деинициализация тактирования и прерываний SPI.
HAL_StatusTypeDef SPI_Check_Init_Struct (SPI_SettingsTypeDef *sspi)
 Проверка корректности структуры инициализации SPI.
+

Detailed Description

+

Модуль для инициализации SPI.

+

Реализация функций для работы с SPI:

    +
  • Инициализация SPI и его линий CLK/MISO/MOSI
  • +
  • Настройка GPIO для SPI
  • +
  • Настройка NVIC и тактирования SPI
  • +
+ +

Definition in file general_spi.c.

+

Function Documentation

+ +

◆ SPI_GPIO_Init()

+ +
+
+ + + + + + + +
void SPI_GPIO_Init (SPI_SettingsTypeDef * sspi)
+
+ +

Инициализация GPIO для SPI.

+
Parameters
+ + +
sspiУказатель на структуру с настройками SPI.
+
+
+ +

Definition at line 58 of file general_spi.c.

+ +
+
+ +

◆ SPI_DMA_Init()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
void SPI_DMA_Init (SPI_HandleTypeDef * hspi,
DMA_HandleTypeDef * hdma_rx,
DMA_Stream_TypeDef * DMAChannel,
uint32_t DMA_CHANNEL_X )
+
+ +

Definition at line 89 of file general_spi.c.

+ +
+
+
+
+ +
+ + + + diff --git a/Doc/html/general__spi_8c.js b/Doc/html/general__spi_8c.js new file mode 100644 index 0000000..08a35c5 --- /dev/null +++ b/Doc/html/general__spi_8c.js @@ -0,0 +1,8 @@ +var general__spi_8c = +[ + [ "SPI_Base_Init", "group___m_y___l_i_b_s___s_p_i.html#ga0e177e3c57a8fcdc73b5602e72ec66ba", null ], + [ "SPI_GPIO_Init", "general__spi_8c.html#ae80d21e5cab86571709a2619442733b5", null ], + [ "SPI_MspInit", "group___m_y___l_i_b_s___s_p_i.html#gab9f13318daf02bc5b5f302ae392dccac", null ], + [ "SPI_MspDeInit", "group___m_y___l_i_b_s___s_p_i.html#gac279cc3eaa35541edfe330a1844a85e4", null ], + [ "SPI_Check_Init_Struct", "group___m_y___l_i_b_s___s_p_i.html#ga333dd251bc878931086d48aa932b1a5f", null ] +]; \ No newline at end of file diff --git a/Doc/html/general__spi_8c__incl.map b/Doc/html/general__spi_8c__incl.map new file mode 100644 index 0000000..8c160f6 --- /dev/null +++ b/Doc/html/general__spi_8c__incl.map @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/Doc/html/general__spi_8c__incl.md5 b/Doc/html/general__spi_8c__incl.md5 new file mode 100644 index 0000000..8342b9b --- /dev/null +++ b/Doc/html/general__spi_8c__incl.md5 @@ -0,0 +1 @@ +cda11d9ce070219b48b91b6cd8be6ad8 \ No newline at end of file diff --git a/Doc/html/general__spi_8c__incl.png b/Doc/html/general__spi_8c__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d0f47dc50a207929bcc407892a982c962fbfff GIT binary patch literal 8326 zcmcJVXH*kk*XSo0K&c{KdJzx-1*BIgQlttI5ReW^4^@zk3I?P~FM>#i&?WR{s1iC6 z2oORCDbl6B@%i7i-uHR#UH8+ylMgeK*=Nt0GiUGpJA2OuJsmZ2lG`Kz0FY~_t31W; zw*dg;ew_$^)OM(rkKYklKT%TwuKxaVS_%^ZfF00Kd1UxHb89xxi}^56Xm?enDS-?; z1@>=1@y>R$ zY?Em0N_~yYEk%`oZ8Vg)9;L>nrqw363_8}13aM>jF;CQ%l6GLj0pEOamvi;3O5h6v z%pMA|L}f}zUY;yoJZFwSJo+^i?vU-r6K5wADv%UOfW+N0iA3J1z8UqzmV+*(S4lu9 z{$0SCWYMkJ*;zt1(-wd4KEM6K-;EUsXZ!oF1=}*q-c1_4%o?k2Nw)YUT=5Fl;)KLK_?AH=xJH`N|0WWGvsaVqT`!sIw z3iJeKx_+iw!C_u?R%&h`<$(v$8Pxyt^k>_V-+J5X`UXpL*FuSch3FIQU^X{m@- zAynwBp&tak|F74ew*;G+oi*Q87;A9Msu(xoa56W#JP!)|!}SBBKQ;H_%cr{u7Jg;R zqLQWx(Ukn2brz0%DHaWRUVrk)Ieow9Pya;JL_p2GFvcck6`K+*m!HoN=-qq1r%D!q z0=0`YOrsFd@lsoiJj!#cO0>(5u@2HQD7UWAuS2U62OfNM zd=(nW3Vo85S+exjuugeE6P`O59Bb$t{zmTEhUcX90OjUOCa-M|c+`=TY4Uzosa`=5 z_7L$fTw8gkXz>uC@=$s0@1*kXjm9i+s9LNcmt&~3F+x5IdTIZdfiZ^pUF*wjG(9Ts zbVLcBBRai%`zL$C=f(7AYg|-8hEHW$gD$aDzM8}Nw(EVm0a2DOTP5T!_x`*cRz;8?LJ;4=spL}yM`w>qY1xYa7JjG@zl+M9R?t_=eB>4(paPzm^_Ijmx}agzSe+1Xp4XmED4)itK8u!Y8L zL|o5tlvag`+eYVn`0$}UdFu(3rN{5JmlsW5US5y@Jm{gAL}Q`FVaf;IZGSV1b7X13 z;%i4q$@T1@3Er%$)?n0J-HgK!Fl2R==hNtLP0N zX9eVIeX1&(soIYb@4d*@JwTV5gjxDRf`Ft(z@w1B58z3~B!ypGAxNd7k*vZ`bMN+UGn-wvwBiqcqP@yNC*dVG^YAV;g1p_+mAchcTDM^|%C?DM{yp~1 zfW+qKG?c-PF(yt<0_Fsq`-w*lm7B8@YpoW47uG)E3F)D}foToMK;acsBNw32~yGU!42 z?a3kKs>d`AhxL6q>#~QDYM40N8sq%-j)d z0~1mkSV5QwR78vtv@2$O1v%3Y*PAs%C?&FZw~fs{d)pp}l9+)XmCOl+4u~(@g4io4Zpzw@9ftR^WD*;HFu?Xy}Q=z@G`84YL9Is!hhIki8x6XKFOIksl zhK0Yb60C*bszX)x64qt)KQVOK0k;5uZHEukL7pX=^lqca4amF-LylNap&j6s$U!=kgn*bJaG+ck*={}-;? zhtb>I40~N3yWNe}TCHMsiy^1g}1mdm1{yseWAF8>_V(6(zP+J)YC9td22#FER5-!1qjbf{dJ2Y&)4fjYv zD$u~-(%mRJka2^FLfMV;Qk@{dQRLE9VOE@Lk_97-?iDk??t1^4zFuakudfnKNqfFQ z@W+sVapA8!V_?^gr69gklj$3@wP_l3fdbo~Zm7zDcMy$gq1-gYO%#*)BL4IWox5sk zkM9%hA_#&@SkH2S7`|kNNP9v$U)ZAMZy6^UI}d~aATOHS9Xq%VELCvOuvhF6Q;tEgxFS?F2U}3ADkd-x^5dKz7QTLxVQhH2C2Vu%kR!CkArfR z87*;6>TagqgYB>#&z4FAFs_`F<056Wk-hChx zh9p{4eL71|5Az8;D?ES8pZyM(ci}SHWpPOd7ZcoD10jhQaLL6@G>T6{YP45iUmEYj z2^{*Crfdn__j|9)r@E%}Xs?zSZO+(n&+^=(Jt-q_>s_K3UGc>S0Bwh;ghrw5QF8yA zA!DFsk{r2N{*<0WO1&BT9Ef-kRt3Zw#=g*K{8HNB)3`U(fel6oT)GjQ)OeNJYOUs` zP1g4AUkFN)x6|rnT1o4EYF^|F-`?K-gNOWAoLWD>{wWIgT9SyD@05<&znCaBQuuZ3 z(bU+OT(Tk3mcm5C^bMkCc<6R^cIJ@Dt-YeV)VOU%C3W>RQHSJyn!Z{Fh2F4DtQ-;A zTY_M>1p(+}iaAaC@n*mNqM8R^b1h|OmUIVnlj%R1`hVX~Rb-LWXt?d1AZCVN*-Kxyrs?d9#KV#2v161{&9-#Us zq-pdg7zZM47Q$@1#A6cmU`z)i{Z1!OH&2~eC(|tl#A8V3Bl`1S4Ce%k5Z9gi&+B_k zHGX^|*j3>2Yk*3^H+5ZXsm%WR^S%J&qy_xx=72>+iX>b9;x~Nn^-4!i%vEfCIx5l4 z@eQ~N^AX4gRK|kB_k;PLpN6vd1R@oaW&%(L&T%3R*Ma zVNQv3l(Hha5;edd1c#l)_|be`W@G&P0hu)#KT=AFpa>iKYPwX2hld(`R8jc`qP(|z zwj`;uW6pV|C z&SaUHt70K)!@5-Z#DqUD*jZY)Wqn=W;mElx0tfCcR0;3IH1ZiP`&?S&C>6o^?Q`Md6YHp9z{pEvOUn)C(1 ztjOP@{tb^m-U9H5zajft?X?rEJaN5Z(kcPLr`wZvI8TJYM){`8K4X5)?Krw&G`}vt zJ8Ouif$6R`K3qF4#|6>AWB@Y!gMZduts;yv{jON*9FBd;*E%OvmXeMKhpetsHMk`; znDU29ryV{Fzg2D*`TG7)n(q>&FR<>EXoc5<#g+TN?gD=!-L zWti{D;6y8lhVG^WMlI17a7{U{6S+9MJ|=3vfwK+@ZfdraPIQqp6pDzHR?DGor$8fD zXuG7*UffQ_{lAoj0W8;)z_iKqMkT^-L(Zg|5+SJzu8@Xxz~6X(Th|iTBwv)_H!f&* zm=sF3NdH$PC%`*D+fL*Z5R=-AQ^SMyr#3JZeQ~r8!3hcY9`SR#(sfyJ8|b~-Z`#?k z9VP^sr=1M0;#oa(EM3z?*sJUAE{&?L!dX2&vQm(I6o-pZ$1I7N%rO7FcouK}Gus1h z;@66yAFq{<;(Z|VZlr1cr8px^2R-=Y8Gjx<9_S!{AxW}*7Vv464|}4u`hk=c>h!69 z?HD*Gr`cK;Zy3U}SA(TqhJ)1W>xv>XZw=6RP%aQf;s^g8M1y=$9EjpLQE61oe!y~< zq|wJw`H0q;Xg5@apzuKG(<*)@Qd1;3-T5-b^OffHEtqze>7n{qe6&H*uX}5R?j&Xc z_OC8_aHp1A1X2&;zfS?(UIZEU@pP!=AW|$E?gTRX3L_oc+C!|%LcilqZD-T=N_a*J z+A)ujvB|E(Z`ZYWyeQT!O0l>3S|x{h6hyOl;dsy`&%E0NHYTuqwC{|umDc_FjBMi- zzi}Qc7*Ept_!$t5JTz&9_$XE}!;)ASTROe6E6W(hk7X!=INN9OOj>~-8DH5_=C~M+ z3)uBmE?EAB%bv}cU)XrkNM3b&7mz(5ZZ$GZ*r_0Q^8tPpP#itS7xoEoII2@;4~}oI z#apENH_!~gyxo}ER$%Uvfik3&G^7~ry$;ty(iuUI_XPdJ)@6fC@t8J6grUG9%EHBy z#bpItL&Sv=ovoQaU)%NSL=M9qU0fSWJ0HhHZ>mhd`b6>gOE!hfsZL&$_=uU_y zh?|92;YF*qLmFx+!tikgfjgs_8Ga-vGf)O@#+aK2-}>Fm=(hkJy!SHKjeUO6Soq%S zZb&fL-43JMteP|-6Q?~{J755h^30Vy`(uFhW3=p{lauDRNHc3tRruu{jQ0qjj^`l% zvGTpHO3x8)Itdl0>17aK@-;+>Xr4uHpnzBznJTY_aGIj^))A0i4FkIM#Ot)T7?nav#i`LZBoZ#(tr zOJ#@-W%QDw>Ngflh{N^H{mpibm{K$*ZM*$@hM?N1%{1;ny9jV4&^{sEAb3j;2>bRo z=BwZblPSYtv0m>72mqNuoP9zS+`(#^xAxD5KFz21K6YEALW8NanL~wu`yj;QQ0|cL zOUkLhkBfrH75mHzSbb1(Xgi}LA*%9;@^0oO?B`i=O}NVObeycdqqfDu8=Zk=lIcW46Css-x& z!vYlBTg;&AT2VQ^uUj<^ zLSM>b&yh^8{WAQ zSTQ5uLtE8|KoGO-Ff!vnj+}f=|B)t*iB@)Me-ebahfE+LB@8v1HbQKUT}(K;dUlI^F)-@1)Lua46}zpy%&nY zGZHA^>*jnFgmo`USfiMPpGd4ds>%3mM+m3O(Fdu4qfSki=0YaXKQYlMAZBrI^z03K ziw&2Q!f<1@KjF&Dky8k*qvQI1?+xs0NSRS+qfn#fkV%$u#_v~J$wxQP$o2JSe;z(z z3KVcvA;&-IsEbDxzYfvvHawb@_Pak=lCqtai|b@J-N%nT(mU=-(vYaqW4Zq$r$_5L zGvNo|!(&V9@tEb)vikazvsbK_s)u)bSbUjLl8a@*kucHO=v@RZQ8!!oO(4?)#oDF1sn?}FWT>P6dl*JJVT#3%*pcmh% zHJ;#I8{M;4#;DWIT#^5P;Y0(2qwU$KEE(VQm`74RThn&ZO14!91N;$fEKB}^B_7g# zUA3%ps~Eyj99tT82O48ie8vH>|06~JpLG4dR?v25&z6Oq?qNh9IXW|>vgcFXCdrCJRhc4<(Szjyv zNr9DE*4iZ5zAj1eE)rRn7D-@CY}x$NmPEGAp33JfHLSB8_gp7b26#x5W~&9R*GkH? z4nx*q6id&ULaz8lH1hHgqGhr)6m$|4H1$f&5d$T!ODZ7QWHPr1qmUm#F6~=-vAWm6 zi<}6gA~y*`6w|e94*f#`KGx@ErhR8-= z(HN83YyX>Ta5kHSUTBgrS_NbcwXxo^_G4@h2decH!7tt2Q`XIB$mk?=!1X#80}#uZ zLBTzlJU_k%03Ok^6D zEJcw$%8cXp@hBhOaAYeEv<;!g`-4#!~i-MV=0=X0=tR zFYuT~6v-IT{~sk7^XyFjl{AM+|3k+y;UbbZ$J=5o9Je;$h?qs$W``lxUsE+bUY``# zMuLOD>9O*Lm!A8g1vNMI)1)J6d6PzXwO4a2|1S>l|Em$JYZ2#c2+n`u<)$UI#}peA zV7YD{EX@fD1`^DQa?X~Agd&QGTH@P4(WZ4C zfepY8lQ?R9FIeEI|G*d{33YD*J_6MnIMl}h+aF%sBt%h6Ts^X3XSuHl6_q-yJTj{g z!lPqcLf}nM^Ld2KZrr*o4f6{Y8c{fwLSO6PAks;il(0|;-m|s2`KF@evfV32FA_WW zJyV$??c^dOpZDA664$lu?YWoIYCkt{k)*#g`Ht}ZVMY#2Hc4gP(O{&%(3wKqoY=qKY<(wXu0 z;)`SA@@a3HjQi0TD8%UV;_32Fn^1sU8XuB%lC8T=9J4DdDh%Wn^cq6WpK8qu`5Kev zU>`{M@(Ql1o4(9i*7~eqQPrb)_o3JQgXa^~TKq9cL4#rz{;S^}5lCcAIx^YHn)iNf z>vNCFq6sS~X{tQu@*G7JTfTsgO8Lr5Q<8|r1>749XF){wpF0#!rQYrN>zc1!xaA(_ z1<4m;>ZxSI-iIRv*(1LsKeumC>%b&v>9Qqt?)EZKP$ZG^i5bG}i`KnA4JhP7)_!X) z*$=SM(Z4Bs-Y``9Gd`2|^SJ?iTVp|e{jmxp5I1h1yZr7zcn=#+8M8g#b|r&PV96EK zy#4sM*aa=p0$^@OUe4pc4!HmKTL72&)>$v`o>AgD zP%y3vrDT@eJufq + + + + + + +MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Src/general_spi.c Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
MyLibs 1.0 +
+
Расширенные библиотеки для STM32
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
general_spi.c
+
+
+Go to the documentation of this file.
1/**
+
2**************************************************************************
+
3* @file general_spi.c
+
4* @brief Модуль для инициализации SPI.
+
5**************************************************************************
+
6Реализация функций для работы с SPI:
+
7 - Инициализация SPI и его линий CLK/MISO/MOSI
+
8 - Настройка GPIO для SPI
+
9 - Настройка NVIC и тактирования SPI
+
10**************************************************************************/
+
11#include "general_spi.h"
+
12#include "general_gpio.h"
+
13
+
14//-------------------------------------------------------------------
+
15//------------------------SPI INIT FUNCTIONS------------------------
+
16/**
+
17 * @brief Инициализация SPI с помощью структуры SPI_SettingsTypeDef.
+
18 * @param sspi Указатель на структуру с настройками SPI.
+
19 * @return HAL status.
+
20 * @details
+
21 * Инициализирует SPI и его GPIO.
+
22 * Настройка аналогична HAL_SPI_Init
+
23 * @code
+
24 * suart.hspi.Init...
+
25 * @endcode
+
26 * но дополнительно надо прописать пины CLK/MISO/MOSI @ref SPI_SettingsTypeDef
+
27 */
+
+
28HAL_StatusTypeDef SPI_Base_Init(SPI_SettingsTypeDef *sspi)
+
29{ // function takes setting structure for init
+
30
+
31 // check is settings are valid
+
32 if(SPI_Check_Init_Struct(sspi) != HAL_OK)
+
33 return HAL_ERROR;
+
34
+
35 SPI_MspInit(&sspi->hspi);
+
36
+
37 if (HAL_SPI_Init(&sspi->hspi) != HAL_OK)
+
38 {
+ +
40 return HAL_ERROR;
+
41 }
+
42
+
43 // init gpio from SPISettings structure
+
44 SPI_GPIO_Init(sspi);
+
45
+
46// // init dma from SPISettings structure if need
+
47// if (sspi->DMAChannel != 0)
+
48// SPI_DMA_Init(&sspi->hspi, sspi->hspi.hdmarx, sspi->DMAChannel, sspi->DMA_CHANNEL_X);
+
49
+
50 return HAL_OK;
+
51}
+
+
52
+
53
+
54/**
+
55 * @brief Инициализация GPIO для SPI.
+
56 * @param sspi Указатель на структуру с настройками SPI.
+
57 */
+
+ +
59{
+
60 GPIO_InitTypeDef GPIO_InitStruct = {0};
+
61 // GPIO INIT
+ + + +
65 // CLK PIN INIT
+
66 GPIO_InitStruct.Pin = sspi->CLK_PIN;
+
67 GPIO_InitStruct.Alternate = sspi->CLK_GPIO_AlternageFunc;
+
68 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+
69 GPIO_InitStruct.Pull = GPIO_NOPULL;
+
70 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+
71 HAL_GPIO_Init(sspi->CLK_GPIOx, &GPIO_InitStruct);
+
72 // MISO PIN INIT
+
73 GPIO_InitStruct.Pin = sspi->MISO_PIN;
+
74 GPIO_InitStruct.Alternate = sspi->MISO_GPIO_AlternageFunc;
+
75 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+
76 GPIO_InitStruct.Pull = GPIO_NOPULL;
+
77 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+
78 HAL_GPIO_Init(sspi->MISO_GPIOx, &GPIO_InitStruct);
+
79 // MOSI PIN INIT
+
80 GPIO_InitStruct.Pin = sspi->MOSI_PIN;
+
81 GPIO_InitStruct.Alternate = sspi->MOSI_GPIO_AlternageFunc;
+
82 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+
83 GPIO_InitStruct.Pull = GPIO_NOPULL;
+
84 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+
85 HAL_GPIO_Init(sspi->MOSI_GPIOx, &GPIO_InitStruct);
+
86}
+
+
87
+
88
+
89void SPI_DMA_Init(SPI_HandleTypeDef *hspi, DMA_HandleTypeDef *hdma_rx, DMA_Stream_TypeDef *DMAChannel, uint32_t DMA_CHANNEL_X)
+
90{ // function takes spi and dma handlers and dmachannel for spi
+
91// // for now only dma rx is supported, tx maybe later if needed
+
92// // calc defines on boot_project_setup.h
+
93
+
94// /* SPI3 DMA Init */
+
95// /* SPI3_RX Init */
+
96//
+
97// hdma_rx->Instance = DMAChannel;
+
98//#if defined(STM32F4xx) // dma channel choose for 407
+
99// hdma_rx->Init.Channel = DMA_CHANNEL_X;
+
100//#endif
+
101// hdma_rx->Init.Direction = DMA_PERIPH_TO_MEMORY;
+
102// hdma_rx->Init.PeriphInc = DMA_PINC_DISABLE;
+
103// hdma_rx->Init.MemInc = DMA_MINC_ENABLE;
+
104// hdma_rx->Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
+
105// hdma_rx->Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
+
106// hdma_rx->Init.Mode = DMA_CIRCULAR;
+
107// hdma_rx->Init.Priority = DMA_PRIORITY_LOW;
+
108// if (HAL_DMA_Init(hdma_rx) != HAL_OK)
+
109// {
+
110// MyLibs_Error_Handler();
+
111// }
+
112
+
113// __USER_LINKDMA(hspi,hdmarx,hdma_rx);
+
114//
+
115
+
116// // __USER_LINKDMA is need because __HAL_LINKDMA is written for global defined hdma_rx
+
117// // so you get error because hal uses . insted of ->
+
118}
+
119
+
120
+
121/**
+
122 * @brief Настройка тактирования и прерываний SPI.
+
123 * @param hspi Указатель на хендл SPI.
+
124 * @note Чтобы не генерировать функцию с иницилизацией неиспользуемых SPI,
+
125 дефайнами @ref SPI_INIT в @ref general_spi.h определяются используемые SPI.
+
126 */
+
+
127void SPI_MspInit(SPI_HandleTypeDef *hspi) // analog for hal function
+
128{
+
129 // rcc, dma and interrupt init for SPIs
+
130 // GPIO init was moved to own functions SPI_GPIO_Init
+
131 if(0);
+
132#ifdef USE_SPI1
+
133 else if(hspi->Instance==SPI1)
+
134 {
+
135
+
136// /* DMA2 clock enable */
+
137// __HAL_RCC_DMA2_CLK_ENABLE();
+
138// /* DMA interrupt init */
+
139// HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 0, 0);
+
140// HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);
+
141
+
142 /* SPI1 clock enable */
+
143 __HAL_RCC_SPI1_CLK_ENABLE();
+
144
+
145 /* SPI1 interrupt Init */
+
146 HAL_NVIC_SetPriority(SPI1_IRQn, 0, 0);
+
147 HAL_NVIC_EnableIRQ(SPI1_IRQn);
+
148 }
+
149#endif // USE_SPI1
+
150#ifdef USE_SPI2
+
151 else if(hspi->Instance==SPI2)
+
152 {
+
153// /* DMA1 clock enable */
+
154// __HAL_RCC_DMA1_CLK_ENABLE();
+
155// /* DMA interrupt init */
+
156// HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 0, 0);
+
157// HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn);
+
158
+
159 /* SPI2 clock enable */
+
160 __HAL_RCC_SPI2_CLK_ENABLE();
+
161
+
162 /* SPI2 interrupt Init */
+
163 HAL_NVIC_SetPriority(SPI2_IRQn, 0, 0);
+
164 HAL_NVIC_EnableIRQ(SPI2_IRQn);
+
165 }
+
166#endif // USE_SPI2
+
167#ifdef USE_SPI3
+
168 else if(hspi->Instance==SPI3)
+
169 {
+
170// /* DMA1 clock enable */
+
171// __HAL_RCC_DMA1_CLK_ENABLE();
+
172// /* DMA interrupt init */
+
173// HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 0, 0);
+
174// HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
+
175
+
176 /* SPI3 clock enable */
+
177 __HAL_RCC_SPI3_CLK_ENABLE();
+
178 /* SPI3 interrupt Init */
+
179 HAL_NVIC_SetPriority(SPI3_IRQn, 0, 0);
+
180 HAL_NVIC_EnableIRQ(SPI3_IRQn);
+
181 }
+
182#endif // USE_SPI3
+
183}
+
+
184
+
185/**
+
186 * @brief Деинициализация тактирования и прерываний SPI.
+
187 * @param hspi Указатель на хендл SPI.
+
188 * @note Чтобы не генерировать функцию с иницилизацией неиспользуемых SPI,
+
189 дефайнами @ref SPI_INIT в @ref general_spi.h определяются используемые SPI.
+
190 */
+
+
191void SPI_MspDeInit(SPI_HandleTypeDef *hspi) // analog for hal function
+
192{
+
193 // rcc, dma and interrupt init for SPIs
+
194 // GPIO init was moved to own functions SPI_GPIO_Init
+
195 if(0);
+
196#ifdef USE_SPI1
+
197 else if(hspi->Instance==SPI1)
+
198 {
+
199
+
200// /* DMA2 clock enable */
+
201// __HAL_RCC_DMA2_CLK_ENABLE();
+
202// /* DMA interrupt init */
+
203// HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 0, 0);
+
204// HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);
+
205
+
206 /* SPI1 clock reset */
+
207 __HAL_RCC_SPI1_FORCE_RESET();
+
208 __HAL_RCC_SPI1_RELEASE_RESET();
+
209 }
+
210#endif // USE_SPI1
+
211#ifdef USE_SPI2
+
212 else if(hspi->Instance==SPI2)
+
213 {
+
214// /* DMA1 clock enable */
+
215// __HAL_RCC_DMA1_CLK_ENABLE();
+
216// /* DMA interrupt init */
+
217// HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 0, 0);
+
218// HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn);
+
219
+
220 /* SPI2 clock reset */
+
221 __HAL_RCC_SPI2_FORCE_RESET();
+
222 __HAL_RCC_SPI2_RELEASE_RESET();
+
223 }
+
224#endif // USE_SPI2
+
225#ifdef USE_SPI3
+
226 else if(hspi->Instance==SPI3)
+
227 {
+
228// /* DMA1 clock enable */
+
229// __HAL_RCC_DMA1_CLK_ENABLE();
+
230// /* DMA interrupt init */
+
231// HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 0, 0);
+
232// HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
+
233
+
234 /* SPI3 clock reset */
+
235 __HAL_RCC_SPI3_FORCE_RESET();
+
236 __HAL_RCC_SPI3_RELEASE_RESET();
+
237 }
+
238#endif // USE_SPI3
+
239}
+
+
240
+
241/**
+
242 * @brief Проверка корректности структуры инициализации SPI.
+
243 * @param sspi Указатель на структуру с настройками SPI.
+
244 * @return HAL status.
+
245 */
+
+ +
247{
+
248 // check is settings are valid
+
249 if (!IS_SPI_ALL_INSTANCE(sspi->hspi.Instance))
+
250 return HAL_ERROR;
+
251
+
252 // check init settings
+
253 if (!IS_SPI_MODE(sspi->hspi.Init.Mode))
+
254 return HAL_ERROR;
+
255 if (!IS_SPI_DIRECTION(sspi->hspi.Init.Direction))
+
256 return HAL_ERROR;
+
257 if (!IS_SPI_DATASIZE(sspi->hspi.Init.DataSize))
+
258 return HAL_ERROR;
+
259 if (!IS_SPI_BAUDRATE_PRESCALER(sspi->hspi.Init.BaudRatePrescaler))
+
260 return HAL_ERROR;
+
261 if (!IS_SPI_CPOL(sspi->hspi.Init.CLKPolarity))
+
262 return HAL_ERROR;
+
263 if (!IS_SPI_CPHA(sspi->hspi.Init.CLKPhase))
+
264 return HAL_ERROR;
+
265 if (!IS_SPI_NSS(sspi->hspi.Init.NSS))
+
266 return HAL_ERROR;
+
267 if (!IS_SPI_FIRST_BIT(sspi->hspi.Init.FirstBit))
+
268 return HAL_ERROR;
+
269 if (!IS_SPI_CRC_CALCULATION(sspi->hspi.Init.CRCCalculation))
+
270 return HAL_ERROR;
+
271 if (!IS_SPI_CRC_POLYNOMIAL(sspi->hspi.Init.NSS) &&
+
272 (sspi->hspi.Init.CRCCalculation != SPI_CRCCALCULATION_DISABLE))
+
273 return HAL_ERROR;
+
274 if (!IS_SPI_TIMODE(sspi->hspi.Init.TIMode))
+
275 return HAL_ERROR;
+
276
+
277 // check gpio
+
278 if (!IS_GPIO_ALL_INSTANCE(sspi->CLK_GPIOx) || !IS_GPIO_ALL_INSTANCE(sspi->MISO_GPIOx) || !IS_GPIO_ALL_INSTANCE(sspi->MOSI_GPIOx))
+
279 return HAL_ERROR;
+
280 if (!IS_GPIO_PIN(sspi->CLK_PIN) && !IS_GPIO_PIN(sspi->MISO_PIN) && !IS_GPIO_PIN(sspi->MOSI_PIN)) // if both pins arent set up
+
281 return HAL_ERROR;
+
282
+
283 return HAL_OK;
+
284}
+
+
Заголовочный файл для модуля инициализации портов и работы с ними.
+
void SPI_GPIO_Init(SPI_SettingsTypeDef *sspi)
Инициализация GPIO для SPI.
Definition general_spi.c:58
+
Заголовочный файл для модуля инициализации SPI.
+
#define MyLibs_Error_Handler(params)
Error_Handler который будет вызыватся в библиотеке
Definition mylibs_defs.h:31
+
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.
+
HAL_StatusTypeDef GPIO_Clock_Enable(GPIO_TypeDef *GPIOx)
Включить тактирование порта GPIO.
+
Структура настроек SPI.
+
GPIO_TypeDef * MOSI_GPIOx
Порт MOSI.
+
GPIO_TypeDef * MISO_GPIOx
Порт MISO.
+
uint32_t MISO_PIN
Пин MISO.
+
uint32_t CLK_PIN
Пин CLK.
+
uint32_t CLK_GPIO_AlternageFunc
Альтернативная функция для CLK.
+
GPIO_TypeDef * CLK_GPIOx
Порт CLK.
+
uint32_t MOSI_PIN
Пин MOSI.
+
SPI_HandleTypeDef hspi
HAL handle SPI.
+
uint32_t MISO_GPIO_AlternageFunc
Альтернативная функция для MISO.
+
uint32_t MOSI_GPIO_AlternageFunc
Альтернативная функция для MOSI.
+
+
+
+ + + + diff --git a/Doc/html/general__spi_8h.html b/Doc/html/general__spi_8h.html new file mode 100644 index 0000000..ce77bd2 --- /dev/null +++ b/Doc/html/general__spi_8h.html @@ -0,0 +1,185 @@ + + + + + + + +MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Inc/general_spi.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
MyLibs 1.0 +
+
Расширенные библиотеки для STM32
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
general_spi.h File Reference
+
+
+ +

Заголовочный файл для модуля инициализации SPI. +More...

+
#include "mylibs_defs.h"
+
Include dependency graph for general_spi.h:
+
+
+ +
This graph shows which files directly or indirectly include this file:
+
+
+ +
+

Go to the source code of this file.

+ + + + +

+Classes

struct  SPI_SettingsTypeDef
 Структура настроек SPI. More...
+ + + + + + + + + +

+Macros

#define HAL_SPI_MODULE_ENABLED
 Включение HAL SPI.
#define USE_SPI1
 Включить SPI1 в SPI_MspInit.
#define USE_SPI2
 Включить SPI2 в SPI_MspInit.
#define USE_SPI3
 Включить SPI3 в SPI_MspInit.
+ + + + + + + + + +

+Functions

HAL_StatusTypeDef SPI_Base_Init (SPI_SettingsTypeDef *sspi)
 Инициализация SPI с помощью структуры SPI_SettingsTypeDef.
HAL_StatusTypeDef SPI_Check_Init_Struct (SPI_SettingsTypeDef *sspi)
 Проверка корректности структуры инициализации SPI.
void SPI_MspInit (SPI_HandleTypeDef *hspi)
 Настройка тактирования и прерываний SPI.
void SPI_MspDeInit (SPI_HandleTypeDef *hspi)
 Деинициализация тактирования и прерываний SPI.
+

Detailed Description

+

Заголовочный файл для модуля инициализации SPI.

+ +

Definition in file general_spi.h.

+
+
+ +
+ + + + diff --git a/Doc/html/general__spi_8h.js b/Doc/html/general__spi_8h.js new file mode 100644 index 0000000..089149a --- /dev/null +++ b/Doc/html/general__spi_8h.js @@ -0,0 +1,11 @@ +var general__spi_8h = +[ + [ "HAL_SPI_MODULE_ENABLED", "group___s_p_i___i_n_i_t.html#ga8ad4712bf4add56892d057778e826e0c", null ], + [ "USE_SPI1", "group___s_p_i___i_n_i_t.html#ga2fe0c8aeb2c61679f32836fef479eedf", null ], + [ "USE_SPI2", "group___s_p_i___i_n_i_t.html#ga53687cddb8e39e76a79b8ffaa152fb2b", null ], + [ "USE_SPI3", "group___s_p_i___i_n_i_t.html#ga5fdd6e5934a8005ef05b80f6d95883dc", null ], + [ "SPI_Base_Init", "group___m_y___l_i_b_s___s_p_i.html#ga0e177e3c57a8fcdc73b5602e72ec66ba", null ], + [ "SPI_Check_Init_Struct", "group___m_y___l_i_b_s___s_p_i.html#ga333dd251bc878931086d48aa932b1a5f", null ], + [ "SPI_MspInit", "group___m_y___l_i_b_s___s_p_i.html#gab9f13318daf02bc5b5f302ae392dccac", null ], + [ "SPI_MspDeInit", "group___m_y___l_i_b_s___s_p_i.html#gac279cc3eaa35541edfe330a1844a85e4", null ] +]; \ No newline at end of file diff --git a/Doc/html/general__spi_8h__dep__incl.map b/Doc/html/general__spi_8h__dep__incl.map new file mode 100644 index 0000000..2b0811b --- /dev/null +++ b/Doc/html/general__spi_8h__dep__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/Doc/html/general__spi_8h__dep__incl.md5 b/Doc/html/general__spi_8h__dep__incl.md5 new file mode 100644 index 0000000..81e4d30 --- /dev/null +++ b/Doc/html/general__spi_8h__dep__incl.md5 @@ -0,0 +1 @@ +4329b58f85cc157f873e0efea5ebf705 \ No newline at end of file diff --git a/Doc/html/general__spi_8h__dep__incl.png b/Doc/html/general__spi_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..8bbc97a094a774a68a3a9db6150336229a9b4dac GIT binary patch literal 2903 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 + + + + + + + + diff --git a/Doc/html/general__spi_8h__incl.md5 b/Doc/html/general__spi_8h__incl.md5 new file mode 100644 index 0000000..1d36217 --- /dev/null +++ b/Doc/html/general__spi_8h__incl.md5 @@ -0,0 +1 @@ +e0af89a349938fa4f2a316fa222eee4c \ No newline at end of file diff --git a/Doc/html/general__spi_8h__incl.png b/Doc/html/general__spi_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..7deb629ba416e108d0a6fa983b57d119d8c151a9 GIT binary patch literal 4015 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 literal 0 HcmV?d00001 diff --git a/Doc/html/general__spi_8h_source.html b/Doc/html/general__spi_8h_source.html new file mode 100644 index 0000000..862f814 --- /dev/null +++ b/Doc/html/general__spi_8h_source.html @@ -0,0 +1,305 @@ + + + + + + + +MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Inc/general_spi.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
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.
+
+
+
+ + + + diff --git a/Doc/html/general__uart_8c.html b/Doc/html/general__uart_8c.html new file mode 100644 index 0000000..fed8a13 --- /dev/null +++ b/Doc/html/general__uart_8c.html @@ -0,0 +1,257 @@ + + + + + + + +MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Src/general_uart.c File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
MyLibs 1.0 +
+
Расширенные библиотеки для STM32
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
general_uart.c File Reference
+
+
+ +

Модуль для инициализации UART. +More...

+
#include "general_uart.h"
+#include "general_gpio.h"
+
Include dependency graph for general_uart.c:
+
+
+ +
+

Go to the source code of this file.

+ + + + + + + + + + + + + + +

+Functions

HAL_StatusTypeDef UART_Base_Init (UART_SettingsTypeDef *suart)
 Инициализация UART с помощью структуры UART_SettingsTypeDef.
void UART_GPIO_Init (GPIO_TypeDef *GPIOx, uint16_t GPIO_PIN_RX, uint16_t GPIO_PIN_TX)
 Инициализация GPIO для UART.
void UART_DMA_Init (UART_HandleTypeDef *huart, DMA_HandleTypeDef *hdma_rx, DMA_Stream_TypeDef *DMAChannel, uint32_t DMA_CHANNEL_X)
 Инициализация DMA для UART.
void UART_MspInit (UART_HandleTypeDef *huart)
 Настройка тактирования и прерываний UART.
void UART_MspDeInit (UART_HandleTypeDef *huart)
 Деинициализация тактирования и прерываний UART.
HAL_StatusTypeDef UART_Check_Init_Struct (UART_SettingsTypeDef *suart)
 Проверка корректности структуры инициализации UART.
+

Detailed Description

+

Модуль для инициализации UART.

+

Реализация функций для работы с UART:

    +
  • Инициализация UART и его линий RX/TX
  • +
  • Настройка DMA для UART
  • +
  • Настройка GPIO для UART
  • +
  • Настройка NVIC и тактирования UART
  • +
+ +

Definition in file general_uart.c.

+

Function Documentation

+ +

◆ UART_GPIO_Init()

+ +
+
+ + + + + + + + + + + + + + + + +
void UART_GPIO_Init (GPIO_TypeDef * GPIOx,
uint16_t GPIO_PIN_RX,
uint16_t GPIO_PIN_TX )
+
+ +

Инициализация GPIO для UART.

+
Parameters
+ + + + +
GPIOxПорт для настройки.
GPIO_PIN_RXПин для приема.
GPIO_PIN_TXПин для передачи.
+
+
+ +

Definition at line 69 of file general_uart.c.

+ +
+
+ +

◆ UART_DMA_Init()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
void UART_DMA_Init (UART_HandleTypeDef * huart,
DMA_HandleTypeDef * hdma_rx,
DMA_Stream_TypeDef * DMAChannel,
uint32_t DMA_CHANNEL_X )
+
+ +

Инициализация DMA для UART.

+
Parameters
+ + + + + +
huartУказатель на хендл UART.
hdma_rxУказатель на хендл DMA для линии приема UART.
DMAChannelУказатель на канал DMA/поток DMA в STM32F407.
DMA_CHANNEL_XКанал DMA.
+
+
+ +

Definition at line 109 of file general_uart.c.

+ +
+
+
+
+ +
+ + + + diff --git a/Doc/html/general__uart_8c.js b/Doc/html/general__uart_8c.js new file mode 100644 index 0000000..9425ccf --- /dev/null +++ b/Doc/html/general__uart_8c.js @@ -0,0 +1,9 @@ +var general__uart_8c = +[ + [ "UART_Base_Init", "group___m_y___l_i_b_s___u_a_r_t.html#gab9f07396b778505c934143e89953e154", null ], + [ "UART_GPIO_Init", "general__uart_8c.html#a3abae05bbde5f3b402bf18ca13dc6a0b", null ], + [ "UART_DMA_Init", "general__uart_8c.html#ad82d0cbd19151675135fd75dad315d05", null ], + [ "UART_MspInit", "group___m_y___l_i_b_s___u_a_r_t.html#gab9313fd2f9fc6873ca6bfbc5b96edbbb", null ], + [ "UART_MspDeInit", "group___m_y___l_i_b_s___u_a_r_t.html#ga93ed6ceef4e3b5e7885786125cce93bc", null ], + [ "UART_Check_Init_Struct", "group___m_y___l_i_b_s___u_a_r_t.html#ga2a22e46ecb9e04b2ce197a0e9c09044a", null ] +]; \ No newline at end of file diff --git a/Doc/html/general__uart_8c__incl.map b/Doc/html/general__uart_8c__incl.map new file mode 100644 index 0000000..b1e5c6b --- /dev/null +++ b/Doc/html/general__uart_8c__incl.map @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/Doc/html/general__uart_8c__incl.md5 b/Doc/html/general__uart_8c__incl.md5 new file mode 100644 index 0000000..c4d1007 --- /dev/null +++ b/Doc/html/general__uart_8c__incl.md5 @@ -0,0 +1 @@ +3ff3cdf25ec66354d1baab1e80991e75 \ No newline at end of file diff --git a/Doc/html/general__uart_8c__incl.png b/Doc/html/general__uart_8c__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..cc1dcf1e376fe960887bec2eb72c0c9e35d5ac9a GIT binary patch literal 7161 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 + + + + + + +MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Src/general_uart.c Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
MyLibs 1.0 +
+
Расширенные библиотеки для STM32
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
general_uart.c
+
+
+Go to the documentation of this file.
1/**
+
2**************************************************************************
+
3* @file general_uart.c
+
4* @brief Модуль для инициализации UART.
+
5**************************************************************************
+
6Реализация функций для работы с UART:
+
7 - Инициализация UART и его линий RX/TX
+
8 - Настройка DMA для UART
+
9 - Настройка GPIO для UART
+
10 - Настройка NVIC и тактирования UART
+
11**************************************************************************/
+
12#include "general_uart.h"
+
13#include "general_gpio.h"
+
14
+
15//-------------------------------------------------------------------
+
16//------------------------UART INIT FUNCTIONS------------------------
+
17/**
+
18 * @brief Инициализация UART с помощью структуры UART_SettingsTypeDef.
+
19 * @param suart Указатель на структуру с настройками UART.
+
20 * @return HAL status.
+
21 * @details
+
22 * Инициализирует UART и его GPIO и при необходимости DMA.
+
23 * Настройка аналогична HAL_UART_Init
+
24 * @code
+
25 * suart.huart.Init...
+
26 * @endcode
+
27 * но дополнительно надо прописать пины RX/TX @ref UART_SettingsTypeDef
+
28 * @code
+
29 * suart->GPIOx, suart->GPIO_PIN_RX, suart->GPIO_PIN_TX
+
30 * @endcode
+
31 */
+
+
32HAL_StatusTypeDef UART_Base_Init(UART_SettingsTypeDef *suart)
+
33{ // function takes setting structure for init
+
34
+
35 // check is settings are valid
+
36 if(UART_Check_Init_Struct(suart) != HAL_OK)
+
37 return HAL_ERROR;
+
38
+
39 suart->huart.Init.Mode = UART_MODE_TX_RX;
+
40
+
41 UART_MspInit(&suart->huart);
+
42
+
43
+
44 if (HAL_UART_Init(&suart->huart) != HAL_OK)
+
45 {
+ +
47 return HAL_ERROR;
+
48 }
+
49
+
50 // init gpio from UARTSettings structure
+
51 UART_GPIO_Init(suart->GPIOx, suart->GPIO_PIN_RX, suart->GPIO_PIN_TX);
+
52
+
53 __HAL_UART_ENABLE_IT(&suart->huart, UART_IT_IDLE);
+
54 // init dma from UARTSettings structure if need
+
55 if (suart->DMAChannel != 0)
+
56 UART_DMA_Init(&suart->huart, suart->huart.hdmarx, suart->DMAChannel, suart->DMA_CHANNEL_X);
+
57
+
58
+
59 return HAL_OK;
+
60}
+
+
61
+
62
+
63/**
+
64 * @brief Инициализация GPIO для UART.
+
65 * @param GPIOx Порт для настройки.
+
66 * @param GPIO_PIN_RX Пин для приема.
+
67 * @param GPIO_PIN_TX Пин для передачи.
+
68 */
+
+
69void UART_GPIO_Init(GPIO_TypeDef *GPIOx, uint16_t GPIO_PIN_RX, uint16_t GPIO_PIN_TX)
+
70{ // function takes port and pins (for rx and tx)
+
71 GPIO_InitTypeDef GPIO_InitStruct = {0};
+
72
+
73 // choose port for enable clock
+
74 GPIO_Clock_Enable(GPIOx);
+
75
+
76 //USART3 GPIO Configuration
+
77 //GPIO_PIN_TX ------> USART_TX
+
78 //GPIO_PIN_RX ------> USART_RX
+
79
+
80#if defined(STM32F4xx) // gpio init for 407
+
81 GPIO_InitStruct.Pin = GPIO_PIN_TX|GPIO_PIN_RX;
+
82 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+
83 GPIO_InitStruct.Pull = GPIO_NOPULL;
+
84 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+
85 GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
+
86 HAL_GPIO_Init(GPIOx, &GPIO_InitStruct);
+
87#elif defined(STM32F1xx) // gpio init for atm403/stm103
+
88 //GPIO_PIN_TX ------> USART_TX
+
89 GPIO_InitStruct.Pin = GPIO_PIN_TX;
+
90 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+
91 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
+
92 HAL_GPIO_Init(GPIOx, &GPIO_InitStruct);
+
93
+
94// GPIO_PIN_RX ------> USART_RX
+
95 GPIO_InitStruct.Pin = GPIO_PIN_RX;
+
96 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+
97 GPIO_InitStruct.Pull = GPIO_NOPULL;
+
98 HAL_GPIO_Init(GPIOx, &GPIO_InitStruct);
+
99#endif
+
100}
+
+
101
+
102/**
+
103 * @brief Инициализация DMA для UART.
+
104 * @param huart Указатель на хендл UART.
+
105 * @param hdma_rx Указатель на хендл DMA для линии приема UART.
+
106 * @param DMAChannel Указатель на канал DMA/поток DMA в STM32F407.
+
107 * @param DMA_CHANNEL_X Канал DMA.
+
108 */
+
+
109void UART_DMA_Init(UART_HandleTypeDef *huart, DMA_HandleTypeDef *hdma_rx, DMA_Stream_TypeDef *DMAChannel, uint32_t DMA_CHANNEL_X)
+
110{ // function takes uart and dma handlers and dmachannel for uart
+
111 // for now only dma rx is supported, tx maybe later if needed
+
112 // calc defines on boot_project_setup.h
+
113
+
114 /* USART3 DMA Init */
+
115 /* USART3_RX Init */
+
116
+
117 hdma_rx->Instance = DMAChannel;
+
118#if defined(STM32F4xx) // dma channel choose for 407
+
119 hdma_rx->Init.Channel = DMA_CHANNEL_X;
+
120#endif
+
121 hdma_rx->Init.Direction = DMA_PERIPH_TO_MEMORY;
+
122 hdma_rx->Init.PeriphInc = DMA_PINC_DISABLE;
+
123 hdma_rx->Init.MemInc = DMA_MINC_ENABLE;
+
124 hdma_rx->Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
+
125 hdma_rx->Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
+
126 hdma_rx->Init.Mode = DMA_CIRCULAR;
+
127 hdma_rx->Init.Priority = DMA_PRIORITY_LOW;
+
128 if (HAL_DMA_Init(hdma_rx) != HAL_OK)
+
129 {
+ +
131 }
+
132
+
133 __USER_LINKDMA(huart,hdmarx,hdma_rx);
+
134
+
135
+
136 // __USER_LINKDMA is need because __HAL_LINKDMA is written for global defined hdma_rx
+
137 // so you get error because hal uses . insted of ->
+
138}
+
+
139
+
140/**
+
141 * @brief Настройка тактирования и прерываний UART.
+
142 * @param huart Указатель на хендл UART.
+
143 * @note Чтобы не генерировать функцию с иницилизацией неиспользуемых UART,
+
144 дефайнами @ref UART_INIT в @ref general_uart.h определяются используемые UART.
+
145 */
+
+
146void UART_MspInit(UART_HandleTypeDef *huart) // analog for hal function
+
147{
+
148// __RCC_DMA_UART_CLK_ENABLE();
+
149// /* DMA interrupt init */
+
150// /* DMA1_Stream1_IRQn interrupt configuration */
+
151// HAL_NVIC_SetPriority(DMA_UART_IRQn, 0, 0);
+
152// HAL_NVIC_EnableIRQ(DMA_UART_IRQn);
+
153
+
154 // rcc, dma and interrupt init for USARTs
+
155 // GPIO init was moved to own functions UART_GPIO_Init
+
156 if(0);
+
157#ifdef USE_USART1
+
158 else if(huart->Instance==USART1)
+
159 {
+
160
+
161 /* DMA2 clock enable */
+
162 __HAL_RCC_DMA2_CLK_ENABLE();
+
163 /* DMA interrupt init */
+
164 HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 0, 0);
+
165 HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);
+
166
+
167 /* USART1 clock enable */
+
168 __HAL_RCC_USART1_CLK_ENABLE();
+
169
+
170 /* USART1 interrupt Init */
+
171 HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
+
172 HAL_NVIC_EnableIRQ(USART1_IRQn);
+
173 }
+
174#endif // USE_USART1
+
175#ifdef USE_USART2
+
176 else if(huart->Instance==USART2)
+
177 {
+
178 /* DMA1 clock enable */
+
179 __HAL_RCC_DMA1_CLK_ENABLE();
+
180 /* DMA interrupt init */
+
181 HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 0, 0);
+
182 HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn);
+
183
+
184 /* USART2 clock enable */
+
185 __HAL_RCC_USART2_CLK_ENABLE();
+
186
+
187 /* USART2 interrupt Init */
+
188 HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
+
189 HAL_NVIC_EnableIRQ(USART2_IRQn);
+
190 }
+
191#endif // USE_USART2
+
192#ifdef USE_USART3
+
193 else if(huart->Instance==USART3)
+
194 {
+
195 /* DMA1 clock enable */
+
196 __HAL_RCC_DMA1_CLK_ENABLE();
+
197 /* DMA interrupt init */
+
198 HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 0, 0);
+
199 HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
+
200
+
201 /* USART3 clock enable */
+
202 __HAL_RCC_USART3_CLK_ENABLE();
+
203 /* USART3 interrupt Init */
+
204 HAL_NVIC_SetPriority(USART3_IRQn, 0, 0);
+
205 HAL_NVIC_EnableIRQ(USART3_IRQn);
+
206 }
+
207#endif // USE_USART3
+
208#ifdef USE_UART4
+
209 else if(huart->Instance==UART4)
+
210 {
+
211 /* DMA1 clock enable */
+
212 __HAL_RCC_DMA1_CLK_ENABLE();
+
213 /* DMA interrupt init */
+
214 HAL_NVIC_SetPriority(DMA1_Stream2_IRQn, 0, 0);
+
215 HAL_NVIC_EnableIRQ(DMA1_Stream2_IRQn);
+
216
+
217 /* UART4 clock enable */
+
218 __HAL_RCC_UART4_CLK_ENABLE();
+
219
+
220 /* UART4 interrupt Init */
+
221 HAL_NVIC_SetPriority(UART4_IRQn, 0, 0);
+
222 HAL_NVIC_EnableIRQ(UART4_IRQn);
+
223 }
+
224#endif // USE_UART4
+
225#ifdef USE_UART5
+
226 else if(huart->Instance==UART5)
+
227 {
+
228 /* DMA1 clock enable */
+
229 __HAL_RCC_DMA1_CLK_ENABLE();
+
230 /* DMA interrupt init */
+
231 HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 0, 0);
+
232 HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);
+
233
+
234 /* UART5 clock enable */
+
235 __HAL_RCC_DMA1_CLK_ENABLE();
+
236
+
237 /* UART5 interrupt Init */
+
238 HAL_NVIC_SetPriority(UART5_IRQn, 0, 0);
+
239 HAL_NVIC_EnableIRQ(UART5_IRQn);
+
240 }
+
241#endif // USE_UART5
+
242#ifdef USE_USART6
+
243 else if(huart->Instance==USART6)
+
244 {
+
245 /* DMA2 clock enable */
+
246 __HAL_RCC_DMA2_CLK_ENABLE();
+
247 /* DMA interrupt init */
+
248 HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 0, 0);
+
249 HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn);
+
250
+
251 /* USART6 clock enable */
+
252 __HAL_RCC_USART6_CLK_ENABLE();
+
253
+
254 /* USART6 interrupt Init */
+
255 HAL_NVIC_SetPriority(USART6_IRQn, 0, 0);
+
256 HAL_NVIC_EnableIRQ(USART6_IRQn);
+
257 }
+
258#endif // USE_USART6
+
259}
+
+
260
+
261/**
+
262 * @brief Деинициализация тактирования и прерываний UART.
+
263 * @param huart Указатель на хендл UART.
+
264 * @note Чтобы не генерировать функцию с деиницилизацией неиспользуемых UART,
+
265 дефайнами @ref UART_INIT в @ref general_uart.h определяются используемые UART.
+
266 */
+
+
267void UART_MspDeInit(UART_HandleTypeDef *huart) // analog for hal function
+
268{
+
269 // rcc, dma and interrupt init for USARTs
+
270 // GPIO init was moved to own functions UART_GPIO_Init
+
271 if(0);
+
272#ifdef USE_USART1
+
273 else if(huart->Instance==USART1)
+
274 {
+
275
+
276// /* DMA2 clock enable */
+
277// __HAL_RCC_DMA2_CLK_ENABLE();
+
278// /* DMA interrupt init */
+
279// HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 0, 0);
+
280// HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);
+
281
+
282 /* USART1 clock reset */
+
283 __HAL_RCC_USART1_FORCE_RESET();
+
284 __HAL_RCC_USART1_RELEASE_RESET();
+
285 }
+
286#endif // USE_USART1
+
287#ifdef USE_USART2
+
288 else if(huart->Instance==USART2)
+
289 {
+
290// /* DMA1 clock enable */
+
291// __HAL_RCC_DMA1_CLK_ENABLE();
+
292// /* DMA interrupt init */
+
293// HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 0, 0);
+
294// HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn);
+
295
+
296 /* USART2 clock reset */
+
297 __HAL_RCC_USART2_FORCE_RESET();
+
298 __HAL_RCC_USART2_RELEASE_RESET();
+
299 }
+
300#endif // USE_USART2
+
301#ifdef USE_USART3
+
302 else if(huart->Instance==USART3)
+
303 {
+
304// /* DMA1 clock enable */
+
305// __HAL_RCC_DMA1_CLK_ENABLE();
+
306// /* DMA interrupt init */
+
307// HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 0, 0);
+
308// HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
+
309
+
310 /* USART3 clock reset */
+
311 __HAL_RCC_USART3_FORCE_RESET();
+
312 __HAL_RCC_USART3_RELEASE_RESET();
+
313 }
+
314#endif // USE_USART3
+
315#ifdef USE_UART4
+
316 else if(huart->Instance==UART4)
+
317 {
+
318// /* DMA1 clock enable */
+
319// __HAL_RCC_DMA1_CLK_ENABLE();
+
320// /* DMA interrupt init */
+
321// HAL_NVIC_SetPriority(DMA1_Stream2_IRQn, 0, 0);
+
322// HAL_NVIC_EnableIRQ(DMA1_Stream2_IRQn);
+
323
+
324 /* UART4 clock reset */
+
325 __HAL_RCC_UART4_FORCE_RESET();
+
326 __HAL_RCC_UART4_RELEASE_RESET();
+
327 }
+
328#endif // USE_UART4
+
329#ifdef USE_UART5
+
330 else if(huart->Instance==UART5)
+
331 {
+
332// /* DMA1 clock enable */
+
333// __HAL_RCC_DMA1_CLK_ENABLE();
+
334// /* DMA interrupt init */
+
335// HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 0, 0);
+
336// HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);
+
337
+
338 /* UART5 clock reset */
+
339 __HAL_RCC_UART5_FORCE_RESET();
+
340 __HAL_RCC_UART5_RELEASE_RESET();
+
341 }
+
342#endif // USE_UART5
+
343#ifdef USE_USART6
+
344 else if(huart->Instance==USART6)
+
345 {
+
346// /* DMA2 clock enable */
+
347// __HAL_RCC_DMA2_CLK_ENABLE();
+
348// /* DMA interrupt init */
+
349// HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 0, 0);
+
350// HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn);
+
351
+
352 /* USART6 clock reset */
+
353 __HAL_RCC_USART6_FORCE_RESET();
+
354 __HAL_RCC_USART6_RELEASE_RESET();
+
355 }
+
356#endif // USE_USART6
+
357}
+
+
358
+
359/**
+
360 * @brief Проверка корректности структуры инициализации UART.
+
361 * @param suart Указатель на структуру с настройками UART.
+
362 * @return HAL status.
+
363 */
+
+ +
365{
+
366 // check is settings are valid
+
367 if (!IS_UART_INSTANCE(suart->huart.Instance))
+
368 return HAL_ERROR;
+
369
+
370 if (!IS_UART_BAUDRATE(suart->huart.Init.BaudRate) || (suart->huart.Init.BaudRate == NULL))
+
371 return HAL_ERROR;
+
372
+
373 if (!IS_GPIO_ALL_INSTANCE(suart->GPIOx))
+
374 return HAL_ERROR;
+
375
+
376 if (!IS_GPIO_PIN(suart->GPIO_PIN_RX) && !IS_GPIO_PIN(suart->GPIO_PIN_TX)) // if both pins arent set up
+
377 return HAL_ERROR;
+
378
+
379 return HAL_OK;
+
380}
+
+
381
+
382//------------------------UART INIT FUNCTIONS------------------------
+
383//-------------------------------------------------------------------
+
Заголовочный файл для модуля инициализации портов и работы с ними.
+
void UART_GPIO_Init(GPIO_TypeDef *GPIOx, uint16_t GPIO_PIN_RX, uint16_t GPIO_PIN_TX)
Инициализация GPIO для UART.
+
void UART_DMA_Init(UART_HandleTypeDef *huart, DMA_HandleTypeDef *hdma_rx, DMA_Stream_TypeDef *DMAChannel, uint32_t DMA_CHANNEL_X)
Инициализация DMA для UART.
+
Заголовочный файл для модуля инициализации UART.
+
#define MyLibs_Error_Handler(params)
Error_Handler который будет вызыватся в библиотеке
Definition mylibs_defs.h:31
+
HAL_StatusTypeDef UART_Check_Init_Struct(UART_SettingsTypeDef *suart)
Проверка корректности структуры инициализации UART.
+
void UART_MspDeInit(UART_HandleTypeDef *huart)
Деинициализация тактирования и прерываний UART.
+
void UART_MspInit(UART_HandleTypeDef *huart)
Настройка тактирования и прерываний UART.
+
HAL_StatusTypeDef UART_Base_Init(UART_SettingsTypeDef *suart)
Инициализация UART с помощью структуры UART_SettingsTypeDef.
+
HAL_StatusTypeDef GPIO_Clock_Enable(GPIO_TypeDef *GPIOx)
Включить тактирование порта GPIO.
+
Структура настроек UART.
+
uint32_t DMA_CHANNEL_X
Номер канала DMA (0 если не нужен)
+
DMA_Stream_TypeDef * DMAChannel
Канал DMA (NULL если не нужен)
+
uint16_t GPIO_PIN_RX
Пин приема
+
uint16_t GPIO_PIN_TX
Пин передачи
+
UART_HandleTypeDef huart
HAL handle UART.
+
GPIO_TypeDef * GPIOx
Порт для UART.
+
+
+
+ + + + diff --git a/Doc/html/general__uart_8h.html b/Doc/html/general__uart_8h.html new file mode 100644 index 0000000..90515b1 --- /dev/null +++ b/Doc/html/general__uart_8h.html @@ -0,0 +1,191 @@ + + + + + + + +MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Inc/general_uart.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
MyLibs 1.0 +
+
Расширенные библиотеки для STM32
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
general_uart.h File Reference
+
+
+ +

Заголовочный файл для модуля инициализации UART. +More...

+
#include "mylibs_defs.h"
+
Include dependency graph for general_uart.h:
+
+
+ +
This graph shows which files directly or indirectly include this file:
+
+
+ +
+

Go to the source code of this file.

+ + + + +

+Classes

struct  UART_SettingsTypeDef
 Структура настроек UART. More...
+ + + + + + + + + + + + + + + +

+Macros

#define HAL_UART_MODULE_ENABLED
 Включение HAL UART.
#define USE_USART1
 Включить USART1 в UART_MspInit.
#define USE_USART2
 Включить USART2 в UART_MspInit.
#define USE_USART3
 Включить USART3 в UART_MspInit.
#define USE_UART4
 Включить UART4 в UART_MspInit.
#define USE_UART5
 Включить UART5 в UART_MspInit.
#define USE_USART6
 Включить USART6 в UART_MspInit.
+ + + + + + + + + +

+Functions

HAL_StatusTypeDef UART_Base_Init (UART_SettingsTypeDef *suart)
 Инициализация UART с помощью структуры UART_SettingsTypeDef.
HAL_StatusTypeDef UART_Check_Init_Struct (UART_SettingsTypeDef *suart)
 Проверка корректности структуры инициализации UART.
void UART_MspInit (UART_HandleTypeDef *huart)
 Настройка тактирования и прерываний UART.
void UART_MspDeInit (UART_HandleTypeDef *huart)
 Деинициализация тактирования и прерываний UART.
+

Detailed Description

+

Заголовочный файл для модуля инициализации UART.

+ +

Definition in file general_uart.h.

+
+
+ +
+ + + + diff --git a/Doc/html/general__uart_8h.js b/Doc/html/general__uart_8h.js new file mode 100644 index 0000000..8784c8c --- /dev/null +++ b/Doc/html/general__uart_8h.js @@ -0,0 +1,14 @@ +var general__uart_8h = +[ + [ "HAL_UART_MODULE_ENABLED", "group___u_a_r_t___i_n_i_t.html#ga167269406e73327b95c3bb7b9cfe6d89", null ], + [ "USE_USART1", "group___u_a_r_t___i_n_i_t.html#gace54f148bb1d72f13bf397d096d38d1b", null ], + [ "USE_USART2", "group___u_a_r_t___i_n_i_t.html#gaacb3968508217a0d8b3f64aa0c8aa07d", null ], + [ "USE_USART3", "group___u_a_r_t___i_n_i_t.html#ga6dadd967b428aade24008ec060009976", null ], + [ "USE_UART4", "group___u_a_r_t___i_n_i_t.html#ga779530e93e7aa1f25eb13045ec42b8e7", null ], + [ "USE_UART5", "group___u_a_r_t___i_n_i_t.html#ga592c6bf4a6496d6806ba0838cdfa2340", null ], + [ "USE_USART6", "group___u_a_r_t___i_n_i_t.html#gafaeb8bdd4aa7fb1987505530daa90868", null ], + [ "UART_Base_Init", "group___m_y___l_i_b_s___u_a_r_t.html#gab9f07396b778505c934143e89953e154", null ], + [ "UART_Check_Init_Struct", "group___m_y___l_i_b_s___u_a_r_t.html#ga2a22e46ecb9e04b2ce197a0e9c09044a", null ], + [ "UART_MspInit", "group___m_y___l_i_b_s___u_a_r_t.html#gab9313fd2f9fc6873ca6bfbc5b96edbbb", null ], + [ "UART_MspDeInit", "group___m_y___l_i_b_s___u_a_r_t.html#ga93ed6ceef4e3b5e7885786125cce93bc", null ] +]; \ No newline at end of file diff --git a/Doc/html/general__uart_8h__dep__incl.map b/Doc/html/general__uart_8h__dep__incl.map new file mode 100644 index 0000000..3fc50f2 --- /dev/null +++ b/Doc/html/general__uart_8h__dep__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/Doc/html/general__uart_8h__dep__incl.md5 b/Doc/html/general__uart_8h__dep__incl.md5 new file mode 100644 index 0000000..72c181c --- /dev/null +++ b/Doc/html/general__uart_8h__dep__incl.md5 @@ -0,0 +1 @@ +ee757a0889d23a9f20e9362475bd6f5a \ No newline at end of file diff --git a/Doc/html/general__uart_8h__dep__incl.png b/Doc/html/general__uart_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..725978892c11f89d9a89502226fbdbb5a082204c GIT binary patch literal 2909 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 literal 0 HcmV?d00001 diff --git a/Doc/html/general__uart_8h__incl.map b/Doc/html/general__uart_8h__incl.map new file mode 100644 index 0000000..39e2c3f --- /dev/null +++ b/Doc/html/general__uart_8h__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/Doc/html/general__uart_8h__incl.md5 b/Doc/html/general__uart_8h__incl.md5 new file mode 100644 index 0000000..00ba33d --- /dev/null +++ b/Doc/html/general__uart_8h__incl.md5 @@ -0,0 +1 @@ +26572d8168d54cd9681b4ae6726cb93e \ No newline at end of file diff --git a/Doc/html/general__uart_8h__incl.png b/Doc/html/general__uart_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..121f85e649f851bd289353616db7a38940d35bc7 GIT binary patch literal 4018 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 + + + + + + +MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Inc/general_uart.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
MyLibs 1.0 +
+
Расширенные библиотеки для STM32
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
general_uart.h
+
+
+Go to the documentation of this file.
1/**
+
2**************************************************************************
+
3* @file general_uart.h
+
4* @brief Заголовочный файл для модуля инициализации UART.
+
5**************************************************************************
+
6* @defgroup MY_LIBS_UART UART Tools
+
7* @ingroup MYLIBS_PERIPHERAL
+
8* @brief Функции и макросы для удобной работы с UART.
+
9* @details
+
10Модуль предоставляет функции для базовой инициализации UART
+
11
+
12
+
13@par Пример использования:
+
14@code
+
15// Структура настроек UART
+
16UART_SettingsTypeDef uart2Settings;
+
17
+
18void UART2_Init(void)
+
19{
+
20 // Настройка UART2 с 115200 бод, 8 бит, 1 стоп-бит, без паритета
+
21 uart2Settings.huart.Instance = USART2;
+
22 uart2Settings.huart.Init.BaudRate = 115200;
+
23 uart2Settings.huart.Init.WordLength = UART_WORDLENGTH_8B;
+
24 uart2Settings.huart.Init.StopBits = UART_STOPBITS_1;
+
25 uart2Settings.huart.Init.Parity = UART_PARITY_NONE;
+
26 uart2Settings.huart.Init.Mode = UART_MODE_TX_RX;
+
27 uart2Settings.huart.Init.HwFlowCtl = UART_HWCONTROL_NONE;
+
28 uart2Settings.huart.Init.OverSampling = UART_OVERSAMPLING_16;
+
29
+
30 // Настройка GPIO
+
31 uart2Settings.GPIOx = GPIOA;
+
32 uart2Settings.GPIO_PIN_TX = GPIO_PIN_2;
+
33 uart2Settings.GPIO_PIN_RX = GPIO_PIN_3;
+
34
+
35 // DMA не используется в этом примере
+
36 uart2Settings.DMAChannel = NULL;
+
37 uart2Settings.DMA_CHANNEL_X = 0;
+
38
+
39 // Инициализация UART
+
40 if(UART_Base_Init(&uart2Settings) != HAL_OK)
+
41 {
+
42 // Обработка ошибки
+
43 Error_Handler();
+
44 }
+
45}
+
46@endcode
+
47
+
48* @note Требуется подключение модуля UART в библиотеке HAL
+
49@code
+
50#define HAL_UART_MODULE_ENABLED
+
51@endcode
+
52* @{
+
53*************************************************************************/
+
54#ifndef __UART_GENERAL_H_
+
55#define __UART_GENERAL_H_
+
56
+
57/////////////////////////////////////////////////////////////////////
+
58/////////////////////////---USER SETTINGS---/////////////////////////
+
59/**
+
60 * @addtogroup UART_INIT Init defines
+
61 * @ingroup MY_LIBS_UART
+
62 * @brief Настройка UART
+
63 * @{
+
64 */
+
65#define HAL_UART_MODULE_ENABLED ///< Включение HAL UART
+
66
+
67#define USE_USART1 ///< Включить USART1 в @ref UART_MspInit
+
68#define USE_USART2 ///< Включить USART2 в @ref UART_MspInit
+
69#define USE_USART3 ///< Включить USART3 в @ref UART_MspInit
+
70#define USE_UART4 ///< Включить UART4 в @ref UART_MspInit
+
71#define USE_UART5 ///< Включить UART5 в @ref UART_MspInit
+
72#define USE_USART6 ///< Включить USART6 в @ref UART_MspInit
+
73/** UART_INIT
+
74 * @}
+
75 */
+
76/////////////////////////---USER SETTINGS---/////////////////////////
+
77#include "mylibs_defs.h"
+
78
+
79
+
80
+
81/////////////////////////////////////////////////////////////////////
+
82////////////////////////////---DEFINES---////////////////////////////
+
83
+
84
+
85
+
86////////////////////////////---DEFINES---////////////////////////////
+
87
+
88
+
89/////////////////////////////////////////////////////////////////////
+
90///////////////////////---STRUCTURES & ENUMS---//////////////////////
+
91/**
+
92 * @brief Структура настроек UART
+
93 * @details Содержит все необходимые параметры для инициализации UART,
+
94 * включая GPIO и DMA.
+
95 */
+
+
96typedef struct
+
97{
+
98 UART_HandleTypeDef huart; ///< HAL handle UART
+
99
+
100 GPIO_TypeDef *GPIOx; ///< Порт для UART
+
101 uint16_t GPIO_PIN_RX; ///< Пин приема
+
102 uint16_t GPIO_PIN_TX; ///< Пин передачи
+
103
+
104 DMA_Stream_TypeDef *DMAChannel; ///< Канал DMA (NULL если не нужен)
+
105 uint32_t DMA_CHANNEL_X; ///< Номер канала DMA (0 если не нужен)
+
106
+ +
+
108
+
109///////////////////////---STRUCTURES & ENUMS---//////////////////////
+
110
+
111
+
112/////////////////////////////////////////////////////////////////////
+
113///////////////////////////---FUNCTIONS---///////////////////////////
+
114
+
115/* Инициализация UART с использованием структуры настроек */
+
116HAL_StatusTypeDef UART_Base_Init(UART_SettingsTypeDef *suart);
+
117
+
118/* Проверка корректности структуры настроек UART */
+
119HAL_StatusTypeDef UART_Check_Init_Struct(UART_SettingsTypeDef *suart);
+
120
+
121/* Инициализация тактирования и прерываний для выбранного UART */
+
122void UART_MspInit(UART_HandleTypeDef *huart);
+
123
+
124/* Деинициализация тактирования и прерываний для выбранного UART */
+
125void UART_MspDeInit(UART_HandleTypeDef *huart);
+
126
+
127
+
128/**
+
129 * @cond UART_INTERNAL
+
130 */
+
131
+
132/* Настройка GPIO для UART */
+
133void UART_GPIO_Init(GPIO_TypeDef *GPIOx, uint16_t GPIO_PIN_RX, uint16_t GPIO_PIN_TX);
+
134
+
135/* Настройка DMA для UART */
+
136void UART_DMA_Init(UART_HandleTypeDef *huart, DMA_HandleTypeDef *hdma_rx, DMA_Stream_TypeDef *DMAChannel, uint32_t DMA_CHANNEL_X);
+
137
+
138#ifndef __USER_LINKDMA
+
139/**
+
140 * @brief Аналог HAL макроса для привязки DMA к UART.
+
141 * @note @ref __HAL_LINKDMA.
+
142 */
+
143#define __USER_LINKDMA(__HANDLE__, __PPP_DMA_FIELD__, __DMA_HANDLE__) \
+
144do{ \
+
145(__HANDLE__)->__PPP_DMA_FIELD__ = (__DMA_HANDLE__); \
+
146(__DMA_HANDLE__)->Parent = (__HANDLE__);} while(0U)
+
147#endif
+
148
+
149/** @endcond */
+
150///////////////////////////---FUNCTIONS---///////////////////////////
+
151
+
152#endif // __UART_GENERAL_H_
+
153
+
154/** MY_LIBS_UART
+
155 * @}
+
156 */
+
void UART_GPIO_Init(GPIO_TypeDef *GPIOx, uint16_t GPIO_PIN_RX, uint16_t GPIO_PIN_TX)
Инициализация GPIO для UART.
+
void UART_DMA_Init(UART_HandleTypeDef *huart, DMA_HandleTypeDef *hdma_rx, DMA_Stream_TypeDef *DMAChannel, uint32_t DMA_CHANNEL_X)
Инициализация DMA для UART.
+
HAL_StatusTypeDef UART_Check_Init_Struct(UART_SettingsTypeDef *suart)
Проверка корректности структуры инициализации UART.
+
void UART_MspDeInit(UART_HandleTypeDef *huart)
Деинициализация тактирования и прерываний UART.
+
void UART_MspInit(UART_HandleTypeDef *huart)
Настройка тактирования и прерываний UART.
+
HAL_StatusTypeDef UART_Base_Init(UART_SettingsTypeDef *suart)
Инициализация UART с помощью структуры UART_SettingsTypeDef.
+
Заголочный файл для дефайнов библиотеки MyLibsGeneral.
+
Структура настроек UART.
+
uint32_t DMA_CHANNEL_X
Номер канала DMA (0 если не нужен)
+
DMA_Stream_TypeDef * DMAChannel
Канал DMA (NULL если не нужен)
+
uint16_t GPIO_PIN_RX
Пин приема
+
uint16_t GPIO_PIN_TX
Пин передачи
+
UART_HandleTypeDef huart
HAL handle UART.
+
GPIO_TypeDef * GPIOx
Порт для UART.
+
+
+
+ + + + diff --git a/Doc/html/group___m_y___l_i_b_s___s_p_i.html b/Doc/html/group___m_y___l_i_b_s___s_p_i.html new file mode 100644 index 0000000..2d9633d --- /dev/null +++ b/Doc/html/group___m_y___l_i_b_s___s_p_i.html @@ -0,0 +1,328 @@ + + + + + + + +MyLibs: SPI Tools + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
MyLibs 1.0 +
+
Расширенные библиотеки для STM32
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SPI Tools
+
+
+ +

Функции и макросы для удобной работы с SPI. +More...

+
Collaboration diagram for SPI Tools:
+
+
+ + + + + +

+Topics

 Init defines
 Настройка SPI.
+ + + +

+Classes

struct  SPI_SettingsTypeDef
 Структура настроек SPI. More...
+ + + + + + + + + +

+Functions

HAL_StatusTypeDef SPI_Base_Init (SPI_SettingsTypeDef *sspi)
 Инициализация SPI с помощью структуры SPI_SettingsTypeDef.
HAL_StatusTypeDef SPI_Check_Init_Struct (SPI_SettingsTypeDef *sspi)
 Проверка корректности структуры инициализации SPI.
void SPI_MspInit (SPI_HandleTypeDef *hspi)
 Настройка тактирования и прерываний SPI.
void SPI_MspDeInit (SPI_HandleTypeDef *hspi)
 Деинициализация тактирования и прерываний SPI.
+

Detailed Description

+

Функции и макросы для удобной работы с SPI.

+

Модуль предоставляет функции для базовой инициализации SPI

+
Пример использования:
// Структура настроек SPI
+
SPI_SettingsTypeDef spi1Settings;
+
+
void SPI1_Init(void)
+
{
+
// Настройка SPI1 как Master, 8 бит, полный дуплекс
+
spi1Settings.hspi.Instance = SPI1;
+
spi1Settings.hspi.Init.Mode = SPI_MODE_MASTER;
+
spi1Settings.hspi.Init.Direction = SPI_DIRECTION_2LINES;
+
spi1Settings.hspi.Init.DataSize = SPI_DATASIZE_8BIT;
+
spi1Settings.hspi.Init.CLKPolarity = SPI_POLARITY_LOW;
+
spi1Settings.hspi.Init.CLKPhase = SPI_PHASE_1EDGE;
+
spi1Settings.hspi.Init.NSS = SPI_NSS_SOFT;
+
spi1Settings.hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
+
spi1Settings.hspi.Init.FirstBit = SPI_FIRSTBIT_MSB;
+
spi1Settings.hspi.Init.TIMode = SPI_TIMODE_DISABLE;
+
spi1Settings.hspi.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
+
+
// Настройка GPIO
+
spi1Settings.CLK_GPIOx = GPIOA;
+
spi1Settings.CLK_PIN = GPIO_PIN_5;
+
spi1Settings.CLK_GPIO_AlternageFunc = GPIO_AF5_SPI1;
+
+
spi1Settings.MISO_GPIOx = GPIOA;
+
spi1Settings.MISO_PIN = GPIO_PIN_6;
+
spi1Settings.MISO_GPIO_AlternageFunc = GPIO_AF5_SPI1;
+
+
spi1Settings.MOSI_GPIOx = GPIOA;
+
spi1Settings.MOSI_PIN = GPIO_PIN_7;
+
spi1Settings.MOSI_GPIO_AlternageFunc = GPIO_AF5_SPI1;
+
+
// Инициализация SPI
+
if(SPI_Base_Init(&spi1Settings) != HAL_OK)
+
{
+
// Обработка ошибки
+
Error_Handler();
+
}
+
}
+
HAL_StatusTypeDef SPI_Base_Init(SPI_SettingsTypeDef *sspi)
Инициализация SPI с помощью структуры SPI_SettingsTypeDef.
Definition general_spi.c:28
+
Структура настроек SPI.
+
GPIO_TypeDef * MOSI_GPIOx
Порт MOSI.
+
GPIO_TypeDef * MISO_GPIOx
Порт MISO.
+
uint32_t MISO_PIN
Пин MISO.
+
uint32_t CLK_PIN
Пин CLK.
+
uint32_t CLK_GPIO_AlternageFunc
Альтернативная функция для CLK.
+
GPIO_TypeDef * CLK_GPIOx
Порт CLK.
+
uint32_t MOSI_PIN
Пин MOSI.
+
SPI_HandleTypeDef hspi
HAL handle SPI.
+
uint32_t MISO_GPIO_AlternageFunc
Альтернативная функция для MISO.
+
uint32_t MOSI_GPIO_AlternageFunc
Альтернативная функция для MOSI.
+
+
Note
Требуется подключение модуля SPI в библиотеке HAL
#define HAL_SPI_MODULE_ENABLED
+
+

Function Documentation

+ +

◆ SPI_Base_Init()

+ +
+
+ + + + + + + +
HAL_StatusTypeDef SPI_Base_Init (SPI_SettingsTypeDef * sspi)
+
+ +

Инициализация SPI с помощью структуры SPI_SettingsTypeDef.

+
Parameters
+ + +
sspiУказатель на структуру с настройками SPI.
+
+
+
Returns
HAL status.
+


+ Инициализирует SPI и его GPIO. Настройка аналогична HAL_SPI_Init

suart.hspi.Init...
+

но дополнительно надо прописать пины CLK/MISO/MOSI SPI_SettingsTypeDef

+ +

Definition at line 28 of file general_spi.c.

+ +
+
+ +

◆ SPI_Check_Init_Struct()

+ +
+
+ + + + + + + +
HAL_StatusTypeDef SPI_Check_Init_Struct (SPI_SettingsTypeDef * sspi)
+
+ +

Проверка корректности структуры инициализации SPI.

+
Parameters
+ + +
sspiУказатель на структуру с настройками SPI.
+
+
+
Returns
HAL status.
+ +

Definition at line 246 of file general_spi.c.

+ +
+
+ +

◆ SPI_MspInit()

+ +
+
+ + + + + + + +
void SPI_MspInit (SPI_HandleTypeDef * hspi)
+
+ +

Настройка тактирования и прерываний SPI.

+
Parameters
+ + +
hspiУказатель на хендл SPI.
+
+
+
Note
Чтобы не генерировать функцию с иницилизацией неиспользуемых SPI, дефайнами Init defines в general_spi.h определяются используемые SPI.
+ +

Definition at line 127 of file general_spi.c.

+ +
+
+ +

◆ SPI_MspDeInit()

+ +
+
+ + + + + + + +
void SPI_MspDeInit (SPI_HandleTypeDef * hspi)
+
+ +

Деинициализация тактирования и прерываний SPI.

+
Parameters
+ + +
hspiУказатель на хендл SPI.
+
+
+
Note
Чтобы не генерировать функцию с иницилизацией неиспользуемых SPI, дефайнами Init defines в general_spi.h определяются используемые SPI.
+ +

Definition at line 191 of file general_spi.c.

+ +
+
+
+
+ +
+ + + + diff --git a/Doc/html/group___m_y___l_i_b_s___s_p_i.js b/Doc/html/group___m_y___l_i_b_s___s_p_i.js new file mode 100644 index 0000000..4a4c6ec --- /dev/null +++ b/Doc/html/group___m_y___l_i_b_s___s_p_i.js @@ -0,0 +1,22 @@ +var group___m_y___l_i_b_s___s_p_i = +[ + [ "Init defines", "group___s_p_i___i_n_i_t.html", "group___s_p_i___i_n_i_t" ], + [ "SPI_SettingsTypeDef", "struct_s_p_i___settings_type_def.html", [ + [ "hspi", "struct_s_p_i___settings_type_def.html#ad203d8b8d67e4f477d002d15b03ba422", null ], + [ "CLK_GPIOx", "struct_s_p_i___settings_type_def.html#a6a15d48eccf92959de3a086031fdc979", null ], + [ "CLK_PIN", "struct_s_p_i___settings_type_def.html#a3bcb1ed12da3544e02e6d36493669bdc", null ], + [ "CLK_GPIO_AlternageFunc", "struct_s_p_i___settings_type_def.html#a3f3748103a0b7861f6700042fd691ba1", null ], + [ "MISO_GPIOx", "struct_s_p_i___settings_type_def.html#a0d55a2941854f61934487f3d209cfa95", null ], + [ "MISO_PIN", "struct_s_p_i___settings_type_def.html#a3366c654d7ec6dd41c6a0b504dc8509a", null ], + [ "MISO_GPIO_AlternageFunc", "struct_s_p_i___settings_type_def.html#aecd7a5c6e205335b8ed229d74cd35d14", null ], + [ "MOSI_GPIOx", "struct_s_p_i___settings_type_def.html#a0af3bdb273818ff97eb4ff3cff918820", null ], + [ "MOSI_PIN", "struct_s_p_i___settings_type_def.html#a961208869faf4a7369aaf4edde75f176", null ], + [ "MOSI_GPIO_AlternageFunc", "struct_s_p_i___settings_type_def.html#afbe75a1c36650a4a9b41fa706a4c7eab", null ], + [ "DMAChannel", "struct_s_p_i___settings_type_def.html#a3cfd9469b0617a68bbd2a161ba06bb95", null ], + [ "DMA_CHANNEL_X", "struct_s_p_i___settings_type_def.html#aa0edaa145076d2383b3e0095d156d474", null ] + ] ], + [ "SPI_Base_Init", "group___m_y___l_i_b_s___s_p_i.html#ga0e177e3c57a8fcdc73b5602e72ec66ba", null ], + [ "SPI_Check_Init_Struct", "group___m_y___l_i_b_s___s_p_i.html#ga333dd251bc878931086d48aa932b1a5f", null ], + [ "SPI_MspInit", "group___m_y___l_i_b_s___s_p_i.html#gab9f13318daf02bc5b5f302ae392dccac", null ], + [ "SPI_MspDeInit", "group___m_y___l_i_b_s___s_p_i.html#gac279cc3eaa35541edfe330a1844a85e4", null ] +]; \ No newline at end of file diff --git a/Doc/html/group___m_y___l_i_b_s___s_p_i.map b/Doc/html/group___m_y___l_i_b_s___s_p_i.map new file mode 100644 index 0000000..faa73b4 --- /dev/null +++ b/Doc/html/group___m_y___l_i_b_s___s_p_i.map @@ -0,0 +1,5 @@ + + + + + diff --git a/Doc/html/group___m_y___l_i_b_s___s_p_i.md5 b/Doc/html/group___m_y___l_i_b_s___s_p_i.md5 new file mode 100644 index 0000000..85e5c62 --- /dev/null +++ b/Doc/html/group___m_y___l_i_b_s___s_p_i.md5 @@ -0,0 +1 @@ +b9d2d820e20d54c87d46b9628c5b5f42 \ No newline at end of file diff --git a/Doc/html/group___m_y___l_i_b_s___s_p_i.png b/Doc/html/group___m_y___l_i_b_s___s_p_i.png new file mode 100644 index 0000000000000000000000000000000000000000..0f1a90d7745b3993ac1c9298a1adcf80244881a0 GIT binary patch literal 1432 zcmV;J1!ww+P)ZNTNSITtF+tg*loV!SVTn5G$maT5r>p?MMNA@(iIVL zNJ&>j#33bJ5fO)aP8mzX^G-cu0YInI$y}bzv9|jS!bKgSQQ&#t3h*|t>7vp+#7#Bo zo^sf0DpGWxxM_+>)0hUC*4V2)$L;{0!kqK3fp5wU$4;6yF-ZGKTMw9=QF`IpAEl{cCWYDCyq^G9x^`gI403v0qzOce^**W z1?q0gMJ2;%xmC{}xg}k(<^wapWnd1t8~6{?>yi4pfO%r=O<)4J!O4$owX=le%4yQ= z9)^hf1&sb1-4;DAT5fckZGB1m=I8=&6?g*}$0XY0@4t2l*JY2idk7+0Z_>6b`=xXr zX2@s(bN;&%?YUkD4V$Dk8r{~fw`{j&Rg?saU^akl%V z-FE;FVBW(p2Q+{qP7-V_t}lng>&v@mySlo15%>^zII_vM zNBdi@0j03BvqPiNNOeryO|zsPXWVgBk|nO~?d?%u8F-RgX9d}|vCqTBx#i{M%}bXq z4OB+nZK%6E!+jTnm?^n<#O<2Y$~Zh_psVMpErxlNkkh4KMr+d>St2 zffq67{389&`OlbXW6n)XObo?4l#9q8wpY=44lk7UaD?k#sBIYq^~SFQA7O5+JOQ+T z<97ib6;YwsE9jMmTbSPKL%@T;$G{)qwi`uMc$O61>n-xC+*wa|knVcF*$ac#7cIZQ zFFXK#2$v6lXMkDY1 z*lFk`^%#@dUJ;l3No7`kcp*(9v{@gwpUpa(a%{?SG|~D9_%>Yb#5^4FI`DK+6&5AU z0}e&(lXR@@F^+yDI>1V}yob5zHj5dC7#eBXUD~#k<)*o9{WhO%w+*5e)0S%B5cnco z#(;my4M!ZfiJ9%N47>&0Rc<)qijr>i?3NvXIQMV3$Qe-iw~ST&IcgD+G%BBTMMUaE zNmoR~AthZA5r>p?MMNCxIeVcFk9JBn+uPgh?d|p7Q2;nRJS;nefo*PXs?FzUe}BK{ zwo^&h_x-IP2$t5?)(Q=(&V1kBDm#X(I-Sna!NEb + + + + + + +MyLibs: UART Tools + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
MyLibs 1.0 +
+
Расширенные библиотеки для STM32
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
UART Tools
+
+
+ +

Функции и макросы для удобной работы с UART. +More...

+
Collaboration diagram for UART Tools:
+
+
+ + + + + +

+Topics

 Init defines
 Настройка UART.
+ + + +

+Classes

struct  UART_SettingsTypeDef
 Структура настроек UART. More...
+ + + + + + + + + +

+Functions

HAL_StatusTypeDef UART_Base_Init (UART_SettingsTypeDef *suart)
 Инициализация UART с помощью структуры UART_SettingsTypeDef.
HAL_StatusTypeDef UART_Check_Init_Struct (UART_SettingsTypeDef *suart)
 Проверка корректности структуры инициализации UART.
void UART_MspInit (UART_HandleTypeDef *huart)
 Настройка тактирования и прерываний UART.
void UART_MspDeInit (UART_HandleTypeDef *huart)
 Деинициализация тактирования и прерываний UART.
+

Detailed Description

+

Функции и макросы для удобной работы с UART.

+

Модуль предоставляет функции для базовой инициализации UART

+
Пример использования:
// Структура настроек UART
+
UART_SettingsTypeDef uart2Settings;
+
+
void UART2_Init(void)
+
{
+
// Настройка UART2 с 115200 бод, 8 бит, 1 стоп-бит, без паритета
+
uart2Settings.huart.Instance = USART2;
+
uart2Settings.huart.Init.BaudRate = 115200;
+
uart2Settings.huart.Init.WordLength = UART_WORDLENGTH_8B;
+
uart2Settings.huart.Init.StopBits = UART_STOPBITS_1;
+
uart2Settings.huart.Init.Parity = UART_PARITY_NONE;
+
uart2Settings.huart.Init.Mode = UART_MODE_TX_RX;
+
uart2Settings.huart.Init.HwFlowCtl = UART_HWCONTROL_NONE;
+
uart2Settings.huart.Init.OverSampling = UART_OVERSAMPLING_16;
+
+
// Настройка GPIO
+
uart2Settings.GPIOx = GPIOA;
+
uart2Settings.GPIO_PIN_TX = GPIO_PIN_2;
+
uart2Settings.GPIO_PIN_RX = GPIO_PIN_3;
+
+
// DMA не используется в этом примере
+
uart2Settings.DMAChannel = NULL;
+
uart2Settings.DMA_CHANNEL_X = 0;
+
+
// Инициализация UART
+
if(UART_Base_Init(&uart2Settings) != HAL_OK)
+
{
+
// Обработка ошибки
+
Error_Handler();
+
}
+
}
+
HAL_StatusTypeDef UART_Base_Init(UART_SettingsTypeDef *suart)
Инициализация UART с помощью структуры UART_SettingsTypeDef.
+
Структура настроек UART.
+
uint32_t DMA_CHANNEL_X
Номер канала DMA (0 если не нужен)
+
DMA_Stream_TypeDef * DMAChannel
Канал DMA (NULL если не нужен)
+
uint16_t GPIO_PIN_RX
Пин приема
+
uint16_t GPIO_PIN_TX
Пин передачи
+
UART_HandleTypeDef huart
HAL handle UART.
+
GPIO_TypeDef * GPIOx
Порт для UART.
+
+
Note
Требуется подключение модуля UART в библиотеке HAL
#define HAL_UART_MODULE_ENABLED
+
+

Function Documentation

+ +

◆ UART_Base_Init()

+ +
+
+ + + + + + + +
HAL_StatusTypeDef UART_Base_Init (UART_SettingsTypeDef * suart)
+
+ +

Инициализация UART с помощью структуры UART_SettingsTypeDef.

+
Parameters
+ + +
suartУказатель на структуру с настройками UART.
+
+
+
Returns
HAL status.
+


+ Инициализирует UART и его GPIO и при необходимости DMA. Настройка аналогична HAL_UART_Init

suart.huart.Init...
+

но дополнительно надо прописать пины RX/TX UART_SettingsTypeDef

suart->GPIOx, suart->GPIO_PIN_RX, suart->GPIO_PIN_TX
+
+

Definition at line 32 of file general_uart.c.

+ +
+
+ +

◆ UART_Check_Init_Struct()

+ +
+
+ + + + + + + +
HAL_StatusTypeDef UART_Check_Init_Struct (UART_SettingsTypeDef * suart)
+
+ +

Проверка корректности структуры инициализации UART.

+
Parameters
+ + +
suartУказатель на структуру с настройками UART.
+
+
+
Returns
HAL status.
+ +

Definition at line 364 of file general_uart.c.

+ +
+
+ +

◆ UART_MspInit()

+ +
+
+ + + + + + + +
void UART_MspInit (UART_HandleTypeDef * huart)
+
+ +

Настройка тактирования и прерываний UART.

+
Parameters
+ + +
huartУказатель на хендл UART.
+
+
+
Note
Чтобы не генерировать функцию с иницилизацией неиспользуемых UART, дефайнами Init defines в general_uart.h определяются используемые UART.
+ +

Definition at line 146 of file general_uart.c.

+ +
+
+ +

◆ UART_MspDeInit()

+ +
+
+ + + + + + + +
void UART_MspDeInit (UART_HandleTypeDef * huart)
+
+ +

Деинициализация тактирования и прерываний UART.

+
Parameters
+ + +
huartУказатель на хендл UART.
+
+
+
Note
Чтобы не генерировать функцию с деиницилизацией неиспользуемых UART, дефайнами Init defines в general_uart.h определяются используемые UART.
+ +

Definition at line 267 of file general_uart.c.

+ +
+
+
+
+ +
+ + + + diff --git a/Doc/html/group___m_y___l_i_b_s___u_a_r_t.js b/Doc/html/group___m_y___l_i_b_s___u_a_r_t.js new file mode 100644 index 0000000..c634bfd --- /dev/null +++ b/Doc/html/group___m_y___l_i_b_s___u_a_r_t.js @@ -0,0 +1,16 @@ +var group___m_y___l_i_b_s___u_a_r_t = +[ + [ "Init defines", "group___u_a_r_t___i_n_i_t.html", "group___u_a_r_t___i_n_i_t" ], + [ "UART_SettingsTypeDef", "struct_u_a_r_t___settings_type_def.html", [ + [ "huart", "struct_u_a_r_t___settings_type_def.html#accf2c9448a3ea8eb3b8c25a569276fea", null ], + [ "GPIOx", "struct_u_a_r_t___settings_type_def.html#af6f9910d065bae715cdb4a1024143a8f", null ], + [ "GPIO_PIN_RX", "struct_u_a_r_t___settings_type_def.html#a3fba2b52788fe453348b5d92ed52ba49", null ], + [ "GPIO_PIN_TX", "struct_u_a_r_t___settings_type_def.html#a5f1babfcfb436cd77f5614253c0a5bef", null ], + [ "DMAChannel", "struct_u_a_r_t___settings_type_def.html#a1ecc9ac6a1d2747ade56770cbab6a613", null ], + [ "DMA_CHANNEL_X", "struct_u_a_r_t___settings_type_def.html#a15ce92b03f7f189bfbe1ab88a5f94d19", null ] + ] ], + [ "UART_Base_Init", "group___m_y___l_i_b_s___u_a_r_t.html#gab9f07396b778505c934143e89953e154", null ], + [ "UART_Check_Init_Struct", "group___m_y___l_i_b_s___u_a_r_t.html#ga2a22e46ecb9e04b2ce197a0e9c09044a", null ], + [ "UART_MspInit", "group___m_y___l_i_b_s___u_a_r_t.html#gab9313fd2f9fc6873ca6bfbc5b96edbbb", null ], + [ "UART_MspDeInit", "group___m_y___l_i_b_s___u_a_r_t.html#ga93ed6ceef4e3b5e7885786125cce93bc", null ] +]; \ No newline at end of file diff --git a/Doc/html/group___m_y___l_i_b_s___u_a_r_t.map b/Doc/html/group___m_y___l_i_b_s___u_a_r_t.map new file mode 100644 index 0000000..52ecc7e --- /dev/null +++ b/Doc/html/group___m_y___l_i_b_s___u_a_r_t.map @@ -0,0 +1,5 @@ + + + + + diff --git a/Doc/html/group___m_y___l_i_b_s___u_a_r_t.md5 b/Doc/html/group___m_y___l_i_b_s___u_a_r_t.md5 new file mode 100644 index 0000000..9c19d2c --- /dev/null +++ b/Doc/html/group___m_y___l_i_b_s___u_a_r_t.md5 @@ -0,0 +1 @@ +5475854d3a1c20af70a164c6fe76463e \ No newline at end of file diff --git a/Doc/html/group___m_y___l_i_b_s___u_a_r_t.png b/Doc/html/group___m_y___l_i_b_s___u_a_r_t.png new file mode 100644 index 0000000000000000000000000000000000000000..e70bae84329c947b8c824044e7f7fccda2b2152b GIT binary patch literal 1477 zcmV;$1v>hPP)YP%o=e4_(kpY5jwH@Zx__5nUBs zU0H1zFCr``cv3<1yf@1f5fMZ!9zCeXVv)8|4+<)!hbkhKnPPF!x|{Kk3?0)<=1nHa zn@oQn2xamn@B7Sj-e=x<^JYLqL_|bHL_|bHM5G*?@Q%5;xf71#oU#$juxPj2UoS2$ z{$e|hH0I~$pRgUnQR2Gp_QJx#itRYksMTt>d!Bc#?Kp-}y;XdYhY@G@DJ^VGLwuW@aef^JTHNwnn{Pk1TTwjzvU7Qc$uM5vc$rYY~wO zP_h;gsQ@Kw5s?Z|vKA4kfSybDl5m_u_tpT=Znsm{XL7FTaf2wLjldZ25bzZ6I`CZ) zjSi|-t3@vJ?6tq&IZ-;t#w`&G*O%njB;uY|!EVEUulx?YV>uQhN&3-gscm$ZoPuATDdT2VGsqX2BxT%n$V+lWwD>JPlh2y}3z&YTaV4o9g zL;GPK*AKyLF1gpBE2_@U<23aq%|X4MQ(BoN>!^#2NrH?!Hf@<{ds&a9H#Rm-0^b0) zhKfuR^lGL7CD3ZMY&8u;Ul^>)d~=#OTdmeH;641g=qrFW5x<7ng9E%AY=v81UjAWr zc6OjTvhI7`qv0&-DnlI|xn5ul%j!imm888aW1F6y{&976^+Ws)cosMb`~!>{R`D9J znOQ&yjE;`x@@s*eBpgo0;n8T7E(~_Q9dtiVYHVz5A9xA)5`SL$UJgdo{g&3YfzN^W z6E~cJsi~YHQkMLK*#Yw}7{UtutSJ4!Dm0PlrVL3Rue` zh@?hFMslk=$#T8U@l{CJ9RtMr7w}QAT?IUhze4CPz{BsSz21~R1D~d8bWjr$6P5Vw z^E~p7>9_qXr$MaU6jSu5*R+nDM*rUfZ{W{i-weD9{1KF0%%j1ggh!WeJ1so)K$Ca!8U{cA%CW*#x+mKq4ddGL`0OVMMNq= z$y!9D0+g&pL@J=?YLGJD;w$;u+1a7lY}yWE=-K|!tSoG8Z7Ek|Xm@wFXW5}-?Yi!^ z=Xp!(>+87&HOySs-L@S=TJ3gwX>V`Ob{I#7>$)qpV@S(&-IYe8L8H;I9g2vEh=_=Y fh=_=Yh!p5Qc23zUG)bq`00000NkvXXu0mjf8x!8F literal 0 HcmV?d00001 diff --git a/Doc/html/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.html b/Doc/html/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.html new file mode 100644 index 0000000..b3953b2 --- /dev/null +++ b/Doc/html/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.html @@ -0,0 +1,273 @@ + + + + + + + +MyLibs: General tools + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
MyLibs 1.0 +
+
Расширенные библиотеки для STM32
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
General tools
+
+
+ +

Функции для базовой инициализации UART. +More...

+
Collaboration diagram for General tools:
+
+
+ + + + + +

+Topics

 Init defines
 Настройка UART.
+ + + +

+Classes

struct  UART_SettingsTypeDef
 Структура настроек UART. More...
+ + + + + + + + + +

+Functions

HAL_StatusTypeDef UART_Base_Init (UART_SettingsTypeDef *suart)
 Инициализация UART с помощью структуры UART_SettingsTypeDef.
HAL_StatusTypeDef Check_UART_Init_Struct (UART_SettingsTypeDef *suart)
 Проверка корректности структуры инициализации UART.
void UART_MspInit (UART_HandleTypeDef *huart)
 Настройка тактирования и прерываний UART.
void UART_MspDeInit (UART_HandleTypeDef *huart)
 Deinitialize UART & DMA clock and interrupt.
+

Detailed Description

+

Функции для базовой инициализации UART.

+

Function Documentation

+ +

◆ UART_Base_Init()

+ +
+
+ + + + + + + +
HAL_StatusTypeDef UART_Base_Init (UART_SettingsTypeDef * suart)
+
+ +

Инициализация UART с помощью структуры UART_SettingsTypeDef.

+
Parameters
+ + +
suartУказатель на структуру с настройками UART.
+
+
+
Returns
HAL status.
+


+ Инициализирует UART и при необходимости его GPIO и DMA.

+ +

Definition at line 24 of file general_uart.c.

+ +
+
+ +

◆ Check_UART_Init_Struct()

+ +
+
+ + + + + + + +
HAL_StatusTypeDef Check_UART_Init_Struct (UART_SettingsTypeDef * suart)
+
+ +

Проверка корректности структуры инициализации UART.

+
Parameters
+ + +
suartУказатель на структуру с настройками UART.
+
+
+
Returns
HAL status.
+ +

Definition at line 356 of file general_uart.c.

+ +
+
+ +

◆ UART_MspInit()

+ +
+
+ + + + + + + +
void UART_MspInit (UART_HandleTypeDef * huart)
+
+ +

Настройка тактирования и прерываний UART.

+
Parameters
+ + +
huartУказатель на хендл UART.
+
+
+
Note
Чтобы не генерировать функцию с иницилизацией неиспользуемых UART, дефайнами Init defines в general_uart.h определяются используемые UART.
+ +

Definition at line 138 of file general_uart.c.

+ +
+
+ +

◆ UART_MspDeInit()

+ +
+
+ + + + + + + +
void UART_MspDeInit (UART_HandleTypeDef * huart)
+
+ +

Deinitialize UART & DMA clock and interrupt.

+
Parameters
+ + +
huart- указатель на хендл UART для деинициализации.
+
+
+
Note
Чтобы не генерировать функцию с деиницилизацией неиспользуемых UART, дефайнами Init defines в general_uart.h определяются используемые UART.
+ +

Definition at line 259 of file general_uart.c.

+ +
+
+
+
+ +
+ + + + diff --git a/Doc/html/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.js b/Doc/html/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.js new file mode 100644 index 0000000..05466b3 --- /dev/null +++ b/Doc/html/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.js @@ -0,0 +1,16 @@ +var group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l = +[ + [ "Init defines", "group___u_a_r_t___i_n_i_t.html", "group___u_a_r_t___i_n_i_t" ], + [ "UART_SettingsTypeDef", "struct_u_a_r_t___settings_type_def.html", [ + [ "huart", "struct_u_a_r_t___settings_type_def.html#accf2c9448a3ea8eb3b8c25a569276fea", null ], + [ "GPIOx", "struct_u_a_r_t___settings_type_def.html#af6f9910d065bae715cdb4a1024143a8f", null ], + [ "GPIO_PIN_RX", "struct_u_a_r_t___settings_type_def.html#a3fba2b52788fe453348b5d92ed52ba49", null ], + [ "GPIO_PIN_TX", "struct_u_a_r_t___settings_type_def.html#a5f1babfcfb436cd77f5614253c0a5bef", null ], + [ "DMAChannel", "struct_u_a_r_t___settings_type_def.html#a1ecc9ac6a1d2747ade56770cbab6a613", null ], + [ "DMA_CHANNEL_X", "struct_u_a_r_t___settings_type_def.html#a15ce92b03f7f189bfbe1ab88a5f94d19", null ] + ] ], + [ "UART_Base_Init", "group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.html#gab9f07396b778505c934143e89953e154", null ], + [ "Check_UART_Init_Struct", "group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.html#gac9c27133622dfaf1f43683f4edf0ff65", null ], + [ "UART_MspInit", "group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.html#gab9313fd2f9fc6873ca6bfbc5b96edbbb", null ], + [ "UART_MspDeInit", "group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.html#ga93ed6ceef4e3b5e7885786125cce93bc", null ] +]; \ No newline at end of file diff --git a/Doc/html/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.map b/Doc/html/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.map new file mode 100644 index 0000000..7cd0297 --- /dev/null +++ b/Doc/html/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.map @@ -0,0 +1,5 @@ + + + + + diff --git a/Doc/html/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.md5 b/Doc/html/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.md5 new file mode 100644 index 0000000..7716970 --- /dev/null +++ b/Doc/html/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.md5 @@ -0,0 +1 @@ +e6d1f13a7d892bfe12b1137f7c4b33fa \ No newline at end of file diff --git a/Doc/html/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.png b/Doc/html/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.png new file mode 100644 index 0000000000000000000000000000000000000000..35db670a1810e6dc62537a24fdf3f54ecd3486be GIT binary patch literal 1541 zcmV+g2KxDlP)^?w<4{Ud0yKJuN+WC@oY$UEHax?7<(2ha~Q7HpwKJ zWS(U5c|qt-emu{2x|467JkK*55D^g(5fKp)5fKrQCbFU{&Ye4V(6X%KCW2`z&-1>& zc=6&-rsF80+wGn-9fSC6+rHiF^{$$ZqX@@wj=8RT$aEajsNe5@8C`c*bcJPE$1Tgc zGMSJha0=M-%V`3AR_eob-4)<<({U8xy6y*-Wt}h`$CMhK_(Q#3ui8)q0LO7mhcLGJ z`FUn%XHAFEYBz4&U@#b%4r43}3ky?mKGenP>MH$yKX#iv;aEgO#4sg(5s{Wr;ujHV z86|!Zk(N>77ZGV0C4Lc+mMJCiTh^ZMfu*h=bxhncYI|IHdG^g?+~Z4fKX4ZK7I?^T zEV((3vumlFNyJo>_iX{kfX{$M!?9$R=Nug8e9c==xPMJ@M54rb{8h3n3(xcZ|2Hab zUAXV?wxr|Z${Dq9L);6z0-OO}0`3mhH|oyKahyHh6Ny__S51mF#go7rz}vvVVBII? z!l}+A@<6oQy62ikC5)EZ2Rscd0UN*-;AM7_exoEM&0eopmlp6eI|RHB`~a*27uZSq zf0+tOCeKKVzfOj4$)Z>3v~5N9%c+Ck8aoX<2>ip&?`vOKmDEYxT|nHn@Zu3}FLGSC zK55@1;r`JJSXwz*>&P2RMzi>LiSGc<;(w09M#KK0{p#IB9bvc^0peTv!`(1h&gZ0_ zhfugZuH3kvlgce42jw;K#6SEWlGfcb=~$w#)3#+Tqktp$e{1C|@ECq8EIc_|b&-xs ztVyqve$I1T-0L{e3rAUX6p1Cp4E|l=S>T0WofRyNyi?2~?fivo`6gOM(zfB(Mas>R zXG+d3yVNq7#0`wpz0WLEB+hHsu62Nq@e}{B{V}`8`89W?CAoF$7W4D-g^!PR?_^DO zMU&$2adqyeFB04K_V#|@5^xf@2fr1cb(GP@@A|oryW$coFE9Vz>2$^_qwE|p+)6K_ ztU8ntnrPxr8u3mW7^(Z9Z1lrXB-W!xkFKq+uU}$kuJy1b7R-Uv`e&{rhpg0)8t}>9`IY zI8a&HWwh$kr1jIAP*PXVpTHNv@&NEE@FxC6;9vaDQQQgV0Y3uEMJgTF;lqa;@mz;0 z@{oy{iKWcyiMu7r(?3<_E!Ct|6!&%DL*NnM8Q^pL7QF}jT}6eHk~Di~RHCc8^=~@q zS5*H1zw75k{4t|NU^UpLSv+H^y7gaWPAsj(U*&B{RjvNCn6tj0D&IHY0^bG8BL3X{ zGx)8z@ORg^DYNmc3PcT<0+%7XM~@DPlM$NcDfZG$G-?n z?VxW|(MD($=Xx1AsE9r9u-omPv@GjNod>?AiQ_nUo_8wl@n|XT175@L4tfrF6hmD- z=g*(_^dJ`Vf(Nmz^!xq1PvCkA{~~Z2zklDzw|BeU?sBKoIbr(FYnp@)Vp&>R+LPyN zIjcuT+QL6cFXN8^7#Y}=sjwO>i@?K%W046_;%~kU(*ej-aDiV;2O*Quxc*@g5gCsX zzlcc7DDjJkw2TtJh)ByQ@r#JGOyaB_&EuD>Ha0dG3#nS=tyLP7?67V7w&@s(@;q;4YirAN7y{U~ebsafMcKA}b#rr* r&CN~Ip@@ixh=_=Yh=_=Yh}719IHa!!@DQGe00000NkvXXu0mjf%|Z{D literal 0 HcmV?d00001 diff --git a/Doc/html/group___s_p_i___i_n_i_t.html b/Doc/html/group___s_p_i___i_n_i_t.html new file mode 100644 index 0000000..c62b59e --- /dev/null +++ b/Doc/html/group___s_p_i___i_n_i_t.html @@ -0,0 +1,220 @@ + + + + + + + +MyLibs: Init defines + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
MyLibs 1.0 +
+
Расширенные библиотеки для STM32
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Init defines
+
+
+ +

Настройка SPI. +More...

+
Collaboration diagram for Init defines:
+
+
+ + + + + + + + + + + +

+Macros

#define HAL_SPI_MODULE_ENABLED
 Включение HAL SPI.
#define USE_SPI1
 Включить SPI1 в SPI_MspInit.
#define USE_SPI2
 Включить SPI2 в SPI_MspInit.
#define USE_SPI3
 Включить SPI3 в SPI_MspInit.
+

Detailed Description

+

Настройка SPI.

+

Macro Definition Documentation

+ +

◆ HAL_SPI_MODULE_ENABLED

+ +
+
+ + + + +
#define HAL_SPI_MODULE_ENABLED
+
+ +

Включение HAL SPI.

+ +

Definition at line 75 of file general_spi.h.

+ +
+
+ +

◆ USE_SPI1

+ +
+
+ + + + +
#define USE_SPI1
+
+ +

Включить SPI1 в SPI_MspInit.

+ +

Definition at line 77 of file general_spi.h.

+ +
+
+ +

◆ USE_SPI2

+ +
+
+ + + + +
#define USE_SPI2
+
+ +

Включить SPI2 в SPI_MspInit.

+ +

Definition at line 78 of file general_spi.h.

+ +
+
+ +

◆ USE_SPI3

+ +
+
+ + + + +
#define USE_SPI3
+
+ +

Включить SPI3 в SPI_MspInit.

+ +

Definition at line 79 of file general_spi.h.

+ +
+
+
+
+ +
+ + + + diff --git a/Doc/html/group___s_p_i___i_n_i_t.js b/Doc/html/group___s_p_i___i_n_i_t.js new file mode 100644 index 0000000..84da224 --- /dev/null +++ b/Doc/html/group___s_p_i___i_n_i_t.js @@ -0,0 +1,7 @@ +var group___s_p_i___i_n_i_t = +[ + [ "HAL_SPI_MODULE_ENABLED", "group___s_p_i___i_n_i_t.html#ga8ad4712bf4add56892d057778e826e0c", null ], + [ "USE_SPI1", "group___s_p_i___i_n_i_t.html#ga2fe0c8aeb2c61679f32836fef479eedf", null ], + [ "USE_SPI2", "group___s_p_i___i_n_i_t.html#ga53687cddb8e39e76a79b8ffaa152fb2b", null ], + [ "USE_SPI3", "group___s_p_i___i_n_i_t.html#ga5fdd6e5934a8005ef05b80f6d95883dc", null ] +]; \ No newline at end of file diff --git a/Doc/html/group___s_p_i___i_n_i_t.map b/Doc/html/group___s_p_i___i_n_i_t.map new file mode 100644 index 0000000..8b71b63 --- /dev/null +++ b/Doc/html/group___s_p_i___i_n_i_t.map @@ -0,0 +1,4 @@ + + + + diff --git a/Doc/html/group___s_p_i___i_n_i_t.md5 b/Doc/html/group___s_p_i___i_n_i_t.md5 new file mode 100644 index 0000000..fe2e1ed --- /dev/null +++ b/Doc/html/group___s_p_i___i_n_i_t.md5 @@ -0,0 +1 @@ +a5fee9e01f339403bf93347eac092de0 \ No newline at end of file diff --git a/Doc/html/group___s_p_i___i_n_i_t.png b/Doc/html/group___s_p_i___i_n_i_t.png new file mode 100644 index 0000000000000000000000000000000000000000..ff54ab3bae363d647c0778ac956f79517f6bb996 GIT binary patch literal 952 zcmV;p14sOcP))LcSf(-XO>60&9zj?mN zlN^YMh=_=YNL86|!`j-~9b?Qw5y4cQwf6hQ#>QdMaU{`bG?t5wp^hBKIq*DhC)jo+ zypu6z!5FidUs$!W0(>bth$Qr#XQSKgwt(lsw!Wl0<9S}@0o94?xDBSvqUn}^JIorR?OE{@~$;KG0wIkc(>=Px}A7}pxxDGr4 zR)L4WRI%Y?E4b$Cx^5uF0lwltDmH`v+-q$TE?CxuOS^E%H>&iD8YA2n?2j6EP=D08QDesG zODdI_&RTonA2sjtFI;j4KM(7RJ4OQc@SnF^18xH+z;v%~de9$LU9iN9DkDA58(Ch4 z#~9QX{G4RmL2<_In?!0eowfFSi!y5LhD`5XR!vIf<&WO>9$3IHGgpCGE|!^5TEM>~2c6W+ z%uEr79a|Q6C5Me!>hiMcGFY?g0^7hl;3odkz$VbaFX;-I(ds1YSud-#zD#bU1l#j4 ztTc>UHfDS?=oI+Y+g#u=@CtZ@f8sM-q7&e-86#ZM4eLwmI&ILHS(TT4nbK%9mW?r+ zWnNq?BiD7Y)~+<0&2g@cZU9e#*T8-JwYx&f%k}kjtCv{Q)q9Dx)oeB|yg7bp&aNfZ z20j5xz+F^wUJ805r96HY9f0IRGo47zlyo9FQ__j#Oi3q_GbNo!&h%rma_;EpDDuZq zC7DjA6WQLEbdKX3bi3Ww?(S~pLDh}pI0r??kd(Eyb$onWbQrbcIL^-Ky+lMrL_|cS aD*gkSgN=0;o|9?-0000 + + + + + + +MyLibs: Init defines + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
MyLibs 1.0 +
+
Расширенные библиотеки для STM32
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +

Настройка UART. +More...

+
Collaboration diagram for Init defines:
+
+
+ + + + + + + + + + + + + + + + + +

+Macros

#define HAL_UART_MODULE_ENABLED
 Включение HAL UART.
#define USE_USART1
 Включить USART1 в UART_MspInit.
#define USE_USART2
 Включить USART2 в UART_MspInit.
#define USE_USART3
 Включить USART3 в UART_MspInit.
#define USE_UART4
 Включить UART4 в UART_MspInit.
#define USE_UART5
 Включить UART5 в UART_MspInit.
#define USE_USART6
 Включить USART6 в UART_MspInit.
+

Detailed Description

+

Настройка UART.

+

Macro Definition Documentation

+ +

◆ HAL_UART_MODULE_ENABLED

+ +
+
+ + + + +
#define HAL_UART_MODULE_ENABLED
+
+ +

Включение HAL UART.

+ +

Definition at line 65 of file general_uart.h.

+ +
+
+ +

◆ USE_USART1

+ +
+
+ + + + +
#define USE_USART1
+
+ +

Включить USART1 в UART_MspInit.

+ +

Definition at line 67 of file general_uart.h.

+ +
+
+ +

◆ USE_USART2

+ +
+
+ + + + +
#define USE_USART2
+
+ +

Включить USART2 в UART_MspInit.

+ +

Definition at line 68 of file general_uart.h.

+ +
+
+ +

◆ USE_USART3

+ +
+
+ + + + +
#define USE_USART3
+
+ +

Включить USART3 в UART_MspInit.

+ +

Definition at line 69 of file general_uart.h.

+ +
+
+ +

◆ USE_UART4

+ +
+
+ + + + +
#define USE_UART4
+
+ +

Включить UART4 в UART_MspInit.

+ +

Definition at line 70 of file general_uart.h.

+ +
+
+ +

◆ USE_UART5

+ +
+
+ + + + +
#define USE_UART5
+
+ +

Включить UART5 в UART_MspInit.

+ +

Definition at line 71 of file general_uart.h.

+ +
+
+ +

◆ USE_USART6

+ +
+
+ + + + +
#define USE_USART6
+
+ +

Включить USART6 в UART_MspInit.

+ +

Definition at line 72 of file general_uart.h.

+ +
+
+
+
+ +
+ + + + diff --git a/Doc/html/group___u_a_r_t___i_n_i_t.js b/Doc/html/group___u_a_r_t___i_n_i_t.js new file mode 100644 index 0000000..2aa885c --- /dev/null +++ b/Doc/html/group___u_a_r_t___i_n_i_t.js @@ -0,0 +1,10 @@ +var group___u_a_r_t___i_n_i_t = +[ + [ "HAL_UART_MODULE_ENABLED", "group___u_a_r_t___i_n_i_t.html#ga167269406e73327b95c3bb7b9cfe6d89", null ], + [ "USE_USART1", "group___u_a_r_t___i_n_i_t.html#gace54f148bb1d72f13bf397d096d38d1b", null ], + [ "USE_USART2", "group___u_a_r_t___i_n_i_t.html#gaacb3968508217a0d8b3f64aa0c8aa07d", null ], + [ "USE_USART3", "group___u_a_r_t___i_n_i_t.html#ga6dadd967b428aade24008ec060009976", null ], + [ "USE_UART4", "group___u_a_r_t___i_n_i_t.html#ga779530e93e7aa1f25eb13045ec42b8e7", null ], + [ "USE_UART5", "group___u_a_r_t___i_n_i_t.html#ga592c6bf4a6496d6806ba0838cdfa2340", null ], + [ "USE_USART6", "group___u_a_r_t___i_n_i_t.html#gafaeb8bdd4aa7fb1987505530daa90868", null ] +]; \ No newline at end of file diff --git a/Doc/html/group___u_a_r_t___i_n_i_t.map b/Doc/html/group___u_a_r_t___i_n_i_t.map new file mode 100644 index 0000000..5159791 --- /dev/null +++ b/Doc/html/group___u_a_r_t___i_n_i_t.map @@ -0,0 +1,4 @@ + + + + diff --git a/Doc/html/group___u_a_r_t___i_n_i_t.md5 b/Doc/html/group___u_a_r_t___i_n_i_t.md5 new file mode 100644 index 0000000..51b7988 --- /dev/null +++ b/Doc/html/group___u_a_r_t___i_n_i_t.md5 @@ -0,0 +1 @@ +a6be7d8c2d212183934faf5551879d8d \ No newline at end of file diff --git a/Doc/html/group___u_a_r_t___i_n_i_t.png b/Doc/html/group___u_a_r_t___i_n_i_t.png new file mode 100644 index 0000000000000000000000000000000000000000..f44155167cb3ebfaa91bf96d35cf0859e7ea9e5c GIT binary patch literal 980 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
8-5tD)-`L5}Mc=ILjBjKx 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\mbox{\hyperlink{struct_s_p_i___settings_type_def_ad203d8b8d67e4f477d002d15b03ba422}{hspi}});\ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00036}00036\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00037}00037\ \ \ \textcolor{keywordflow}{if}\ (HAL\_SPI\_Init(\&sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_ad203d8b8d67e4f477d002d15b03ba422}{hspi}})\ !=\ HAL\_OK)} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00038}00038\ \ \ \{} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00039}00039\ \ \ \ \ \mbox{\hyperlink{group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_gae110df81afd885a390bbeb152d7b709f}{MyLibs\_Error\_Handler}}();} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00040}00040\ \ \ \ \ \textcolor{keywordflow}{return}\ HAL\_ERROR;} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00041}00041\ \ \ \}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00042}00042\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00043}00043\ \ \ \textcolor{comment}{//\ init\ gpio\ from\ SPISettings\ structure}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00044}00044\ \ \ \mbox{\hyperlink{general__spi_8c_ae80d21e5cab86571709a2619442733b5}{SPI\_GPIO\_Init}}(sspi);} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00045}00045\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00046}00046\ \textcolor{comment}{//\ \ //\ init\ dma\ from\ SPISettings\ structure\ if\ need}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00047}00047\ \textcolor{comment}{//\ \ if\ (sspi-\/>DMAChannel\ !=\ 0)}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00048}00048\ \textcolor{comment}{//\ \ \ \ SPI\_DMA\_Init(\&sspi-\/>hspi,\ sspi-\/>hspi.hdmarx,\ sspi-\/>DMAChannel,\ sspi-\/>DMA\_CHANNEL\_X);}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00049}00049\ \ \ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00050}00050\ \ \ \textcolor{keywordflow}{return}\ HAL\_OK;} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00051}00051\ \}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00052}00052\ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00053}00053\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00054}00054\ \textcolor{comment}{/**\ \ }} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00055}00055\ \textcolor{comment}{\ \ *\ @brief\ \ Инициализация\ GPIO\ для\ SPI.}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00056}00056\ \textcolor{comment}{\ \ *\ @param\ \ sspi\ Указатель\ на\ структуру\ с\ настройками\ SPI.}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00057}00057\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00058}\mbox{\hyperlink{general__spi_8c_ae80d21e5cab86571709a2619442733b5}{00058}}\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{general__spi_8c_ae80d21e5cab86571709a2619442733b5}{SPI\_GPIO\_Init}}(\mbox{\hyperlink{struct_s_p_i___settings_type_def}{SPI\_SettingsTypeDef}}\ *sspi)} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00059}00059\ \{\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00060}00060\ \ \ GPIO\_InitTypeDef\ GPIO\_InitStruct\ =\ \{0\};\ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00061}00061\ \ \ \textcolor{comment}{//\ GPIO\ INIT\ \ }} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00062}00062\ \ \ \mbox{\hyperlink{group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l_ga962f010f783b81fcdd27eb6b53db28e6}{GPIO\_Clock\_Enable}}(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_a6a15d48eccf92959de3a086031fdc979}{CLK\_GPIOx}});} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00063}00063\ \ \ \mbox{\hyperlink{group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l_ga962f010f783b81fcdd27eb6b53db28e6}{GPIO\_Clock\_Enable}}(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_a0d55a2941854f61934487f3d209cfa95}{MISO\_GPIOx}});} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00064}00064\ \ \ \mbox{\hyperlink{group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l_ga962f010f783b81fcdd27eb6b53db28e6}{GPIO\_Clock\_Enable}}(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_a0af3bdb273818ff97eb4ff3cff918820}{MOSI\_GPIOx}});\ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00065}00065\ \ \ \ \ \textcolor{comment}{//\ CLK\ PIN\ INIT}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00066}00066\ \ \ GPIO\_InitStruct.Pin\ =\ sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_a3bcb1ed12da3544e02e6d36493669bdc}{CLK\_PIN}};} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00067}00067\ \ \ GPIO\_InitStruct.Alternate\ =\ sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_a3f3748103a0b7861f6700042fd691ba1}{CLK\_GPIO\_AlternageFunc}};} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00068}00068\ \ \ GPIO\_InitStruct.Mode\ =\ GPIO\_MODE\_AF\_PP;} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00069}00069\ \ \ GPIO\_InitStruct.Pull\ =\ GPIO\_NOPULL;} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00070}00070\ \ \ GPIO\_InitStruct.Speed\ =\ GPIO\_SPEED\_FREQ\_VERY\_HIGH;} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00071}00071\ \ \ HAL\_GPIO\_Init(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_a6a15d48eccf92959de3a086031fdc979}{CLK\_GPIOx}},\ \&GPIO\_InitStruct);} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00072}00072\ \ \ \textcolor{comment}{//\ MISO\ PIN\ INIT}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00073}00073\ \ \ GPIO\_InitStruct.Pin\ =\ sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_a3366c654d7ec6dd41c6a0b504dc8509a}{MISO\_PIN}};} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00074}00074\ \ \ GPIO\_InitStruct.Alternate\ =\ sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_aecd7a5c6e205335b8ed229d74cd35d14}{MISO\_GPIO\_AlternageFunc}};} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00075}00075\ \ \ GPIO\_InitStruct.Mode\ =\ GPIO\_MODE\_AF\_PP;} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00076}00076\ \ \ GPIO\_InitStruct.Pull\ =\ GPIO\_NOPULL;} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00077}00077\ \ \ GPIO\_InitStruct.Speed\ =\ GPIO\_SPEED\_FREQ\_VERY\_HIGH;} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00078}00078\ \ \ HAL\_GPIO\_Init(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_a0d55a2941854f61934487f3d209cfa95}{MISO\_GPIOx}},\ \&GPIO\_InitStruct);} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00079}00079\ \ \ \textcolor{comment}{//\ MOSI\ PIN\ INIT}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00080}00080\ \ \ GPIO\_InitStruct.Pin\ =\ sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_a961208869faf4a7369aaf4edde75f176}{MOSI\_PIN}};} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00081}00081\ \ \ GPIO\_InitStruct.Alternate\ =\ sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_afbe75a1c36650a4a9b41fa706a4c7eab}{MOSI\_GPIO\_AlternageFunc}};} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00082}00082\ \ \ GPIO\_InitStruct.Mode\ =\ GPIO\_MODE\_AF\_PP;} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00083}00083\ \ \ GPIO\_InitStruct.Pull\ =\ GPIO\_NOPULL;} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00084}00084\ \ \ GPIO\_InitStruct.Speed\ =\ GPIO\_SPEED\_FREQ\_VERY\_HIGH;} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00085}00085\ \ \ HAL\_GPIO\_Init(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_a0af3bdb273818ff97eb4ff3cff918820}{MOSI\_GPIOx}},\ \&GPIO\_InitStruct);} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00086}00086\ \}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00087}00087\ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00088}00088\ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00089}00089\ \textcolor{keywordtype}{void}\ SPI\_DMA\_Init(SPI\_HandleTypeDef\ *hspi,\ DMA\_HandleTypeDef\ *hdma\_rx,\ DMA\_Stream\_TypeDef\ *DMAChannel,\ uint32\_t\ DMA\_CHANNEL\_X)} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00090}00090\ \{\ \textcolor{comment}{//\ function\ takes\ spi\ and\ dma\ handlers\ and\ dmachannel\ for\ spi}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00091}00091\ \textcolor{comment}{//\ \ //\ for\ now\ only\ dma\ rx\ is\ supported,\ tx\ maybe\ later\ if\ needed}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00092}00092\ \textcolor{comment}{//\ \ \ \ //\ calc\ defines\ on\ boot\_project\_setup.h}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00093}00093\ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00094}00094\ \textcolor{comment}{//\ \ /*\ SPI3\ DMA\ Init\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00095}00095\ \textcolor{comment}{//\ \ /*\ SPI3\_RX\ Init\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00096}00096\ \textcolor{comment}{//\ \ }} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00097}00097\ \textcolor{comment}{//\ \ hdma\_rx-\/>Instance\ =\ DMAChannel;}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00098}00098\ \textcolor{comment}{//\#if\ defined(STM32F4xx)\ //\ dma\ channel\ choose\ for\ 407}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00099}00099\ \textcolor{comment}{//\ \ hdma\_rx-\/>Init.Channel\ =\ DMA\_CHANNEL\_X;}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00100}00100\ \textcolor{comment}{//\#endif}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00101}00101\ \textcolor{comment}{//\ \ hdma\_rx-\/>Init.Direction\ =\ DMA\_PERIPH\_TO\_MEMORY;}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00102}00102\ \textcolor{comment}{//\ \ hdma\_rx-\/>Init.PeriphInc\ =\ DMA\_PINC\_DISABLE;}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00103}00103\ \textcolor{comment}{//\ \ hdma\_rx-\/>Init.MemInc\ =\ DMA\_MINC\_ENABLE;}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00104}00104\ \textcolor{comment}{//\ \ hdma\_rx-\/>Init.PeriphDataAlignment\ =\ DMA\_PDATAALIGN\_BYTE;}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00105}00105\ \textcolor{comment}{//\ \ hdma\_rx-\/>Init.MemDataAlignment\ =\ DMA\_MDATAALIGN\_BYTE;}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00106}00106\ \textcolor{comment}{//\ \ hdma\_rx-\/>Init.Mode\ =\ DMA\_CIRCULAR;}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00107}00107\ \textcolor{comment}{//\ \ hdma\_rx-\/>Init.Priority\ =\ DMA\_PRIORITY\_LOW;}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00108}00108\ \textcolor{comment}{//\ \ if\ (HAL\_DMA\_Init(hdma\_rx)\ !=\ HAL\_OK)}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00109}00109\ \textcolor{comment}{//\ \ \{}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00110}00110\ \textcolor{comment}{//\ \ \ \ MyLibs\_Error\_Handler();}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00111}00111\ \textcolor{comment}{//\ \ \}}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00112}00112\ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00113}00113\ \textcolor{comment}{//\ \ \_\_USER\_LINKDMA(hspi,hdmarx,hdma\_rx);\ \ }} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00114}00114\ \textcolor{comment}{//\ \ }} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00115}00115\ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00116}00116\ \textcolor{comment}{//\ \ //\ \_\_USER\_LINKDMA\ is\ need\ because\ \_\_HAL\_LINKDMA\ is\ written\ for\ global\ defined\ hdma\_rx}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00117}00117\ \textcolor{comment}{//\ \ //\ so\ you\ get\ error\ because\ hal\ uses\ .\ insted\ of\ -\/>}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00118}00118\ \}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00119}00119\ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00120}00120\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00121}00121\ \textcolor{comment}{/**\ \ }} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00122}00122\ \textcolor{comment}{\ \ *\ @brief\ \ Настройка\ тактирования\ и\ прерываний\ SPI.}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00123}00123\ \textcolor{comment}{\ \ *\ @param\ \ hspi\ Указатель\ на\ хендл\ SPI.}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00124}00124\ \textcolor{comment}{\ \ *\ @note\ \ \ Чтобы\ не\ генерировать\ функцию\ с\ иницилизацией\ неиспользуемых\ SPI,}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00125}00125\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ \ \ дефайнами\ @ref\ SPI\_INIT\ в\ @ref\ general\_spi.h\ определяются\ используемые\ SPI.}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00126}00126\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00127}\mbox{\hyperlink{group___m_y___l_i_b_s___s_p_i_gab9f13318daf02bc5b5f302ae392dccac}{00127}}\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{group___m_y___l_i_b_s___s_p_i_gab9f13318daf02bc5b5f302ae392dccac}{SPI\_MspInit}}(SPI\_HandleTypeDef\ *hspi)\ \textcolor{comment}{//\ analog\ for\ hal\ function}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00128}00128\ \{\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00129}00129\ \ \ \textcolor{comment}{//\ rcc,\ dma\ and\ interrupt\ init\ for\ SPIs}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00130}00130\ \ \ \textcolor{comment}{//\ GPIO\ init\ was\ moved\ to\ own\ functions\ SPI\_GPIO\_Init\ \ }} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00131}00131\ \ \ \textcolor{keywordflow}{if}(0);} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00132}00132\ \textcolor{preprocessor}{\#ifdef\ USE\_SPI1}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00133}00133\ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}(hspi-\/>Instance==SPI1)} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00134}00134\ \ \ \{} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00135}00135\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00136}00136\ \textcolor{comment}{//\ \ /*\ DMA2\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00137}00137\ \textcolor{comment}{//\ \ \_\_HAL\_RCC\_DMA2\_CLK\_ENABLE();}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00138}00138\ \textcolor{comment}{//\ \ /*\ DMA\ interrupt\ init\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00139}00139\ \textcolor{comment}{//\ \ HAL\_NVIC\_SetPriority(DMA2\_Stream2\_IRQn,\ 0,\ 0);}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00140}00140\ \textcolor{comment}{//\ \ HAL\_NVIC\_EnableIRQ(DMA2\_Stream2\_IRQn);}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00141}00141\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00142}00142\ \ \ \textcolor{comment}{/*\ SPI1\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00143}00143\ \ \ \_\_HAL\_RCC\_SPI1\_CLK\_ENABLE();} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00144}00144\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00145}00145\ \ \ \textcolor{comment}{/*\ SPI1\ interrupt\ Init\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00146}00146\ \ \ HAL\_NVIC\_SetPriority(SPI1\_IRQn,\ 0,\ 0);} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00147}00147\ \ \ HAL\_NVIC\_EnableIRQ(SPI1\_IRQn);} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00148}00148\ \ \ \}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00149}00149\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ USE\_SPI1}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00150}00150\ \textcolor{preprocessor}{\#ifdef\ USE\_SPI2}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00151}00151\ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}(hspi-\/>Instance==SPI2)} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00152}00152\ \ \ \{} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00153}00153\ \textcolor{comment}{//\ \ /*\ DMA1\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00154}00154\ \textcolor{comment}{//\ \ \_\_HAL\_RCC\_DMA1\_CLK\_ENABLE();}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00155}00155\ \textcolor{comment}{//\ \ /*\ DMA\ interrupt\ init\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00156}00156\ \textcolor{comment}{//\ \ HAL\_NVIC\_SetPriority(DMA1\_Stream5\_IRQn,\ 0,\ 0);}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00157}00157\ \textcolor{comment}{//\ \ HAL\_NVIC\_EnableIRQ(DMA1\_Stream5\_IRQn);}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00158}00158\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00159}00159\ \ \ \textcolor{comment}{/*\ SPI2\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00160}00160\ \ \ \_\_HAL\_RCC\_SPI2\_CLK\_ENABLE();} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00161}00161\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00162}00162\ \ \ \textcolor{comment}{/*\ SPI2\ interrupt\ Init\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00163}00163\ \ \ HAL\_NVIC\_SetPriority(SPI2\_IRQn,\ 0,\ 0);} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00164}00164\ \ \ HAL\_NVIC\_EnableIRQ(SPI2\_IRQn);} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00165}00165\ \ \ \}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00166}00166\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ USE\_SPI2}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00167}00167\ \textcolor{preprocessor}{\#ifdef\ USE\_SPI3}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00168}00168\ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}(hspi-\/>Instance==SPI3)} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00169}00169\ \ \ \{\ \ \ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00170}00170\ \textcolor{comment}{//\ \ /*\ DMA1\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00171}00171\ \textcolor{comment}{//\ \ \_\_HAL\_RCC\_DMA1\_CLK\_ENABLE();}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00172}00172\ \textcolor{comment}{//\ \ /*\ DMA\ interrupt\ init\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00173}00173\ \textcolor{comment}{//\ \ HAL\_NVIC\_SetPriority(DMA1\_Stream1\_IRQn,\ 0,\ 0);}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00174}00174\ \textcolor{comment}{//\ \ HAL\_NVIC\_EnableIRQ(DMA1\_Stream1\_IRQn);}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00175}00175\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00176}00176\ \ \ \textcolor{comment}{/*\ SPI3\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00177}00177\ \ \ \_\_HAL\_RCC\_SPI3\_CLK\_ENABLE();\ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00178}00178\ \ \ \textcolor{comment}{/*\ SPI3\ interrupt\ Init\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00179}00179\ \ \ HAL\_NVIC\_SetPriority(SPI3\_IRQn,\ 0,\ 0);} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00180}00180\ \ \ HAL\_NVIC\_EnableIRQ(SPI3\_IRQn);} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00181}00181\ \ \ \}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00182}00182\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ USE\_SPI3}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00183}00183\ \}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00184}00184\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00185}00185\ \textcolor{comment}{/**\ \ }} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00186}00186\ \textcolor{comment}{\ \ *\ @brief\ \ Деинициализация\ тактирования\ и\ прерываний\ SPI.}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00187}00187\ \textcolor{comment}{\ \ *\ @param\ \ hspi\ Указатель\ на\ хендл\ SPI.}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00188}00188\ \textcolor{comment}{\ \ *\ @note\ \ \ Чтобы\ не\ генерировать\ функцию\ с\ иницилизацией\ неиспользуемых\ SPI,}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00189}00189\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ \ \ дефайнами\ @ref\ SPI\_INIT\ в\ @ref\ general\_spi.h\ определяются\ используемые\ SPI.}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00190}00190\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00191}\mbox{\hyperlink{group___m_y___l_i_b_s___s_p_i_gac279cc3eaa35541edfe330a1844a85e4}{00191}}\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{group___m_y___l_i_b_s___s_p_i_gac279cc3eaa35541edfe330a1844a85e4}{SPI\_MspDeInit}}(SPI\_HandleTypeDef\ *hspi)\ \textcolor{comment}{//\ analog\ for\ hal\ function}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00192}00192\ \{\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00193}00193\ \ \ \textcolor{comment}{//\ rcc,\ dma\ and\ interrupt\ init\ for\ SPIs}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00194}00194\ \ \ \textcolor{comment}{//\ GPIO\ init\ was\ moved\ to\ own\ functions\ SPI\_GPIO\_Init\ \ }} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00195}00195\ \ \ \textcolor{keywordflow}{if}(0);} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00196}00196\ \textcolor{preprocessor}{\#ifdef\ USE\_SPI1}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00197}00197\ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}(hspi-\/>Instance==SPI1)} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00198}00198\ \ \ \{} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00199}00199\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00200}00200\ \textcolor{comment}{//\ \ /*\ DMA2\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00201}00201\ \textcolor{comment}{//\ \ \_\_HAL\_RCC\_DMA2\_CLK\_ENABLE();}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00202}00202\ \textcolor{comment}{//\ \ /*\ DMA\ interrupt\ init\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00203}00203\ \textcolor{comment}{//\ \ HAL\_NVIC\_SetPriority(DMA2\_Stream2\_IRQn,\ 0,\ 0);}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00204}00204\ \textcolor{comment}{//\ \ HAL\_NVIC\_EnableIRQ(DMA2\_Stream2\_IRQn);}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00205}00205\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00206}00206\ \ \ \textcolor{comment}{/*\ SPI1\ clock\ reset\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00207}00207\ \ \ \_\_HAL\_RCC\_SPI1\_FORCE\_RESET();} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00208}00208\ \ \ \_\_HAL\_RCC\_SPI1\_RELEASE\_RESET();} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00209}00209\ \ \ \}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00210}00210\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ USE\_SPI1}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00211}00211\ \textcolor{preprocessor}{\#ifdef\ USE\_SPI2}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00212}00212\ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}(hspi-\/>Instance==SPI2)} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00213}00213\ \ \ \{} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00214}00214\ \textcolor{comment}{//\ \ /*\ DMA1\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00215}00215\ \textcolor{comment}{//\ \ \_\_HAL\_RCC\_DMA1\_CLK\_ENABLE();}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00216}00216\ \textcolor{comment}{//\ \ /*\ DMA\ interrupt\ init\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00217}00217\ \textcolor{comment}{//\ \ HAL\_NVIC\_SetPriority(DMA1\_Stream5\_IRQn,\ 0,\ 0);}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00218}00218\ \textcolor{comment}{//\ \ HAL\_NVIC\_EnableIRQ(DMA1\_Stream5\_IRQn);}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00219}00219\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00220}00220\ \ \ \textcolor{comment}{/*\ SPI2\ clock\ reset\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00221}00221\ \ \ \_\_HAL\_RCC\_SPI2\_FORCE\_RESET();} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00222}00222\ \ \ \_\_HAL\_RCC\_SPI2\_RELEASE\_RESET();} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00223}00223\ \ \ \}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00224}00224\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ USE\_SPI2}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00225}00225\ \textcolor{preprocessor}{\#ifdef\ USE\_SPI3}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00226}00226\ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}(hspi-\/>Instance==SPI3)} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00227}00227\ \ \ \{\ \ \ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00228}00228\ \textcolor{comment}{//\ \ /*\ DMA1\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00229}00229\ \textcolor{comment}{//\ \ \_\_HAL\_RCC\_DMA1\_CLK\_ENABLE();}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00230}00230\ \textcolor{comment}{//\ \ /*\ DMA\ interrupt\ init\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00231}00231\ \textcolor{comment}{//\ \ HAL\_NVIC\_SetPriority(DMA1\_Stream1\_IRQn,\ 0,\ 0);}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00232}00232\ \textcolor{comment}{//\ \ HAL\_NVIC\_EnableIRQ(DMA1\_Stream1\_IRQn);}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00233}00233\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00234}00234\ \ \ \textcolor{comment}{/*\ SPI3\ clock\ reset\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00235}00235\ \ \ \_\_HAL\_RCC\_SPI3\_FORCE\_RESET();} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00236}00236\ \ \ \_\_HAL\_RCC\_SPI3\_RELEASE\_RESET();} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00237}00237\ \ \ \}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00238}00238\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ USE\_SPI3}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00239}00239\ \}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00240}00240\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00241}00241\ \textcolor{comment}{/**\ \ }} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00242}00242\ \textcolor{comment}{\ \ *\ @brief\ \ Проверка\ корректности\ структуры\ инициализации\ SPI.}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00243}00243\ \textcolor{comment}{\ \ *\ @param\ \ sspi\ Указатель\ на\ структуру\ с\ настройками\ SPI.}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00244}00244\ \textcolor{comment}{\ \ *\ @return\ HAL\ status.}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00245}00245\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00246}\mbox{\hyperlink{group___m_y___l_i_b_s___s_p_i_ga333dd251bc878931086d48aa932b1a5f}{00246}}\ HAL\_StatusTypeDef\ \mbox{\hyperlink{group___m_y___l_i_b_s___s_p_i_ga333dd251bc878931086d48aa932b1a5f}{SPI\_Check\_Init\_Struct}}(\mbox{\hyperlink{struct_s_p_i___settings_type_def}{SPI\_SettingsTypeDef}}\ *sspi)} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00247}00247\ \{} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00248}00248\ \ \ \textcolor{comment}{//\ check\ is\ settings\ are\ valid}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00249}00249\ \ \ \textcolor{keywordflow}{if}\ (!IS\_SPI\_ALL\_INSTANCE(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_ad203d8b8d67e4f477d002d15b03ba422}{hspi}}.Instance))} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00250}00250\ \ \ \ \ \textcolor{keywordflow}{return}\ HAL\_ERROR;} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00251}00251\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00252}00252\ \ \ \textcolor{comment}{//\ check\ init\ settings}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00253}00253\ \ \ \textcolor{keywordflow}{if}\ (!IS\_SPI\_MODE(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_ad203d8b8d67e4f477d002d15b03ba422}{hspi}}.Init.Mode))} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00254}00254\ \ \ \ \ \textcolor{keywordflow}{return}\ HAL\_ERROR;\ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00255}00255\ \ \ \textcolor{keywordflow}{if}\ (!IS\_SPI\_DIRECTION(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_ad203d8b8d67e4f477d002d15b03ba422}{hspi}}.Init.Direction))} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00256}00256\ \ \ \ \ \textcolor{keywordflow}{return}\ HAL\_ERROR;\ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00257}00257\ \ \ \textcolor{keywordflow}{if}\ (!IS\_SPI\_DATASIZE(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_ad203d8b8d67e4f477d002d15b03ba422}{hspi}}.Init.DataSize))} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00258}00258\ \ \ \ \ \textcolor{keywordflow}{return}\ HAL\_ERROR;\ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00259}00259\ \ \ \textcolor{keywordflow}{if}\ (!IS\_SPI\_BAUDRATE\_PRESCALER(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_ad203d8b8d67e4f477d002d15b03ba422}{hspi}}.Init.BaudRatePrescaler))} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00260}00260\ \ \ \ \ \textcolor{keywordflow}{return}\ HAL\_ERROR;\ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00261}00261\ \ \ \textcolor{keywordflow}{if}\ (!IS\_SPI\_CPOL(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_ad203d8b8d67e4f477d002d15b03ba422}{hspi}}.Init.CLKPolarity))} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00262}00262\ \ \ \ \ \textcolor{keywordflow}{return}\ HAL\_ERROR;\ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00263}00263\ \ \ \textcolor{keywordflow}{if}\ (!IS\_SPI\_CPHA(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_ad203d8b8d67e4f477d002d15b03ba422}{hspi}}.Init.CLKPhase))} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00264}00264\ \ \ \ \ \textcolor{keywordflow}{return}\ HAL\_ERROR;\ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00265}00265\ \ \ \textcolor{keywordflow}{if}\ (!IS\_SPI\_NSS(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_ad203d8b8d67e4f477d002d15b03ba422}{hspi}}.Init.NSS))} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00266}00266\ \ \ \ \ \textcolor{keywordflow}{return}\ HAL\_ERROR;\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00267}00267\ \ \ \textcolor{keywordflow}{if}\ (!IS\_SPI\_FIRST\_BIT(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_ad203d8b8d67e4f477d002d15b03ba422}{hspi}}.Init.FirstBit))} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00268}00268\ \ \ \ \ \textcolor{keywordflow}{return}\ HAL\_ERROR;\ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00269}00269\ \ \ \textcolor{keywordflow}{if}\ (!IS\_SPI\_CRC\_CALCULATION(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_ad203d8b8d67e4f477d002d15b03ba422}{hspi}}.Init.CRCCalculation))} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00270}00270\ \ \ \ \ \textcolor{keywordflow}{return}\ HAL\_ERROR;\ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00271}00271\ \ \ \textcolor{keywordflow}{if}\ (!IS\_SPI\_CRC\_POLYNOMIAL(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_ad203d8b8d67e4f477d002d15b03ba422}{hspi}}.Init.NSS)\ \&\&\ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00272}00272\ \ \ \ \ (sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_ad203d8b8d67e4f477d002d15b03ba422}{hspi}}.Init.CRCCalculation\ !=\ SPI\_CRCCALCULATION\_DISABLE))} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00273}00273\ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ HAL\_ERROR;\ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00274}00274\ \ \ \textcolor{keywordflow}{if}\ (!IS\_SPI\_TIMODE(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_ad203d8b8d67e4f477d002d15b03ba422}{hspi}}.Init.TIMode))} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00275}00275\ \ \ \ \ \textcolor{keywordflow}{return}\ HAL\_ERROR;} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00276}00276\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00277}00277\ \ \ \textcolor{comment}{//\ check\ gpio}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00278}00278\ \ \ \textcolor{keywordflow}{if}\ (!IS\_GPIO\_ALL\_INSTANCE(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_a6a15d48eccf92959de3a086031fdc979}{CLK\_GPIOx}})\ ||\ !IS\_GPIO\_ALL\_INSTANCE(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_a0d55a2941854f61934487f3d209cfa95}{MISO\_GPIOx}})\ ||\ !IS\_GPIO\_ALL\_INSTANCE(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_a0af3bdb273818ff97eb4ff3cff918820}{MOSI\_GPIOx}}))} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00279}00279\ \ \ \ \ \textcolor{keywordflow}{return}\ HAL\_ERROR;\ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00280}00280\ \ \ \textcolor{keywordflow}{if}\ (!IS\_GPIO\_PIN(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_a3bcb1ed12da3544e02e6d36493669bdc}{CLK\_PIN}})\ \&\&\ !IS\_GPIO\_PIN(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_a3366c654d7ec6dd41c6a0b504dc8509a}{MISO\_PIN}})\ \&\&\ !IS\_GPIO\_PIN(sspi-\/>\mbox{\hyperlink{struct_s_p_i___settings_type_def_a961208869faf4a7369aaf4edde75f176}{MOSI\_PIN}}))\ \textcolor{comment}{//\ if\ both\ pins\ arent\ set\ up}} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00281}00281\ \ \ \ \ \textcolor{keywordflow}{return}\ HAL\_ERROR;} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00282}00282\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00283}00283\ \ \ \textcolor{keywordflow}{return}\ HAL\_OK;} +\DoxyCodeLine{\Hypertarget{general__spi_8c_source_l00284}00284\ \}} + +\end{DoxyCode} diff --git a/Doc/latex/general__spi_8h.tex b/Doc/latex/general__spi_8h.tex new file mode 100644 index 0000000..27be6dc --- /dev/null +++ b/Doc/latex/general__spi_8h.tex @@ -0,0 +1,58 @@ +\doxysection{E\+:/.WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs\+General/\+Inc/general\+\_\+spi.h File Reference} +\hypertarget{general__spi_8h}{}\label{general__spi_8h}\index{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibsGeneral/Inc/general\_spi.h@{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibsGeneral/Inc/general\_spi.h}} + + +Заголовочный файл для модуля инициализации SPI. + + +{\ttfamily \#include "{}mylibs\+\_\+defs.\+h"{}}\newline +Include dependency graph for general\+\_\+spi.\+h\+:\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=229pt]{general__spi_8h__incl} +\end{center} +\end{figure} +This graph shows which files directly or indirectly include this file\+:\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=229pt]{general__spi_8h__dep__incl} +\end{center} +\end{figure} +\doxysubsubsection*{Classes} +\begin{DoxyCompactItemize} +\item +struct \mbox{\hyperlink{struct_s_p_i___settings_type_def}{SPI\+\_\+\+Settings\+Type\+Def}} +\begin{DoxyCompactList}\small\item\em Структура настроек SPI. \end{DoxyCompactList}\end{DoxyCompactItemize} +\doxysubsubsection*{Macros} +\begin{DoxyCompactItemize} +\item +\#define \mbox{\hyperlink{group___s_p_i___i_n_i_t_ga8ad4712bf4add56892d057778e826e0c}{HAL\+\_\+\+SPI\+\_\+\+MODULE\+\_\+\+ENABLED}} +\begin{DoxyCompactList}\small\item\em Включение HAL SPI. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___s_p_i___i_n_i_t_ga2fe0c8aeb2c61679f32836fef479eedf}{USE\+\_\+\+SPI1}} +\begin{DoxyCompactList}\small\item\em Включить SPI1 в \doxylink{group___m_y___l_i_b_s___s_p_i_gab9f13318daf02bc5b5f302ae392dccac}{SPI\+\_\+\+Msp\+Init}. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___s_p_i___i_n_i_t_ga53687cddb8e39e76a79b8ffaa152fb2b}{USE\+\_\+\+SPI2}} +\begin{DoxyCompactList}\small\item\em Включить SPI2 в \doxylink{group___m_y___l_i_b_s___s_p_i_gab9f13318daf02bc5b5f302ae392dccac}{SPI\+\_\+\+Msp\+Init}. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___s_p_i___i_n_i_t_ga5fdd6e5934a8005ef05b80f6d95883dc}{USE\+\_\+\+SPI3}} +\begin{DoxyCompactList}\small\item\em Включить SPI3 в \doxylink{group___m_y___l_i_b_s___s_p_i_gab9f13318daf02bc5b5f302ae392dccac}{SPI\+\_\+\+Msp\+Init}. \end{DoxyCompactList}\end{DoxyCompactItemize} +\doxysubsubsection*{Functions} +\begin{DoxyCompactItemize} +\item +HAL\+\_\+\+Status\+Type\+Def \mbox{\hyperlink{group___m_y___l_i_b_s___s_p_i_ga0e177e3c57a8fcdc73b5602e72ec66ba}{SPI\+\_\+\+Base\+\_\+\+Init}} (\mbox{\hyperlink{struct_s_p_i___settings_type_def}{SPI\+\_\+\+Settings\+Type\+Def}} \texorpdfstring{$\ast$}{*}sspi) +\begin{DoxyCompactList}\small\item\em Инициализация SPI с помощью структуры \doxylink{struct_s_p_i___settings_type_def}{SPI\+\_\+\+Settings\+Type\+Def}. \end{DoxyCompactList}\item +HAL\+\_\+\+Status\+Type\+Def \mbox{\hyperlink{group___m_y___l_i_b_s___s_p_i_ga333dd251bc878931086d48aa932b1a5f}{SPI\+\_\+\+Check\+\_\+\+Init\+\_\+\+Struct}} (\mbox{\hyperlink{struct_s_p_i___settings_type_def}{SPI\+\_\+\+Settings\+Type\+Def}} \texorpdfstring{$\ast$}{*}sspi) +\begin{DoxyCompactList}\small\item\em Проверка корректности структуры инициализации SPI. \end{DoxyCompactList}\item +void \mbox{\hyperlink{group___m_y___l_i_b_s___s_p_i_gab9f13318daf02bc5b5f302ae392dccac}{SPI\+\_\+\+Msp\+Init}} (SPI\+\_\+\+Handle\+Type\+Def \texorpdfstring{$\ast$}{*}hspi) +\begin{DoxyCompactList}\small\item\em Настройка тактирования и прерываний SPI. \end{DoxyCompactList}\item +void \mbox{\hyperlink{group___m_y___l_i_b_s___s_p_i_gac279cc3eaa35541edfe330a1844a85e4}{SPI\+\_\+\+Msp\+De\+Init}} (SPI\+\_\+\+Handle\+Type\+Def \texorpdfstring{$\ast$}{*}hspi) +\begin{DoxyCompactList}\small\item\em Деинициализация тактирования и прерываний SPI. \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} +Заголовочный файл для модуля инициализации SPI. + + + +Definition in file \mbox{\hyperlink{general__spi_8h_source}{general\+\_\+spi.\+h}}. + diff --git a/Doc/latex/general__spi_8h__dep__incl.md5 b/Doc/latex/general__spi_8h__dep__incl.md5 new file mode 100644 index 0000000..f5ac2fc --- /dev/null +++ b/Doc/latex/general__spi_8h__dep__incl.md5 @@ -0,0 +1 @@ +fea888aee51476403223144bb4236fba \ No newline at end of file diff --git a/Doc/latex/general__spi_8h__dep__incl.pdf b/Doc/latex/general__spi_8h__dep__incl.pdf new file mode 100644 index 0000000000000000000000000000000000000000..30f2e0dd9e3f1a65645f496302590c9521e7b754 GIT binary patch literal 20677 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 literal 0 HcmV?d00001 diff --git a/Doc/latex/general__spi_8h__incl.md5 b/Doc/latex/general__spi_8h__incl.md5 new file mode 100644 index 0000000..16cfe45 --- /dev/null +++ b/Doc/latex/general__spi_8h__incl.md5 @@ -0,0 +1 @@ +8a3d826e5468561d84d56e799c52cb0a \ No newline at end of file diff --git a/Doc/latex/general__spi_8h__incl.pdf b/Doc/latex/general__spi_8h__incl.pdf new file mode 100644 index 0000000000000000000000000000000000000000..37c629609a701addf0b1952af109e114223a5972 GIT binary patch literal 22499 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ʠ z^UN0%7GdAtOLxCxD-^5PrA4==`G>+}COr)G7{2-{D()Q5LGuyW#cyg1rp0{gNetkA z6+Q=1dC-MjJ^pLuS@_&#$Pi&+RrdCI;-Ab3wg@_kGor06~4Qm<3O? z7=fVwu@z&+qPeb?Cy>{pW}(XNhPlk5sjunR5J~i-s}@{t#ZVBt98zqFY!1+pb~Nc% zZ2|Qdq~qzHWuFsHswK~+cwayMrc1Fb!d4nr#NW`gT>l@Vf-79zMGoy% z76WXwE*W)-vP2^$$^M#RQO9`wDytf&lLm-Lrzn|>gi9P*z>j>Yd%V$$1MmAP=yIF_ z2eKD>w%;YuSrt_F8B~O`U#=DJE-tH^xpag1Oo?}!5==2n(M&H_;o&N8^e3k;B0Ht0 z4n8{XL^h>cE(B~yR-PKCFsHYWm zyVF9b_g-`bCmO@*EOXhepz4EV;@U!A-wgRrT)B3*^EqceU6*R_-O7#;f^+Dv=K^OE zDrYaBn)S=Ryf=O3!f;9-*Le#Twv811v6Yhj9aLii?uJ7I$p2^fJP-pZ-^Bf41xU3vHC;w`c0<-$?v1+{%_nlE91`d&0t{t52>4YO5M!%2ZJ%97EoKn(ekb z1({V8HYe4B1yde3jzsg$Xep3q=6U5mG&N~1GRx)qRkl+%9xF;45pN=h+$-E=-x2wo zoR@FeS&(M_i}`2H)j{F154~Xn0(`LZ3QP+wIBS{)6IGXlIwQs)<2^u)!DgiRL-EGQ zr-pR7#=c#eByQDt?KM1YI>(%V_F8_MCEJF3khM|nrSD&E1pS1IUdpK__&VaQJm`4o z-_RA~@L^g>OuL=wUvBzuq#%hr28I7Ym;FY&?PJ;wscQRBwzKx0Xb+4V&eh|Pn?@3y zN4b!YYZe9;NCP7&ga-!YY;f`Ki&`ibjI%FD;y`}#Q0$Cy^aMd6e~&>TU41}TKr)Jo zFpvxs0s}$7U=r;O426TN4hHGqP|g@M0_*5(4+0-Z5T0mz5+M!_KE$`}uWG+91Cc*u zyJ?`@wCypDPPl_<4pdBV_AX{1_?1zt3wkKFXHcN6zhM#6P2O zIHA{7+yQOwqKB9LeuNIBNR+4j0ln^DBeIX2({Mt0{B~a-^;cgW@)wluA29~W|A9Md zVo5wl4Av1OXO6)lu%4LTf&;VW7(1MkCn<{H|IYzYQj%4MLcmZGTJBGCUqeAbQC407 z0)@f;OY_gP|BvRM3x_R5MMYUS93rp0zpa#xTKR|Kkzq${D?_2OV6c+%0n+au%A~m< z5LtOeCAcCSbVONE9!zoxu1s3^zI`|hDys}rQdHQlWJix9M*gd}q)m5Z*pcRul^>BF zX+r+2ZQtmT?h%iUjQ{s07zF*}zXEABN9-Q@vM=2K9;5{+EnQ8qn0?A8NPfRS|6}9s z$K#(H*YH1}h@@2eUBXFF#KX)uq#`Q*m7V_!P_*o#(e-gKFmU8?b>wYPMrWOJ=OR2Z zIo7!LcGv6CW(kDXV2gA`sPvr=(}v>X8Qq)Us*u}nr*lfze&8GdDV8C5B7id}JQSD+ zV!Z_uqIfSMmW|A&Z-R>m3-K8zvI&r*VWI;k@t?lwAgWVTOj*fj1*2W4Z9*u+83j~f zBVL%0#H_5T=<%n6!$s!AWMc1+dq0Ok!-F+ex&=Q^;m-_t)D3E4zRc+`>bup4on>so z|0wi_U2&9r{yCJYMA&9>9*a8FN;a2ff@QGs9;I)3I~MSL0eP(9)LoWVlgcsYAcTcWWQKW3OKD^N}O}FrpwTn{LHuULS9ygflIXpHZsir+$`^nE~&c)iB zvfe?Z+vosXi@afokuxBc=d4u+f-pPRThtbFgT_llrYOchZ>GEGS9@rsk>tSVMA+~N zDlFh~^laF-K6Y&NFS}Zp-<8ETuO#k-_r0P>18`{hUpE}`I_8ISoX6PAo91<6Ph-Uz zC88qa3QfV6Ej`~*7x2jiayH!WhA-Ty zkt%Bf=*kgqXpI!v)V?Zc5VPRDWF|f#rFLUoRe9v%cf}i~3`FC3$+|3}pO8svxk0(4 zwyghVR-MNl?{t(hYx6bPveQdeQWLv2ezlS3MpZrt1}4gk|K}6tV4MB* zTA=`i{eG!{9ED>ZK4C13?Hvxv*7XyAWb4ueU4 literal 0 HcmV?d00001 diff --git a/Doc/latex/general__spi_8h_source.tex b/Doc/latex/general__spi_8h_source.tex new file mode 100644 index 0000000..df6732d --- /dev/null +++ b/Doc/latex/general__spi_8h_source.tex @@ -0,0 +1,176 @@ +\doxysection{general\+\_\+spi.\+h} +\hypertarget{general__spi_8h_source}{}\label{general__spi_8h_source}\index{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibsGeneral/Inc/general\_spi.h@{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibsGeneral/Inc/general\_spi.h}} +\mbox{\hyperlink{general__spi_8h}{Go to the documentation of this file.}} +\begin{DoxyCode}{0} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00001}00001\ \textcolor{comment}{/**\ }} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00002}00002\ \textcolor{comment}{**************************************************************************}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00003}00003\ \textcolor{comment}{*\ @file\ general\_spi.h}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00004}00004\ \textcolor{comment}{*\ @brief\ Заголовочный\ файл\ для\ модуля\ инициализации\ SPI.}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00005}00005\ \textcolor{comment}{**************************************************************************}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00006}00006\ \textcolor{comment}{*\ @defgroup\ MY\_LIBS\_SPI\ \ \ \ \ \ SPI\ Tools}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00007}00007\ \textcolor{comment}{*\ @ingroup\ \ MYLIBS\_PERIPHERAL}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00008}00008\ \textcolor{comment}{*\ @brief\ \ \ \ Функции\ и\ макросы\ для\ удобной\ работы\ с\ SPI.}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00009}00009\ \textcolor{comment}{*\ @details}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00010}00010\ \textcolor{comment}{Модуль\ предоставляет\ функции\ для\ базовой\ инициализации\ SPI}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00011}00011\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00012}00012\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00013}00013\ \textcolor{comment}{@par\ Пример\ использования:}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00014}00014\ \textcolor{comment}{@code}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00015}00015\ \textcolor{comment}{//\ Структура\ настроек\ SPI}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00016}00016\ \textcolor{comment}{SPI\_SettingsTypeDef\ spi1Settings;}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00017}00017\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00018}00018\ \textcolor{comment}{void\ SPI1\_Init(void)}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00019}00019\ \textcolor{comment}{\{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00020}00020\ \textcolor{comment}{\ \ \ \ //\ Настройка\ SPI1\ как\ Master,\ 8\ бит,\ полный\ дуплекс}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00021}00021\ \textcolor{comment}{\ \ \ \ spi1Settings.hspi.Instance\ =\ SPI1;}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00022}00022\ \textcolor{comment}{\ \ \ \ spi1Settings.hspi.Init.Mode\ =\ SPI\_MODE\_MASTER;}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00023}00023\ \textcolor{comment}{\ \ \ \ spi1Settings.hspi.Init.Direction\ =\ SPI\_DIRECTION\_2LINES;}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00024}00024\ \textcolor{comment}{\ \ \ \ spi1Settings.hspi.Init.DataSize\ =\ SPI\_DATASIZE\_8BIT;}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00025}00025\ \textcolor{comment}{\ \ \ \ spi1Settings.hspi.Init.CLKPolarity\ =\ SPI\_POLARITY\_LOW;}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00026}00026\ \textcolor{comment}{\ \ \ \ spi1Settings.hspi.Init.CLKPhase\ =\ SPI\_PHASE\_1EDGE;}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00027}00027\ \textcolor{comment}{\ \ \ \ spi1Settings.hspi.Init.NSS\ =\ SPI\_NSS\_SOFT;}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00028}00028\ \textcolor{comment}{\ \ \ \ spi1Settings.hspi.Init.BaudRatePrescaler\ =\ SPI\_BAUDRATEPRESCALER\_16;}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00029}00029\ \textcolor{comment}{\ \ \ \ spi1Settings.hspi.Init.FirstBit\ =\ SPI\_FIRSTBIT\_MSB;}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00030}00030\ \textcolor{comment}{\ \ \ \ spi1Settings.hspi.Init.TIMode\ =\ SPI\_TIMODE\_DISABLE;}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00031}00031\ \textcolor{comment}{\ \ \ \ spi1Settings.hspi.Init.CRCCalculation\ =\ SPI\_CRCCALCULATION\_DISABLE;}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00032}00032\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00033}00033\ \textcolor{comment}{\ \ \ \ //\ Настройка\ GPIO}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00034}00034\ \textcolor{comment}{\ \ \ \ spi1Settings.CLK\_GPIOx\ =\ GPIOA;}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00035}00035\ \textcolor{comment}{\ \ \ \ spi1Settings.CLK\_PIN\ =\ GPIO\_PIN\_5;}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00036}00036\ \textcolor{comment}{\ \ \ \ spi1Settings.CLK\_GPIO\_AlternageFunc\ =\ GPIO\_AF5\_SPI1;}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00037}00037\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00038}00038\ \textcolor{comment}{\ \ \ \ spi1Settings.MISO\_GPIOx\ =\ GPIOA;}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00039}00039\ \textcolor{comment}{\ \ \ \ spi1Settings.MISO\_PIN\ =\ GPIO\_PIN\_6;}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00040}00040\ \textcolor{comment}{\ \ \ \ spi1Settings.MISO\_GPIO\_AlternageFunc\ =\ GPIO\_AF5\_SPI1;}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00041}00041\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00042}00042\ \textcolor{comment}{\ \ \ \ spi1Settings.MOSI\_GPIOx\ =\ GPIOA;}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00043}00043\ \textcolor{comment}{\ \ \ \ spi1Settings.MOSI\_PIN\ =\ GPIO\_PIN\_7;}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00044}00044\ \textcolor{comment}{\ \ \ \ spi1Settings.MOSI\_GPIO\_AlternageFunc\ =\ GPIO\_AF5\_SPI1;}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00045}00045\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00046}00046\ \textcolor{comment}{\ \ \ \ //\ Инициализация\ SPI}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00047}00047\ \textcolor{comment}{\ \ \ \ if(SPI\_Base\_Init(\&spi1Settings)\ !=\ HAL\_OK)}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00048}00048\ \textcolor{comment}{\ \ \ \ \{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00049}00049\ \textcolor{comment}{\ \ \ \ \ \ \ \ //\ Обработка\ ошибки}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00050}00050\ \textcolor{comment}{\ \ \ \ \ \ \ \ Error\_Handler();}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00051}00051\ \textcolor{comment}{\ \ \ \ \}}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00052}00052\ \textcolor{comment}{\}}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00053}00053\ \textcolor{comment}{@endcode}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00054}00054\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00055}00055\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00056}00056\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00057}00057\ \textcolor{comment}{*\ \ @note\ Требуется\ подключение\ модуля\ SPI\ в\ библиотеке\ HAL\ }} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00058}00058\ \textcolor{comment}{@code\ }} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00059}00059\ \textcolor{comment}{\#define\ HAL\_SPI\_MODULE\_ENABLED}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00060}00060\ \textcolor{comment}{@endcode}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00061}00061\ \textcolor{comment}{*\ @\{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00062}00062\ \textcolor{comment}{*************************************************************************/}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00063}00063\ \textcolor{preprocessor}{\#ifndef\ \_\_SPI\_GENERAL\_H\_}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00064}00064\ \textcolor{preprocessor}{\#define\ \_\_SPI\_GENERAL\_H\_}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00065}00065\ } +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00066}00066\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00067}00067\ \textcolor{comment}{/////////////////////////////////////////////////////////////////////}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00068}00068\ \textcolor{comment}{/////////////////////////-\/-\/-\/USER\ SETTINGS-\/-\/-\//////////////////////////}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00069}00069\ \textcolor{comment}{/**\ }} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00070}00070\ \textcolor{comment}{\ \ *\ @addtogroup\ SPI\_INIT\ Init\ defines}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00071}00071\ \textcolor{comment}{\ \ *\ @ingroup\ \ \ \ MY\_LIBS\_SPI}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00072}00072\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ \ Настройка\ SPI}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00073}00073\ \textcolor{comment}{\ \ *\ @\{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00074}00074\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00075}\mbox{\hyperlink{group___s_p_i___i_n_i_t_ga8ad4712bf4add56892d057778e826e0c}{00075}}\ \textcolor{preprocessor}{\#define\ HAL\_SPI\_MODULE\_ENABLED\ \ \ }\textcolor{comment}{///<\ Включение\ HAL\ SPI}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00076}00076\ } +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00077}\mbox{\hyperlink{group___s_p_i___i_n_i_t_ga2fe0c8aeb2c61679f32836fef479eedf}{00077}}\ \textcolor{preprocessor}{\#define\ USE\_SPI1\ \ \ \ }\textcolor{comment}{///<\ Включить\ SPI1\ в\ @ref\ SPI\_MspInit}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00078}\mbox{\hyperlink{group___s_p_i___i_n_i_t_ga53687cddb8e39e76a79b8ffaa152fb2b}{00078}}\ \textcolor{preprocessor}{\#define\ USE\_SPI2\ \ \ \ }\textcolor{comment}{///<\ Включить\ SPI2\ в\ @ref\ SPI\_MspInit}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00079}\mbox{\hyperlink{group___s_p_i___i_n_i_t_ga5fdd6e5934a8005ef05b80f6d95883dc}{00079}}\ \textcolor{preprocessor}{\#define\ USE\_SPI3\ \ \ \ }\textcolor{comment}{///<\ Включить\ SPI3\ в\ @ref\ SPI\_MspInit}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00080}00080\ \textcolor{comment}{/**\ SPI\_INIT}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00081}00081\ \textcolor{comment}{\ \ *\ @\}}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00082}00082\ \textcolor{comment}{\ \ */}\textcolor{preprocessor}{}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00083}00083\ \textcolor{comment}{/////////////////////////-\/-\/-\/USER\ SETTINGS-\/-\/-\//////////////////////////}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00084}00084\ \textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{mylibs__defs_8h}{mylibs\_defs.h}}"{}}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00085}00085\ } +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00086}00086\ } +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00087}00087\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00088}00088\ \textcolor{comment}{/////////////////////////////////////////////////////////////////////}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00089}00089\ \textcolor{comment}{////////////////////////////-\/-\/-\/DEFINES-\/-\/-\/////////////////////////////}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00090}00090\ } +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00091}00091\ } +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00092}00092\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00093}00093\ \textcolor{comment}{////////////////////////////-\/-\/-\/DEFINES-\/-\/-\/////////////////////////////}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00094}00094\ } +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00095}00095\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00096}00096\ \textcolor{comment}{/////////////////////////////////////////////////////////////////////}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00097}00097\ \textcolor{comment}{///////////////////////-\/-\/-\/STRUCTURES\ \&\ ENUMS-\/-\/-\///////////////////////}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00098}00098\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00099}00099\ \textcolor{comment}{\ \ *\ @brief\ Структура\ настроек\ SPI}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00100}00100\ \textcolor{comment}{\ \ *\ @details\ Содержит\ все\ необходимые\ параметры\ для\ инициализации\ SPI,}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00101}00101\ \textcolor{comment}{\ \ *\ включая\ GPIO\ и\ DMA.}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00102}00102\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00103}\mbox{\hyperlink{struct_s_p_i___settings_type_def}{00103}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00104}00104\ \{} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00105}\mbox{\hyperlink{struct_s_p_i___settings_type_def_ad203d8b8d67e4f477d002d15b03ba422}{00105}}\ \ \ SPI\_HandleTypeDef\ \mbox{\hyperlink{struct_s_p_i___settings_type_def_ad203d8b8d67e4f477d002d15b03ba422}{hspi}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ HAL\ handle\ SPI}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00106}00106\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00107}\mbox{\hyperlink{struct_s_p_i___settings_type_def_a6a15d48eccf92959de3a086031fdc979}{00107}}\ \ \ GPIO\_TypeDef\ \ *\mbox{\hyperlink{struct_s_p_i___settings_type_def_a6a15d48eccf92959de3a086031fdc979}{CLK\_GPIOx}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Порт\ CLK}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00108}\mbox{\hyperlink{struct_s_p_i___settings_type_def_a3bcb1ed12da3544e02e6d36493669bdc}{00108}}\ \ \ uint32\_t\ \ \ \ \ \ \mbox{\hyperlink{struct_s_p_i___settings_type_def_a3bcb1ed12da3544e02e6d36493669bdc}{CLK\_PIN}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Пин\ CLK}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00109}\mbox{\hyperlink{struct_s_p_i___settings_type_def_a3f3748103a0b7861f6700042fd691ba1}{00109}}\ \ \ uint32\_t\ \ \ \ \ \ \mbox{\hyperlink{struct_s_p_i___settings_type_def_a3f3748103a0b7861f6700042fd691ba1}{CLK\_GPIO\_AlternageFunc}};\ \ \ \textcolor{comment}{///<\ Альтернативная\ функция\ для\ CLK}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00110}00110\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00111}\mbox{\hyperlink{struct_s_p_i___settings_type_def_a0d55a2941854f61934487f3d209cfa95}{00111}}\ \ \ GPIO\_TypeDef\ \ *\mbox{\hyperlink{struct_s_p_i___settings_type_def_a0d55a2941854f61934487f3d209cfa95}{MISO\_GPIOx}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Порт\ MISO}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00112}\mbox{\hyperlink{struct_s_p_i___settings_type_def_a3366c654d7ec6dd41c6a0b504dc8509a}{00112}}\ \ \ uint32\_t\ \ \ \ \ \ \mbox{\hyperlink{struct_s_p_i___settings_type_def_a3366c654d7ec6dd41c6a0b504dc8509a}{MISO\_PIN}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Пин\ MISO}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00113}\mbox{\hyperlink{struct_s_p_i___settings_type_def_aecd7a5c6e205335b8ed229d74cd35d14}{00113}}\ \ \ uint32\_t\ \ \ \ \ \ \mbox{\hyperlink{struct_s_p_i___settings_type_def_aecd7a5c6e205335b8ed229d74cd35d14}{MISO\_GPIO\_AlternageFunc}};\ \ \textcolor{comment}{///<\ Альтернативная\ функция\ для\ MISO}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00114}00114\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00115}\mbox{\hyperlink{struct_s_p_i___settings_type_def_a0af3bdb273818ff97eb4ff3cff918820}{00115}}\ \ \ GPIO\_TypeDef\ \ *\mbox{\hyperlink{struct_s_p_i___settings_type_def_a0af3bdb273818ff97eb4ff3cff918820}{MOSI\_GPIOx}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Порт\ MOSI}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00116}\mbox{\hyperlink{struct_s_p_i___settings_type_def_a961208869faf4a7369aaf4edde75f176}{00116}}\ \ \ uint32\_t\ \ \ \ \ \ \mbox{\hyperlink{struct_s_p_i___settings_type_def_a961208869faf4a7369aaf4edde75f176}{MOSI\_PIN}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Пин\ MOSI}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00117}\mbox{\hyperlink{struct_s_p_i___settings_type_def_afbe75a1c36650a4a9b41fa706a4c7eab}{00117}}\ \ \ uint32\_t\ \ \ \ \ \ \mbox{\hyperlink{struct_s_p_i___settings_type_def_afbe75a1c36650a4a9b41fa706a4c7eab}{MOSI\_GPIO\_AlternageFunc}};\ \ \textcolor{comment}{///<\ Альтернативная\ функция\ для\ MOSI}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00118}00118\ } +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00119}\mbox{\hyperlink{struct_s_p_i___settings_type_def_a3cfd9469b0617a68bbd2a161ba06bb95}{00119}}\ \ \ DMA\_Stream\_TypeDef\ *\mbox{\hyperlink{struct_s_p_i___settings_type_def_a3cfd9469b0617a68bbd2a161ba06bb95}{DMAChannel}};\ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Канал\ DMA\ (NULL\ если\ не\ нужен)}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00120}\mbox{\hyperlink{struct_s_p_i___settings_type_def_aa0edaa145076d2383b3e0095d156d474}{00120}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_s_p_i___settings_type_def_aa0edaa145076d2383b3e0095d156d474}{DMA\_CHANNEL\_X}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Номер\ канала\ DMA\ (0\ если\ не\ нужен)}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00121}00121\ \ \ } +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00122}00122\ \}\ \mbox{\hyperlink{struct_s_p_i___settings_type_def}{SPI\_SettingsTypeDef}};\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00123}00123\ \textcolor{comment}{///////////////////////-\/-\/-\/STRUCTURES\ \&\ ENUMS-\/-\/-\///////////////////////}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00124}00124\ } +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00125}00125\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00126}00126\ \textcolor{comment}{/////////////////////////////////////////////////////////////////////}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00127}00127\ \textcolor{comment}{///////////////////////////-\/-\/-\/FUNCTIONS-\/-\/-\////////////////////////////}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00128}00128\ } +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00129}00129\ \textcolor{comment}{/*\ Инициализация\ SPI\ с\ использованием\ структуры\ настроек\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00130}00130\ HAL\_StatusTypeDef\ \mbox{\hyperlink{group___m_y___l_i_b_s___s_p_i_ga0e177e3c57a8fcdc73b5602e72ec66ba}{SPI\_Base\_Init}}(\mbox{\hyperlink{struct_s_p_i___settings_type_def}{SPI\_SettingsTypeDef}}\ *sspi);} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00131}00131\ } +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00132}00132\ \textcolor{comment}{/*\ Проверка\ корректности\ структуры\ настроек\ SPI\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00133}00133\ HAL\_StatusTypeDef\ \mbox{\hyperlink{group___m_y___l_i_b_s___s_p_i_ga333dd251bc878931086d48aa932b1a5f}{SPI\_Check\_Init\_Struct}}(\mbox{\hyperlink{struct_s_p_i___settings_type_def}{SPI\_SettingsTypeDef}}\ *sspi);} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00134}00134\ } +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00135}00135\ \textcolor{comment}{/*\ Инициализация\ тактирования\ и\ прерываний\ для\ выбранного\ SPI\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00136}00136\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{group___m_y___l_i_b_s___s_p_i_gab9f13318daf02bc5b5f302ae392dccac}{SPI\_MspInit}}(SPI\_HandleTypeDef\ *hspi);} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00137}00137\ } +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00138}00138\ \textcolor{comment}{/*\ Деинициализация\ тактирования\ и\ прерываний\ для\ выбранного\ SPI\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00139}00139\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{group___m_y___l_i_b_s___s_p_i_gac279cc3eaa35541edfe330a1844a85e4}{SPI\_MspDeInit}}(SPI\_HandleTypeDef\ *hspi);} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00140}00140\ } +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00141}00141\ \ \ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00142}00142\ \textcolor{comment}{/**\ }} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00143}00143\ \textcolor{comment}{\ *\ @cond\ SPI\_INTERNAL}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00144}00144\ \textcolor{comment}{\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00145}00145\ } +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00146}00146\ \textcolor{comment}{/*\ Настройка\ GPIO\ для\ SPI\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00147}00147\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{general__spi_8c_ae80d21e5cab86571709a2619442733b5}{SPI\_GPIO\_Init}}(\mbox{\hyperlink{struct_s_p_i___settings_type_def}{SPI\_SettingsTypeDef}}\ *sspi);} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00148}00148\ } +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00149}00149\ \textcolor{comment}{/*\ Настройка\ DMA\ для\ SPI\ */}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00150}00150\ \textcolor{keywordtype}{void}\ SPI\_DMA\_Init(SPI\_HandleTypeDef\ *hspi,\ DMA\_HandleTypeDef\ *hdma\_rx,\ DMA\_Stream\_TypeDef\ *DMAChannel,\ uint32\_t\ DMA\_CHANNEL\_X);} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00151}00151\ } +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00152}00152\ \textcolor{preprocessor}{\#ifndef\ \_\_USER\_LINKDMA}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00153}00153\ \textcolor{comment}{/**\ \ }} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00154}00154\ \textcolor{comment}{\ \ *\ @brief\ \ Аналог\ HAL\ макроса\ для\ привязки\ DMA\ к\ UART.}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00155}00155\ \textcolor{comment}{\ \ *\ @note\ \ \ @ref\ \_\_HAL\_LINKDMA.}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00156}00156\ \textcolor{comment}{\ \ */}\textcolor{preprocessor}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00157}00157\ \textcolor{preprocessor}{\#define\ \_\_USER\_LINKDMA(\_\_HANDLE\_\_,\ \_\_PPP\_DMA\_FIELD\_\_,\ \_\_DMA\_HANDLE\_\_)\ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00158}00158\ \textcolor{preprocessor}{do\{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00159}00159\ \textcolor{preprocessor}{(\_\_HANDLE\_\_)-\/>\_\_PPP\_DMA\_FIELD\_\_\ =\ (\_\_DMA\_HANDLE\_\_);\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00160}00160\ \textcolor{preprocessor}{(\_\_DMA\_HANDLE\_\_)-\/>Parent\ =\ (\_\_HANDLE\_\_);\}\ while(0U)}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00161}00161\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00162}00162\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00163}00163\ \textcolor{comment}{/**\ @endcond\ */}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00164}00164\ \textcolor{comment}{///////////////////////////-\/-\/-\/FUNCTIONS-\/-\/-\////////////////////////////}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00165}00165\ } +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00166}00166\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ \_\_SPI\_GENERAL\_H\_}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00167}00167\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00168}00168\ \textcolor{comment}{/**\ MY\_LIBS\_SPI}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00169}00169\ \textcolor{comment}{\ \ *\ @\}}} +\DoxyCodeLine{\Hypertarget{general__spi_8h_source_l00170}00170\ \textcolor{comment}{\ \ */}} + +\end{DoxyCode} diff --git a/Doc/latex/general__uart_8c.tex b/Doc/latex/general__uart_8c.tex new file mode 100644 index 0000000..204133f --- /dev/null +++ b/Doc/latex/general__uart_8c.tex @@ -0,0 +1,99 @@ +\doxysection{E\+:/.WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs\+General/\+Src/general\+\_\+uart.c File Reference} +\hypertarget{general__uart_8c}{}\label{general__uart_8c}\index{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibsGeneral/Src/general\_uart.c@{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibsGeneral/Src/general\_uart.c}} + + +Модуль для инициализации UART. + + +{\ttfamily \#include "{}general\+\_\+uart.\+h"{}}\newline +{\ttfamily \#include "{}general\+\_\+gpio.\+h"{}}\newline +Include dependency graph for general\+\_\+uart.\+c\+:\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=254pt]{general__uart_8c__incl} +\end{center} +\end{figure} +\doxysubsubsection*{Functions} +\begin{DoxyCompactItemize} +\item +HAL\+\_\+\+Status\+Type\+Def \mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_gab9f07396b778505c934143e89953e154}{UART\+\_\+\+Base\+\_\+\+Init}} (\mbox{\hyperlink{struct_u_a_r_t___settings_type_def}{UART\+\_\+\+Settings\+Type\+Def}} \texorpdfstring{$\ast$}{*}suart) +\begin{DoxyCompactList}\small\item\em Инициализация UART с помощью структуры \doxylink{struct_u_a_r_t___settings_type_def}{UART\+\_\+\+Settings\+Type\+Def}. \end{DoxyCompactList}\item +void \mbox{\hyperlink{general__uart_8c_a3abae05bbde5f3b402bf18ca13dc6a0b}{UART\+\_\+\+GPIO\+\_\+\+Init}} (GPIO\+\_\+\+Type\+Def \texorpdfstring{$\ast$}{*}GPIOx, uint16\+\_\+t GPIO\+\_\+\+PIN\+\_\+\+RX, uint16\+\_\+t GPIO\+\_\+\+PIN\+\_\+\+TX) +\begin{DoxyCompactList}\small\item\em Инициализация GPIO для UART. \end{DoxyCompactList}\item +void \mbox{\hyperlink{general__uart_8c_ad82d0cbd19151675135fd75dad315d05}{UART\+\_\+\+DMA\+\_\+\+Init}} (UART\+\_\+\+Handle\+Type\+Def \texorpdfstring{$\ast$}{*}huart, DMA\+\_\+\+Handle\+Type\+Def \texorpdfstring{$\ast$}{*}hdma\+\_\+rx, DMA\+\_\+\+Stream\+\_\+\+Type\+Def \texorpdfstring{$\ast$}{*}DMAChannel, uint32\+\_\+t DMA\+\_\+\+CHANNEL\+\_\+X) +\begin{DoxyCompactList}\small\item\em Инициализация DMA для UART. \end{DoxyCompactList}\item +void \mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\+\_\+\+Msp\+Init}} (UART\+\_\+\+Handle\+Type\+Def \texorpdfstring{$\ast$}{*}huart) +\begin{DoxyCompactList}\small\item\em Настройка тактирования и прерываний UART. \end{DoxyCompactList}\item +void \mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_ga93ed6ceef4e3b5e7885786125cce93bc}{UART\+\_\+\+Msp\+De\+Init}} (UART\+\_\+\+Handle\+Type\+Def \texorpdfstring{$\ast$}{*}huart) +\begin{DoxyCompactList}\small\item\em Деинициализация тактирования и прерываний UART. \end{DoxyCompactList}\item +HAL\+\_\+\+Status\+Type\+Def \mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_ga2a22e46ecb9e04b2ce197a0e9c09044a}{UART\+\_\+\+Check\+\_\+\+Init\+\_\+\+Struct}} (\mbox{\hyperlink{struct_u_a_r_t___settings_type_def}{UART\+\_\+\+Settings\+Type\+Def}} \texorpdfstring{$\ast$}{*}suart) +\begin{DoxyCompactList}\small\item\em Проверка корректности структуры инициализации UART. \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} +Модуль для инициализации UART. + +Реализация функций для работы с UART\+: +\begin{DoxyItemize} +\item Инициализация UART и его линий RX/\+TX +\item Настройка DMA для UART +\item Настройка GPIO для UART +\item Настройка NVIC и тактирования UART +\end{DoxyItemize} + +Definition in file \mbox{\hyperlink{general__uart_8c_source}{general\+\_\+uart.\+c}}. + + + +\label{doc-func-members} +\Hypertarget{general__uart_8c_doc-func-members} +\doxysubsection{Function Documentation} +\Hypertarget{general__uart_8c_a3abae05bbde5f3b402bf18ca13dc6a0b}\index{general\_uart.c@{general\_uart.c}!UART\_GPIO\_Init@{UART\_GPIO\_Init}} +\index{UART\_GPIO\_Init@{UART\_GPIO\_Init}!general\_uart.c@{general\_uart.c}} +\doxysubsubsection{\texorpdfstring{UART\_GPIO\_Init()}{UART\_GPIO\_Init()}} +{\footnotesize\ttfamily \label{general__uart_8c_a3abae05bbde5f3b402bf18ca13dc6a0b} +void UART\+\_\+\+GPIO\+\_\+\+Init (\begin{DoxyParamCaption}\item[{GPIO\+\_\+\+Type\+Def \texorpdfstring{$\ast$}{*}}]{GPIOx}{, }\item[{uint16\+\_\+t}]{GPIO\+\_\+\+PIN\+\_\+\+RX}{, }\item[{uint16\+\_\+t}]{GPIO\+\_\+\+PIN\+\_\+\+TX}{}\end{DoxyParamCaption})} + + + +Инициализация GPIO для UART. + + +\begin{DoxyParams}{Parameters} +{\em GPIOx} & Порт для настройки. \\ +\hline +{\em GPIO\+\_\+\+PIN\+\_\+\+RX} & Пин для приема. \\ +\hline +{\em GPIO\+\_\+\+PIN\+\_\+\+TX} & Пин для передачи. \\ +\hline +\end{DoxyParams} + + +Definition at line \mbox{\hyperlink{general__uart_8c_source_l00069}{69}} of file \mbox{\hyperlink{general__uart_8c_source}{general\+\_\+uart.\+c}}. + +\Hypertarget{general__uart_8c_ad82d0cbd19151675135fd75dad315d05}\index{general\_uart.c@{general\_uart.c}!UART\_DMA\_Init@{UART\_DMA\_Init}} +\index{UART\_DMA\_Init@{UART\_DMA\_Init}!general\_uart.c@{general\_uart.c}} +\doxysubsubsection{\texorpdfstring{UART\_DMA\_Init()}{UART\_DMA\_Init()}} +{\footnotesize\ttfamily \label{general__uart_8c_ad82d0cbd19151675135fd75dad315d05} +void UART\+\_\+\+DMA\+\_\+\+Init (\begin{DoxyParamCaption}\item[{UART\+\_\+\+Handle\+Type\+Def \texorpdfstring{$\ast$}{*}}]{huart}{, }\item[{DMA\+\_\+\+Handle\+Type\+Def \texorpdfstring{$\ast$}{*}}]{hdma\+\_\+rx}{, }\item[{DMA\+\_\+\+Stream\+\_\+\+Type\+Def \texorpdfstring{$\ast$}{*}}]{DMAChannel}{, }\item[{uint32\+\_\+t}]{DMA\+\_\+\+CHANNEL\+\_\+X}{}\end{DoxyParamCaption})} + + + +Инициализация DMA для UART. + + +\begin{DoxyParams}{Parameters} +{\em huart} & Указатель на хендл UART. \\ +\hline +{\em hdma\+\_\+rx} & Указатель на хендл DMA для линии приема UART. \\ +\hline +{\em DMAChannel} & Указатель на канал DMA/поток DMA в STM32\+F407. \\ +\hline +{\em DMA\+\_\+\+CHANNEL\+\_\+X} & Канал DMA. \\ +\hline +\end{DoxyParams} + + +Definition at line \mbox{\hyperlink{general__uart_8c_source_l00109}{109}} of file \mbox{\hyperlink{general__uart_8c_source}{general\+\_\+uart.\+c}}. + diff --git a/Doc/latex/general__uart_8c__incl.md5 b/Doc/latex/general__uart_8c__incl.md5 new file mode 100644 index 0000000..3238d36 --- /dev/null +++ b/Doc/latex/general__uart_8c__incl.md5 @@ -0,0 +1 @@ +aca5aa942ee268e1ecf62cd6f36f940b \ No newline at end of file diff --git a/Doc/latex/general__uart_8c__incl.pdf b/Doc/latex/general__uart_8c__incl.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6988894c049b7ef519adef1fd2198266080723ac GIT binary patch literal 23053 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 TK@?*_AUI_=6cN!f(PsD;GPIOx,\ suart-\/>GPIO\_PIN\_RX,\ suart-\/>GPIO\_PIN\_TX}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00030}00030\ \textcolor{comment}{\ \ *\ @endcode}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00031}00031\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00032}\mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_gab9f07396b778505c934143e89953e154}{00032}}\ HAL\_StatusTypeDef\ \mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_gab9f07396b778505c934143e89953e154}{UART\_Base\_Init}}(\mbox{\hyperlink{struct_u_a_r_t___settings_type_def}{UART\_SettingsTypeDef}}\ *suart)} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00033}00033\ \{\ \textcolor{comment}{//\ function\ takes\ setting\ structure\ for\ init}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00034}00034\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00035}00035\ \ \ \textcolor{comment}{//\ check\ is\ settings\ are\ valid}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00036}00036\ \ \ \textcolor{keywordflow}{if}(\mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_ga2a22e46ecb9e04b2ce197a0e9c09044a}{UART\_Check\_Init\_Struct}}(suart)\ !=\ HAL\_OK)} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00037}00037\ \ \ \ \ \textcolor{keywordflow}{return}\ HAL\_ERROR;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00038}00038\ \ \ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00039}00039\ \ \ suart-\/>\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_accf2c9448a3ea8eb3b8c25a569276fea}{huart}}.Init.Mode\ =\ UART\_MODE\_TX\_RX;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00040}00040\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00041}00041\ \ \ \mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\_MspInit}}(\&suart-\/>\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_accf2c9448a3ea8eb3b8c25a569276fea}{huart}});} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00042}00042\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00043}00043\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00044}00044\ \ \ \textcolor{keywordflow}{if}\ (HAL\_UART\_Init(\&suart-\/>\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_accf2c9448a3ea8eb3b8c25a569276fea}{huart}})\ !=\ HAL\_OK)} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00045}00045\ \ \ \{} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00046}00046\ \ \ \ \ \mbox{\hyperlink{group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_gae110df81afd885a390bbeb152d7b709f}{MyLibs\_Error\_Handler}}();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00047}00047\ \ \ \ \ \textcolor{keywordflow}{return}\ HAL\_ERROR;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00048}00048\ \ \ \}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00049}00049\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00050}00050\ \ \ \textcolor{comment}{//\ init\ gpio\ from\ UARTSettings\ structure}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00051}00051\ \ \ \mbox{\hyperlink{general__uart_8c_a3abae05bbde5f3b402bf18ca13dc6a0b}{UART\_GPIO\_Init}}(suart-\/>\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_af6f9910d065bae715cdb4a1024143a8f}{GPIOx}},\ suart-\/>\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_a3fba2b52788fe453348b5d92ed52ba49}{GPIO\_PIN\_RX}},\ suart-\/>\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_a5f1babfcfb436cd77f5614253c0a5bef}{GPIO\_PIN\_TX}});} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00052}00052\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00053}00053\ \ \ \_\_HAL\_UART\_ENABLE\_IT(\&suart-\/>\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_accf2c9448a3ea8eb3b8c25a569276fea}{huart}},\ UART\_IT\_IDLE);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00054}00054\ \ \ \textcolor{comment}{//\ init\ dma\ from\ UARTSettings\ structure\ if\ need}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00055}00055\ \ \ \textcolor{keywordflow}{if}\ (suart-\/>\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_a1ecc9ac6a1d2747ade56770cbab6a613}{DMAChannel}}\ !=\ 0)} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00056}00056\ \ \ \ \ \mbox{\hyperlink{general__uart_8c_ad82d0cbd19151675135fd75dad315d05}{UART\_DMA\_Init}}(\&suart-\/>\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_accf2c9448a3ea8eb3b8c25a569276fea}{huart}},\ suart-\/>\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_accf2c9448a3ea8eb3b8c25a569276fea}{huart}}.hdmarx,\ suart-\/>\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_a1ecc9ac6a1d2747ade56770cbab6a613}{DMAChannel}},\ suart-\/>\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_a15ce92b03f7f189bfbe1ab88a5f94d19}{DMA\_CHANNEL\_X}});} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00057}00057\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00058}00058\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00059}00059\ \ \ \textcolor{keywordflow}{return}\ HAL\_OK;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00060}00060\ \}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00061}00061\ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00062}00062\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00063}00063\ \textcolor{comment}{/**\ \ }} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00064}00064\ \textcolor{comment}{\ \ *\ @brief\ \ Инициализация\ GPIO\ для\ UART.}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00065}00065\ \textcolor{comment}{\ \ *\ @param\ \ GPIOx\ \ \ \ \ \ \ Порт\ для\ настройки.}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00066}00066\ \textcolor{comment}{\ \ *\ @param\ \ GPIO\_PIN\_RX\ Пин\ для\ приема.}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00067}00067\ \textcolor{comment}{\ \ *\ @param\ \ GPIO\_PIN\_TX\ Пин\ для\ передачи.}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00068}00068\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00069}\mbox{\hyperlink{general__uart_8c_a3abae05bbde5f3b402bf18ca13dc6a0b}{00069}}\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{general__uart_8c_a3abae05bbde5f3b402bf18ca13dc6a0b}{UART\_GPIO\_Init}}(GPIO\_TypeDef\ *GPIOx,\ uint16\_t\ GPIO\_PIN\_RX,\ uint16\_t\ GPIO\_PIN\_TX)} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00070}00070\ \{\ \textcolor{comment}{//\ function\ takes\ port\ and\ pins\ (for\ rx\ and\ tx)}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00071}00071\ \ \ GPIO\_InitTypeDef\ GPIO\_InitStruct\ =\ \{0\};} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00072}00072\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00073}00073\ \ \ \textcolor{comment}{//\ choose\ port\ for\ enable\ clock}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00074}00074\ \ \ \mbox{\hyperlink{group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l_ga962f010f783b81fcdd27eb6b53db28e6}{GPIO\_Clock\_Enable}}(GPIOx);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00075}00075\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00076}00076\ \ \ \textcolor{comment}{//USART3\ GPIO\ Configuration}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00077}00077\ \ \ \textcolor{comment}{//GPIO\_PIN\_TX\ -\/-\/-\/-\/-\/-\/>\ USART\_TX}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00078}00078\ \ \ \textcolor{comment}{//GPIO\_PIN\_RX\ -\/-\/-\/-\/-\/-\/>\ USART\_RX\ \ \ \ }} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00079}00079\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00080}00080\ \textcolor{preprocessor}{\#if\ defined(STM32F4xx)\ }\textcolor{comment}{//\ gpio\ init\ for\ 407}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00081}00081\ \ \ GPIO\_InitStruct.Pin\ =\ GPIO\_PIN\_TX|GPIO\_PIN\_RX;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00082}00082\ \ \ GPIO\_InitStruct.Mode\ =\ GPIO\_MODE\_AF\_PP;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00083}00083\ \ \ GPIO\_InitStruct.Pull\ =\ GPIO\_NOPULL;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00084}00084\ \ \ GPIO\_InitStruct.Speed\ =\ GPIO\_SPEED\_FREQ\_VERY\_HIGH;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00085}00085\ \ \ GPIO\_InitStruct.Alternate\ =\ GPIO\_AF7\_USART3;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00086}00086\ \ \ HAL\_GPIO\_Init(GPIOx,\ \&GPIO\_InitStruct);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00087}00087\ \textcolor{preprocessor}{\#elif\ defined(STM32F1xx)\ \ }\textcolor{comment}{//\ gpio\ init\ for\ atm403/stm103}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00088}00088\ \ \ \textcolor{comment}{//GPIO\_PIN\_TX\ -\/-\/-\/-\/-\/-\/>\ USART\_TX}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00089}00089\ \ \ GPIO\_InitStruct.Pin\ =\ GPIO\_PIN\_TX;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00090}00090\ \ \ GPIO\_InitStruct.Mode\ =\ GPIO\_MODE\_AF\_PP;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00091}00091\ \ \ GPIO\_InitStruct.Speed\ =\ GPIO\_SPEED\_FREQ\_HIGH;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00092}00092\ \ \ HAL\_GPIO\_Init(GPIOx,\ \&GPIO\_InitStruct);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00093}00093\ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00094}00094\ \textcolor{comment}{//\ \ GPIO\_PIN\_RX\ -\/-\/-\/-\/-\/-\/>\ USART\_RX\ \ }} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00095}00095\ \ \ GPIO\_InitStruct.Pin\ =\ GPIO\_PIN\_RX;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00096}00096\ \ \ GPIO\_InitStruct.Mode\ =\ GPIO\_MODE\_INPUT;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00097}00097\ \ \ GPIO\_InitStruct.Pull\ =\ GPIO\_NOPULL;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00098}00098\ \ \ HAL\_GPIO\_Init(GPIOx,\ \&GPIO\_InitStruct);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00099}00099\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00100}00100\ \}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00101}00101\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00102}00102\ \textcolor{comment}{/**\ \ }} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00103}00103\ \textcolor{comment}{\ \ *\ @brief\ \ Инициализация\ DMA\ для\ UART.}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00104}00104\ \textcolor{comment}{\ \ *\ @param\ \ huart\ \ \ \ \ \ \ \ \ Указатель\ на\ хендл\ UART.}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00105}00105\ \textcolor{comment}{\ \ *\ @param\ \ hdma\_rx\ \ \ \ \ \ \ Указатель\ на\ хендл\ DMA\ для\ линии\ приема\ UART.}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00106}00106\ \textcolor{comment}{\ \ *\ @param\ \ DMAChannel\ \ \ \ Указатель\ на\ канал\ DMA/поток\ DMA\ в\ STM32F407.}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00107}00107\ \textcolor{comment}{\ \ *\ @param\ \ DMA\_CHANNEL\_X\ Канал\ DMA.}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00108}00108\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00109}\mbox{\hyperlink{general__uart_8c_ad82d0cbd19151675135fd75dad315d05}{00109}}\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{general__uart_8c_ad82d0cbd19151675135fd75dad315d05}{UART\_DMA\_Init}}(UART\_HandleTypeDef\ *huart,\ DMA\_HandleTypeDef\ *hdma\_rx,\ DMA\_Stream\_TypeDef\ *DMAChannel,\ uint32\_t\ DMA\_CHANNEL\_X)} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00110}00110\ \{\ \textcolor{comment}{//\ function\ takes\ uart\ and\ dma\ handlers\ and\ dmachannel\ for\ uart}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00111}00111\ \ \ \textcolor{comment}{//\ for\ now\ only\ dma\ rx\ is\ supported,\ tx\ maybe\ later\ if\ needed}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00112}00112\ \ \ \ \ \textcolor{comment}{//\ calc\ defines\ on\ boot\_project\_setup.h}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00113}00113\ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00114}00114\ \ \ \textcolor{comment}{/*\ USART3\ DMA\ Init\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00115}00115\ \ \ \textcolor{comment}{/*\ USART3\_RX\ Init\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00116}00116\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00117}00117\ \ \ hdma\_rx-\/>Instance\ =\ DMAChannel;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00118}00118\ \textcolor{preprocessor}{\#if\ defined(STM32F4xx)\ }\textcolor{comment}{//\ dma\ channel\ choose\ for\ 407}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00119}00119\ \ \ hdma\_rx-\/>Init.Channel\ =\ DMA\_CHANNEL\_X;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00120}00120\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00121}00121\ \ \ hdma\_rx-\/>Init.Direction\ =\ DMA\_PERIPH\_TO\_MEMORY;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00122}00122\ \ \ hdma\_rx-\/>Init.PeriphInc\ =\ DMA\_PINC\_DISABLE;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00123}00123\ \ \ hdma\_rx-\/>Init.MemInc\ =\ DMA\_MINC\_ENABLE;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00124}00124\ \ \ hdma\_rx-\/>Init.PeriphDataAlignment\ =\ DMA\_PDATAALIGN\_BYTE;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00125}00125\ \ \ hdma\_rx-\/>Init.MemDataAlignment\ =\ DMA\_MDATAALIGN\_BYTE;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00126}00126\ \ \ hdma\_rx-\/>Init.Mode\ =\ DMA\_CIRCULAR;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00127}00127\ \ \ hdma\_rx-\/>Init.Priority\ =\ DMA\_PRIORITY\_LOW;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00128}00128\ \ \ \textcolor{keywordflow}{if}\ (HAL\_DMA\_Init(hdma\_rx)\ !=\ HAL\_OK)} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00129}00129\ \ \ \{} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00130}00130\ \ \ \ \ \mbox{\hyperlink{group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_gae110df81afd885a390bbeb152d7b709f}{MyLibs\_Error\_Handler}}();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00131}00131\ \ \ \}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00132}00132\ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00133}00133\ \ \ \_\_USER\_LINKDMA(huart,hdmarx,hdma\_rx);\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00134}00134\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00135}00135\ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00136}00136\ \ \ \textcolor{comment}{//\ \_\_USER\_LINKDMA\ is\ need\ because\ \_\_HAL\_LINKDMA\ is\ written\ for\ global\ defined\ hdma\_rx}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00137}00137\ \ \ \textcolor{comment}{//\ so\ you\ get\ error\ because\ hal\ uses\ .\ insted\ of\ -\/>}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00138}00138\ \}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00139}00139\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00140}00140\ \textcolor{comment}{/**\ \ }} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00141}00141\ \textcolor{comment}{\ \ *\ @brief\ \ Настройка\ тактирования\ и\ прерываний\ UART.}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00142}00142\ \textcolor{comment}{\ \ *\ @param\ \ huart\ Указатель\ на\ хендл\ UART.}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00143}00143\ \textcolor{comment}{\ \ *\ @note\ \ \ Чтобы\ не\ генерировать\ функцию\ с\ иницилизацией\ неиспользуемых\ UART,}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00144}00144\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ \ \ дефайнами\ @ref\ UART\_INIT\ в\ @ref\ general\_uart.h\ определяются\ используемые\ UART.}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00145}00145\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00146}\mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{00146}}\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\_MspInit}}(UART\_HandleTypeDef\ *huart)\ \textcolor{comment}{//\ analog\ for\ hal\ function}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00147}00147\ \{\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00148}00148\ \textcolor{comment}{//\ \ \_\_RCC\_DMA\_UART\_CLK\_ENABLE();}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00149}00149\ \textcolor{comment}{//\ \ /*\ DMA\ interrupt\ init\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00150}00150\ \textcolor{comment}{//\ \ /*\ DMA1\_Stream1\_IRQn\ interrupt\ configuration\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00151}00151\ \textcolor{comment}{//\ \ HAL\_NVIC\_SetPriority(DMA\_UART\_IRQn,\ 0,\ 0);}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00152}00152\ \textcolor{comment}{//\ \ HAL\_NVIC\_EnableIRQ(DMA\_UART\_IRQn);}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00153}00153\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00154}00154\ \ \ \textcolor{comment}{//\ rcc,\ dma\ and\ interrupt\ init\ for\ USARTs}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00155}00155\ \ \ \textcolor{comment}{//\ GPIO\ init\ was\ moved\ to\ own\ functions\ UART\_GPIO\_Init\ \ }} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00156}00156\ \ \ \textcolor{keywordflow}{if}(0);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00157}00157\ \textcolor{preprocessor}{\#ifdef\ USE\_USART1}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00158}00158\ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}(huart-\/>Instance==USART1)} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00159}00159\ \ \ \{} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00160}00160\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00161}00161\ \ \ \textcolor{comment}{/*\ DMA2\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00162}00162\ \ \ \_\_HAL\_RCC\_DMA2\_CLK\_ENABLE();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00163}00163\ \ \ \textcolor{comment}{/*\ DMA\ interrupt\ init\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00164}00164\ \ \ HAL\_NVIC\_SetPriority(DMA2\_Stream2\_IRQn,\ 0,\ 0);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00165}00165\ \ \ HAL\_NVIC\_EnableIRQ(DMA2\_Stream2\_IRQn);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00166}00166\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00167}00167\ \ \ \textcolor{comment}{/*\ USART1\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00168}00168\ \ \ \_\_HAL\_RCC\_USART1\_CLK\_ENABLE();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00169}00169\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00170}00170\ \ \ \textcolor{comment}{/*\ USART1\ interrupt\ Init\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00171}00171\ \ \ HAL\_NVIC\_SetPriority(USART1\_IRQn,\ 0,\ 0);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00172}00172\ \ \ HAL\_NVIC\_EnableIRQ(USART1\_IRQn);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00173}00173\ \ \ \}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00174}00174\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ USE\_USART1}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00175}00175\ \textcolor{preprocessor}{\#ifdef\ USE\_USART2}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00176}00176\ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}(huart-\/>Instance==USART2)} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00177}00177\ \ \ \{} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00178}00178\ \ \ \textcolor{comment}{/*\ DMA1\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00179}00179\ \ \ \_\_HAL\_RCC\_DMA1\_CLK\_ENABLE();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00180}00180\ \ \ \textcolor{comment}{/*\ DMA\ interrupt\ init\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00181}00181\ \ \ HAL\_NVIC\_SetPriority(DMA1\_Stream5\_IRQn,\ 0,\ 0);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00182}00182\ \ \ HAL\_NVIC\_EnableIRQ(DMA1\_Stream5\_IRQn);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00183}00183\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00184}00184\ \ \ \textcolor{comment}{/*\ USART2\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00185}00185\ \ \ \_\_HAL\_RCC\_USART2\_CLK\_ENABLE();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00186}00186\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00187}00187\ \ \ \textcolor{comment}{/*\ USART2\ interrupt\ Init\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00188}00188\ \ \ HAL\_NVIC\_SetPriority(USART2\_IRQn,\ 0,\ 0);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00189}00189\ \ \ HAL\_NVIC\_EnableIRQ(USART2\_IRQn);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00190}00190\ \ \ \}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00191}00191\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ USE\_USART2}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00192}00192\ \textcolor{preprocessor}{\#ifdef\ USE\_USART3}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00193}00193\ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}(huart-\/>Instance==USART3)} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00194}00194\ \ \ \{\ \ \ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00195}00195\ \ \ \textcolor{comment}{/*\ DMA1\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00196}00196\ \ \ \_\_HAL\_RCC\_DMA1\_CLK\_ENABLE();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00197}00197\ \ \ \textcolor{comment}{/*\ DMA\ interrupt\ init\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00198}00198\ \ \ HAL\_NVIC\_SetPriority(DMA1\_Stream1\_IRQn,\ 0,\ 0);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00199}00199\ \ \ HAL\_NVIC\_EnableIRQ(DMA1\_Stream1\_IRQn);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00200}00200\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00201}00201\ \ \ \textcolor{comment}{/*\ USART3\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00202}00202\ \ \ \_\_HAL\_RCC\_USART3\_CLK\_ENABLE();\ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00203}00203\ \ \ \textcolor{comment}{/*\ USART3\ interrupt\ Init\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00204}00204\ \ \ HAL\_NVIC\_SetPriority(USART3\_IRQn,\ 0,\ 0);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00205}00205\ \ \ HAL\_NVIC\_EnableIRQ(USART3\_IRQn);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00206}00206\ \ \ \}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00207}00207\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ USE\_USART3}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00208}00208\ \textcolor{preprocessor}{\#ifdef\ USE\_UART4}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00209}00209\ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}(huart-\/>Instance==UART4)} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00210}00210\ \ \ \{} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00211}00211\ \ \ \textcolor{comment}{/*\ DMA1\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00212}00212\ \ \ \_\_HAL\_RCC\_DMA1\_CLK\_ENABLE();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00213}00213\ \ \ \textcolor{comment}{/*\ DMA\ interrupt\ init\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00214}00214\ \ \ HAL\_NVIC\_SetPriority(DMA1\_Stream2\_IRQn,\ 0,\ 0);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00215}00215\ \ \ HAL\_NVIC\_EnableIRQ(DMA1\_Stream2\_IRQn);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00216}00216\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00217}00217\ \ \ \textcolor{comment}{/*\ UART4\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00218}00218\ \ \ \_\_HAL\_RCC\_UART4\_CLK\_ENABLE();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00219}00219\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00220}00220\ \ \ \textcolor{comment}{/*\ UART4\ interrupt\ Init\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00221}00221\ \ \ HAL\_NVIC\_SetPriority(UART4\_IRQn,\ 0,\ 0);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00222}00222\ \ \ HAL\_NVIC\_EnableIRQ(UART4\_IRQn);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00223}00223\ \ \ \}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00224}00224\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ USE\_UART4}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00225}00225\ \textcolor{preprocessor}{\#ifdef\ USE\_UART5}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00226}00226\ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}(huart-\/>Instance==UART5)} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00227}00227\ \ \ \{} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00228}00228\ \ \ \textcolor{comment}{/*\ DMA1\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00229}00229\ \ \ \_\_HAL\_RCC\_DMA1\_CLK\_ENABLE();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00230}00230\ \ \ \textcolor{comment}{/*\ DMA\ interrupt\ init\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00231}00231\ \ \ HAL\_NVIC\_SetPriority(DMA1\_Stream0\_IRQn,\ 0,\ 0);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00232}00232\ \ \ HAL\_NVIC\_EnableIRQ(DMA1\_Stream0\_IRQn);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00233}00233\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00234}00234\ \ \ \textcolor{comment}{/*\ UART5\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00235}00235\ \ \ \_\_HAL\_RCC\_DMA1\_CLK\_ENABLE();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00236}00236\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00237}00237\ \ \ \textcolor{comment}{/*\ UART5\ interrupt\ Init\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00238}00238\ \ \ HAL\_NVIC\_SetPriority(UART5\_IRQn,\ 0,\ 0);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00239}00239\ \ \ HAL\_NVIC\_EnableIRQ(UART5\_IRQn);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00240}00240\ \ \ \}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00241}00241\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ USE\_UART5}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00242}00242\ \textcolor{preprocessor}{\#ifdef\ USE\_USART6}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00243}00243\ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}(huart-\/>Instance==USART6)} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00244}00244\ \ \ \{} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00245}00245\ \ \ \textcolor{comment}{/*\ DMA2\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00246}00246\ \ \ \_\_HAL\_RCC\_DMA2\_CLK\_ENABLE();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00247}00247\ \ \ \textcolor{comment}{/*\ DMA\ interrupt\ init\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00248}00248\ \ \ HAL\_NVIC\_SetPriority(DMA2\_Stream1\_IRQn,\ 0,\ 0);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00249}00249\ \ \ HAL\_NVIC\_EnableIRQ(DMA2\_Stream1\_IRQn);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00250}00250\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00251}00251\ \ \ \textcolor{comment}{/*\ USART6\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00252}00252\ \ \ \_\_HAL\_RCC\_USART6\_CLK\_ENABLE();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00253}00253\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00254}00254\ \ \ \textcolor{comment}{/*\ USART6\ interrupt\ Init\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00255}00255\ \ \ HAL\_NVIC\_SetPriority(USART6\_IRQn,\ 0,\ 0);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00256}00256\ \ \ HAL\_NVIC\_EnableIRQ(USART6\_IRQn);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00257}00257\ \ \ \}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00258}00258\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ USE\_USART6}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00259}00259\ \}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00260}00260\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00261}00261\ \textcolor{comment}{/**\ \ }} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00262}00262\ \textcolor{comment}{\ \ *\ @brief\ \ Деинициализация\ тактирования\ и\ прерываний\ UART.}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00263}00263\ \textcolor{comment}{\ \ *\ @param\ \ huart\ Указатель\ на\ хендл\ UART.}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00264}00264\ \textcolor{comment}{\ \ *\ @note\ \ \ Чтобы\ не\ генерировать\ функцию\ с\ деиницилизацией\ неиспользуемых\ UART,}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00265}00265\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ \ \ \ дефайнами\ @ref\ UART\_INIT\ в\ @ref\ general\_uart.h\ определяются\ используемые\ UART.}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00266}00266\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00267}\mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_ga93ed6ceef4e3b5e7885786125cce93bc}{00267}}\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_ga93ed6ceef4e3b5e7885786125cce93bc}{UART\_MspDeInit}}(UART\_HandleTypeDef\ *huart)\ \textcolor{comment}{//\ analog\ for\ hal\ function}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00268}00268\ \{\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00269}00269\ \ \ \textcolor{comment}{//\ rcc,\ dma\ and\ interrupt\ init\ for\ USARTs}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00270}00270\ \ \ \textcolor{comment}{//\ GPIO\ init\ was\ moved\ to\ own\ functions\ UART\_GPIO\_Init\ \ }} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00271}00271\ \ \ \textcolor{keywordflow}{if}(0);} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00272}00272\ \textcolor{preprocessor}{\#ifdef\ USE\_USART1}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00273}00273\ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}(huart-\/>Instance==USART1)} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00274}00274\ \ \ \{} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00275}00275\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00276}00276\ \textcolor{comment}{//\ \ /*\ DMA2\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00277}00277\ \textcolor{comment}{//\ \ \_\_HAL\_RCC\_DMA2\_CLK\_ENABLE();}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00278}00278\ \textcolor{comment}{//\ \ /*\ DMA\ interrupt\ init\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00279}00279\ \textcolor{comment}{//\ \ HAL\_NVIC\_SetPriority(DMA2\_Stream2\_IRQn,\ 0,\ 0);}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00280}00280\ \textcolor{comment}{//\ \ HAL\_NVIC\_EnableIRQ(DMA2\_Stream2\_IRQn);}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00281}00281\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00282}00282\ \ \ \textcolor{comment}{/*\ USART1\ clock\ reset\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00283}00283\ \ \ \_\_HAL\_RCC\_USART1\_FORCE\_RESET();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00284}00284\ \ \ \_\_HAL\_RCC\_USART1\_RELEASE\_RESET();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00285}00285\ \ \ \}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00286}00286\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ USE\_USART1}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00287}00287\ \textcolor{preprocessor}{\#ifdef\ USE\_USART2}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00288}00288\ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}(huart-\/>Instance==USART2)} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00289}00289\ \ \ \{} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00290}00290\ \textcolor{comment}{//\ \ /*\ DMA1\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00291}00291\ \textcolor{comment}{//\ \ \_\_HAL\_RCC\_DMA1\_CLK\_ENABLE();}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00292}00292\ \textcolor{comment}{//\ \ /*\ DMA\ interrupt\ init\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00293}00293\ \textcolor{comment}{//\ \ HAL\_NVIC\_SetPriority(DMA1\_Stream5\_IRQn,\ 0,\ 0);}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00294}00294\ \textcolor{comment}{//\ \ HAL\_NVIC\_EnableIRQ(DMA1\_Stream5\_IRQn);}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00295}00295\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00296}00296\ \ \ \textcolor{comment}{/*\ USART2\ clock\ reset\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00297}00297\ \ \ \_\_HAL\_RCC\_USART2\_FORCE\_RESET();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00298}00298\ \ \ \_\_HAL\_RCC\_USART2\_RELEASE\_RESET();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00299}00299\ \ \ \}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00300}00300\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ USE\_USART2}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00301}00301\ \textcolor{preprocessor}{\#ifdef\ USE\_USART3}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00302}00302\ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}(huart-\/>Instance==USART3)} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00303}00303\ \ \ \{\ \ \ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00304}00304\ \textcolor{comment}{//\ \ /*\ DMA1\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00305}00305\ \textcolor{comment}{//\ \ \_\_HAL\_RCC\_DMA1\_CLK\_ENABLE();}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00306}00306\ \textcolor{comment}{//\ \ /*\ DMA\ interrupt\ init\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00307}00307\ \textcolor{comment}{//\ \ HAL\_NVIC\_SetPriority(DMA1\_Stream1\_IRQn,\ 0,\ 0);}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00308}00308\ \textcolor{comment}{//\ \ HAL\_NVIC\_EnableIRQ(DMA1\_Stream1\_IRQn);}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00309}00309\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00310}00310\ \ \ \textcolor{comment}{/*\ USART3\ clock\ reset\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00311}00311\ \ \ \_\_HAL\_RCC\_USART3\_FORCE\_RESET();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00312}00312\ \ \ \_\_HAL\_RCC\_USART3\_RELEASE\_RESET();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00313}00313\ \ \ \}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00314}00314\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ USE\_USART3}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00315}00315\ \textcolor{preprocessor}{\#ifdef\ USE\_UART4}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00316}00316\ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}(huart-\/>Instance==UART4)} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00317}00317\ \ \ \{} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00318}00318\ \textcolor{comment}{//\ \ /*\ DMA1\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00319}00319\ \textcolor{comment}{//\ \ \_\_HAL\_RCC\_DMA1\_CLK\_ENABLE();}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00320}00320\ \textcolor{comment}{//\ \ /*\ DMA\ interrupt\ init\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00321}00321\ \textcolor{comment}{//\ \ HAL\_NVIC\_SetPriority(DMA1\_Stream2\_IRQn,\ 0,\ 0);}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00322}00322\ \textcolor{comment}{//\ \ HAL\_NVIC\_EnableIRQ(DMA1\_Stream2\_IRQn);}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00323}00323\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00324}00324\ \ \ \textcolor{comment}{/*\ UART4\ clock\ reset\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00325}00325\ \ \ \_\_HAL\_RCC\_UART4\_FORCE\_RESET();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00326}00326\ \ \ \_\_HAL\_RCC\_UART4\_RELEASE\_RESET();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00327}00327\ \ \ \}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00328}00328\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ USE\_UART4}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00329}00329\ \textcolor{preprocessor}{\#ifdef\ USE\_UART5}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00330}00330\ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}(huart-\/>Instance==UART5)} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00331}00331\ \ \ \{} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00332}00332\ \textcolor{comment}{//\ \ /*\ DMA1\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00333}00333\ \textcolor{comment}{//\ \ \_\_HAL\_RCC\_DMA1\_CLK\_ENABLE();}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00334}00334\ \textcolor{comment}{//\ \ /*\ DMA\ interrupt\ init\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00335}00335\ \textcolor{comment}{//\ \ HAL\_NVIC\_SetPriority(DMA1\_Stream0\_IRQn,\ 0,\ 0);}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00336}00336\ \textcolor{comment}{//\ \ HAL\_NVIC\_EnableIRQ(DMA1\_Stream0\_IRQn);}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00337}00337\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00338}00338\ \ \ \textcolor{comment}{/*\ UART5\ clock\ reset\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00339}00339\ \ \ \_\_HAL\_RCC\_UART5\_FORCE\_RESET();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00340}00340\ \ \ \_\_HAL\_RCC\_UART5\_RELEASE\_RESET();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00341}00341\ \ \ \}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00342}00342\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ USE\_UART5}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00343}00343\ \textcolor{preprocessor}{\#ifdef\ USE\_USART6}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00344}00344\ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}(huart-\/>Instance==USART6)} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00345}00345\ \ \ \{} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00346}00346\ \textcolor{comment}{//\ \ /*\ DMA2\ clock\ enable\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00347}00347\ \textcolor{comment}{//\ \ \_\_HAL\_RCC\_DMA2\_CLK\_ENABLE();}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00348}00348\ \textcolor{comment}{//\ \ /*\ DMA\ interrupt\ init\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00349}00349\ \textcolor{comment}{//\ \ HAL\_NVIC\_SetPriority(DMA2\_Stream1\_IRQn,\ 0,\ 0);}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00350}00350\ \textcolor{comment}{//\ \ HAL\_NVIC\_EnableIRQ(DMA2\_Stream1\_IRQn);}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00351}00351\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00352}00352\ \ \ \textcolor{comment}{/*\ USART6\ clock\ reset\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00353}00353\ \ \ \_\_HAL\_RCC\_USART6\_FORCE\_RESET();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00354}00354\ \ \ \_\_HAL\_RCC\_USART6\_RELEASE\_RESET();} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00355}00355\ \ \ \}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00356}00356\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ USE\_USART6}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00357}00357\ \}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00358}00358\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00359}00359\ \textcolor{comment}{/**\ \ }} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00360}00360\ \textcolor{comment}{\ \ *\ @brief\ \ Проверка\ корректности\ структуры\ инициализации\ UART.}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00361}00361\ \textcolor{comment}{\ \ *\ @param\ \ suart\ Указатель\ на\ структуру\ с\ настройками\ UART.}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00362}00362\ \textcolor{comment}{\ \ *\ @return\ HAL\ status.}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00363}00363\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00364}\mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_ga2a22e46ecb9e04b2ce197a0e9c09044a}{00364}}\ HAL\_StatusTypeDef\ \mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_ga2a22e46ecb9e04b2ce197a0e9c09044a}{UART\_Check\_Init\_Struct}}(\mbox{\hyperlink{struct_u_a_r_t___settings_type_def}{UART\_SettingsTypeDef}}\ *suart)} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00365}00365\ \{} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00366}00366\ \ \ \textcolor{comment}{//\ check\ is\ settings\ are\ valid}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00367}00367\ \ \ \textcolor{keywordflow}{if}\ (!IS\_UART\_INSTANCE(suart-\/>\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_accf2c9448a3ea8eb3b8c25a569276fea}{huart}}.Instance))} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00368}00368\ \ \ \ \ \textcolor{keywordflow}{return}\ HAL\_ERROR;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00369}00369\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00370}00370\ \ \ \textcolor{keywordflow}{if}\ (!IS\_UART\_BAUDRATE(suart-\/>\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_accf2c9448a3ea8eb3b8c25a569276fea}{huart}}.Init.BaudRate)\ ||\ (suart-\/>\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_accf2c9448a3ea8eb3b8c25a569276fea}{huart}}.Init.BaudRate\ ==\ NULL))} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00371}00371\ \ \ \ \ \textcolor{keywordflow}{return}\ HAL\_ERROR;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00372}00372\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00373}00373\ \ \ \textcolor{keywordflow}{if}\ (!IS\_GPIO\_ALL\_INSTANCE(suart-\/>\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_af6f9910d065bae715cdb4a1024143a8f}{GPIOx}}))} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00374}00374\ \ \ \ \ \textcolor{keywordflow}{return}\ HAL\_ERROR;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00375}00375\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00376}00376\ \ \ \textcolor{keywordflow}{if}\ (!IS\_GPIO\_PIN(suart-\/>\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_a3fba2b52788fe453348b5d92ed52ba49}{GPIO\_PIN\_RX}})\ \&\&\ !IS\_GPIO\_PIN(suart-\/>\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_a5f1babfcfb436cd77f5614253c0a5bef}{GPIO\_PIN\_TX}}))\ \textcolor{comment}{//\ if\ both\ pins\ arent\ set\ up}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00377}00377\ \ \ \ \ \textcolor{keywordflow}{return}\ HAL\_ERROR;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00378}00378\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00379}00379\ \ \ \textcolor{keywordflow}{return}\ HAL\_OK;} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00380}00380\ \}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00381}00381\ } +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00382}00382\ \textcolor{comment}{//-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/UART\ INIT\ FUNCTIONS-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/}} +\DoxyCodeLine{\Hypertarget{general__uart_8c_source_l00383}00383\ \textcolor{comment}{//-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/}} + +\end{DoxyCode} diff --git a/Doc/latex/general__uart_8h.tex b/Doc/latex/general__uart_8h.tex new file mode 100644 index 0000000..717023b --- /dev/null +++ b/Doc/latex/general__uart_8h.tex @@ -0,0 +1,64 @@ +\doxysection{E\+:/.WORK/\+STM32/\+STM32\+\_\+\+Extended\+Libs/\+My\+Libs\+General/\+Inc/general\+\_\+uart.h File Reference} +\hypertarget{general__uart_8h}{}\label{general__uart_8h}\index{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibsGeneral/Inc/general\_uart.h@{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibsGeneral/Inc/general\_uart.h}} + + +Заголовочный файл для модуля инициализации UART. + + +{\ttfamily \#include "{}mylibs\+\_\+defs.\+h"{}}\newline +Include dependency graph for general\+\_\+uart.\+h\+:\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=229pt]{general__uart_8h__incl} +\end{center} +\end{figure} +This graph shows which files directly or indirectly include this file\+:\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=229pt]{general__uart_8h__dep__incl} +\end{center} +\end{figure} +\doxysubsubsection*{Classes} +\begin{DoxyCompactItemize} +\item +struct \mbox{\hyperlink{struct_u_a_r_t___settings_type_def}{UART\+\_\+\+Settings\+Type\+Def}} +\begin{DoxyCompactList}\small\item\em Структура настроек UART. \end{DoxyCompactList}\end{DoxyCompactItemize} +\doxysubsubsection*{Macros} +\begin{DoxyCompactItemize} +\item +\#define \mbox{\hyperlink{group___u_a_r_t___i_n_i_t_ga167269406e73327b95c3bb7b9cfe6d89}{HAL\+\_\+\+UART\+\_\+\+MODULE\+\_\+\+ENABLED}} +\begin{DoxyCompactList}\small\item\em Включение HAL UART. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___u_a_r_t___i_n_i_t_gace54f148bb1d72f13bf397d096d38d1b}{USE\+\_\+\+USART1}} +\begin{DoxyCompactList}\small\item\em Включить USART1 в \doxylink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\+\_\+\+Msp\+Init}. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___u_a_r_t___i_n_i_t_gaacb3968508217a0d8b3f64aa0c8aa07d}{USE\+\_\+\+USART2}} +\begin{DoxyCompactList}\small\item\em Включить USART2 в \doxylink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\+\_\+\+Msp\+Init}. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___u_a_r_t___i_n_i_t_ga6dadd967b428aade24008ec060009976}{USE\+\_\+\+USART3}} +\begin{DoxyCompactList}\small\item\em Включить USART3 в \doxylink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\+\_\+\+Msp\+Init}. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___u_a_r_t___i_n_i_t_ga779530e93e7aa1f25eb13045ec42b8e7}{USE\+\_\+\+UART4}} +\begin{DoxyCompactList}\small\item\em Включить UART4 в \doxylink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\+\_\+\+Msp\+Init}. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___u_a_r_t___i_n_i_t_ga592c6bf4a6496d6806ba0838cdfa2340}{USE\+\_\+\+UART5}} +\begin{DoxyCompactList}\small\item\em Включить UART5 в \doxylink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\+\_\+\+Msp\+Init}. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___u_a_r_t___i_n_i_t_gafaeb8bdd4aa7fb1987505530daa90868}{USE\+\_\+\+USART6}} +\begin{DoxyCompactList}\small\item\em Включить USART6 в \doxylink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\+\_\+\+Msp\+Init}. \end{DoxyCompactList}\end{DoxyCompactItemize} +\doxysubsubsection*{Functions} +\begin{DoxyCompactItemize} +\item +HAL\+\_\+\+Status\+Type\+Def \mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_gab9f07396b778505c934143e89953e154}{UART\+\_\+\+Base\+\_\+\+Init}} (\mbox{\hyperlink{struct_u_a_r_t___settings_type_def}{UART\+\_\+\+Settings\+Type\+Def}} \texorpdfstring{$\ast$}{*}suart) +\begin{DoxyCompactList}\small\item\em Инициализация UART с помощью структуры \doxylink{struct_u_a_r_t___settings_type_def}{UART\+\_\+\+Settings\+Type\+Def}. \end{DoxyCompactList}\item +HAL\+\_\+\+Status\+Type\+Def \mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_ga2a22e46ecb9e04b2ce197a0e9c09044a}{UART\+\_\+\+Check\+\_\+\+Init\+\_\+\+Struct}} (\mbox{\hyperlink{struct_u_a_r_t___settings_type_def}{UART\+\_\+\+Settings\+Type\+Def}} \texorpdfstring{$\ast$}{*}suart) +\begin{DoxyCompactList}\small\item\em Проверка корректности структуры инициализации UART. \end{DoxyCompactList}\item +void \mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\+\_\+\+Msp\+Init}} (UART\+\_\+\+Handle\+Type\+Def \texorpdfstring{$\ast$}{*}huart) +\begin{DoxyCompactList}\small\item\em Настройка тактирования и прерываний UART. \end{DoxyCompactList}\item +void \mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_ga93ed6ceef4e3b5e7885786125cce93bc}{UART\+\_\+\+Msp\+De\+Init}} (UART\+\_\+\+Handle\+Type\+Def \texorpdfstring{$\ast$}{*}huart) +\begin{DoxyCompactList}\small\item\em Деинициализация тактирования и прерываний UART. \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} +Заголовочный файл для модуля инициализации UART. + + + +Definition in file \mbox{\hyperlink{general__uart_8h_source}{general\+\_\+uart.\+h}}. + diff --git a/Doc/latex/general__uart_8h__dep__incl.md5 b/Doc/latex/general__uart_8h__dep__incl.md5 new file mode 100644 index 0000000..389d754 --- /dev/null +++ b/Doc/latex/general__uart_8h__dep__incl.md5 @@ -0,0 +1 @@ +7baa47c3e07d62541ed2b703b2008261 \ No newline at end of file diff --git a/Doc/latex/general__uart_8h__dep__incl.pdf b/Doc/latex/general__uart_8h__dep__incl.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9be1d44757a147d5685b0d34d355b4b49df3a49e GIT binary patch literal 20651 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 Y2T+&+!A$<%_@xoA4~4_cY|Wwn1u0#AM*si- literal 0 HcmV?d00001 diff --git a/Doc/latex/general__uart_8h__incl.md5 b/Doc/latex/general__uart_8h__incl.md5 new file mode 100644 index 0000000..a5e6dee --- /dev/null +++ b/Doc/latex/general__uart_8h__incl.md5 @@ -0,0 +1 @@ +7d0dbc4788a1c22d3b92320c194dfaad \ No newline at end of file diff --git a/Doc/latex/general__uart_8h__incl.pdf b/Doc/latex/general__uart_8h__incl.pdf new file mode 100644 index 0000000000000000000000000000000000000000..053acc6dbe4ecffe5139203a4476e6b96c1ff3d5 GIT binary patch literal 22463 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 literal 0 HcmV?d00001 diff --git a/Doc/latex/general__uart_8h_source.tex b/Doc/latex/general__uart_8h_source.tex new file mode 100644 index 0000000..afc8879 --- /dev/null +++ b/Doc/latex/general__uart_8h_source.tex @@ -0,0 +1,162 @@ +\doxysection{general\+\_\+uart.\+h} +\hypertarget{general__uart_8h_source}{}\label{general__uart_8h_source}\index{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibsGeneral/Inc/general\_uart.h@{E:/.WORK/STM32/STM32\_ExtendedLibs/MyLibsGeneral/Inc/general\_uart.h}} +\mbox{\hyperlink{general__uart_8h}{Go to the documentation of this file.}} +\begin{DoxyCode}{0} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00001}00001\ \textcolor{comment}{/**\ }} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00002}00002\ \textcolor{comment}{**************************************************************************}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00003}00003\ \textcolor{comment}{*\ @file\ general\_uart.h}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00004}00004\ \textcolor{comment}{*\ @brief\ Заголовочный\ файл\ для\ модуля\ инициализации\ UART.}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00005}00005\ \textcolor{comment}{**************************************************************************}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00006}00006\ \textcolor{comment}{*\ @defgroup\ MY\_LIBS\_UART\ \ \ \ \ \ UART\ Tools}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00007}00007\ \textcolor{comment}{*\ @ingroup\ \ MYLIBS\_PERIPHERAL}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00008}00008\ \textcolor{comment}{*\ @brief\ \ \ \ Функции\ и\ макросы\ для\ удобной\ работы\ с\ UART.}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00009}00009\ \textcolor{comment}{*\ @details}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00010}00010\ \textcolor{comment}{Модуль\ предоставляет\ функции\ для\ базовой\ инициализации\ UART}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00011}00011\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00012}00012\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00013}00013\ \textcolor{comment}{@par\ Пример\ использования:}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00014}00014\ \textcolor{comment}{@code}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00015}00015\ \textcolor{comment}{//\ Структура\ настроек\ UART}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00016}00016\ \textcolor{comment}{UART\_SettingsTypeDef\ uart2Settings;}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00017}00017\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00018}00018\ \textcolor{comment}{void\ UART2\_Init(void)}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00019}00019\ \textcolor{comment}{\{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00020}00020\ \textcolor{comment}{\ \ \ \ //\ Настройка\ UART2\ с\ 115200\ бод,\ 8\ бит,\ 1\ стоп-\/бит,\ без\ паритета}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00021}00021\ \textcolor{comment}{\ \ \ \ uart2Settings.huart.Instance\ =\ USART2;}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00022}00022\ \textcolor{comment}{\ \ \ \ uart2Settings.huart.Init.BaudRate\ =\ 115200;}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00023}00023\ \textcolor{comment}{\ \ \ \ uart2Settings.huart.Init.WordLength\ =\ UART\_WORDLENGTH\_8B;}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00024}00024\ \textcolor{comment}{\ \ \ \ uart2Settings.huart.Init.StopBits\ =\ UART\_STOPBITS\_1;}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00025}00025\ \textcolor{comment}{\ \ \ \ uart2Settings.huart.Init.Parity\ =\ UART\_PARITY\_NONE;}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00026}00026\ \textcolor{comment}{\ \ \ \ uart2Settings.huart.Init.Mode\ =\ UART\_MODE\_TX\_RX;}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00027}00027\ \textcolor{comment}{\ \ \ \ uart2Settings.huart.Init.HwFlowCtl\ =\ UART\_HWCONTROL\_NONE;}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00028}00028\ \textcolor{comment}{\ \ \ \ uart2Settings.huart.Init.OverSampling\ =\ UART\_OVERSAMPLING\_16;}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00029}00029\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00030}00030\ \textcolor{comment}{\ \ \ \ //\ Настройка\ GPIO}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00031}00031\ \textcolor{comment}{\ \ \ \ uart2Settings.GPIOx\ =\ GPIOA;}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00032}00032\ \textcolor{comment}{\ \ \ \ uart2Settings.GPIO\_PIN\_TX\ =\ GPIO\_PIN\_2;}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00033}00033\ \textcolor{comment}{\ \ \ \ uart2Settings.GPIO\_PIN\_RX\ =\ GPIO\_PIN\_3;}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00034}00034\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00035}00035\ \textcolor{comment}{\ \ \ \ //\ DMA\ не\ используется\ в\ этом\ примере}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00036}00036\ \textcolor{comment}{\ \ \ \ uart2Settings.DMAChannel\ =\ NULL;}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00037}00037\ \textcolor{comment}{\ \ \ \ uart2Settings.DMA\_CHANNEL\_X\ =\ 0;}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00038}00038\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00039}00039\ \textcolor{comment}{\ \ \ \ //\ Инициализация\ UART}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00040}00040\ \textcolor{comment}{\ \ \ \ if(UART\_Base\_Init(\&uart2Settings)\ !=\ HAL\_OK)}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00041}00041\ \textcolor{comment}{\ \ \ \ \{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00042}00042\ \textcolor{comment}{\ \ \ \ \ \ \ \ //\ Обработка\ ошибки}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00043}00043\ \textcolor{comment}{\ \ \ \ \ \ \ \ Error\_Handler();}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00044}00044\ \textcolor{comment}{\ \ \ \ \}}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00045}00045\ \textcolor{comment}{\}}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00046}00046\ \textcolor{comment}{@endcode}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00047}00047\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00048}00048\ \textcolor{comment}{*\ \ @note\ Требуется\ подключение\ модуля\ UART\ в\ библиотеке\ HAL\ }} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00049}00049\ \textcolor{comment}{@code\ }} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00050}00050\ \textcolor{comment}{\#define\ HAL\_UART\_MODULE\_ENABLED}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00051}00051\ \textcolor{comment}{@endcode}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00052}00052\ \textcolor{comment}{*\ @\{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00053}00053\ \textcolor{comment}{*************************************************************************/}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00054}00054\ \textcolor{preprocessor}{\#ifndef\ \_\_UART\_GENERAL\_H\_}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00055}00055\ \textcolor{preprocessor}{\#define\ \_\_UART\_GENERAL\_H\_}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00056}00056\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00057}00057\ \textcolor{comment}{/////////////////////////////////////////////////////////////////////}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00058}00058\ \textcolor{comment}{/////////////////////////-\/-\/-\/USER\ SETTINGS-\/-\/-\//////////////////////////}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00059}00059\ \textcolor{comment}{/**\ }} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00060}00060\ \textcolor{comment}{\ \ *\ @addtogroup\ UART\_INIT\ Init\ defines}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00061}00061\ \textcolor{comment}{\ \ *\ @ingroup\ \ \ \ MY\_LIBS\_UART}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00062}00062\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ \ Настройка\ UART}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00063}00063\ \textcolor{comment}{\ \ *\ @\{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00064}00064\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00065}\mbox{\hyperlink{group___u_a_r_t___i_n_i_t_ga167269406e73327b95c3bb7b9cfe6d89}{00065}}\ \textcolor{preprocessor}{\#define\ HAL\_UART\_MODULE\_ENABLED\ \ \ }\textcolor{comment}{///<\ Включение\ HAL\ UART}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00066}00066\ } +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00067}\mbox{\hyperlink{group___u_a_r_t___i_n_i_t_gace54f148bb1d72f13bf397d096d38d1b}{00067}}\ \textcolor{preprocessor}{\#define\ USE\_USART1\ \ \ \ }\textcolor{comment}{///<\ Включить\ USART1\ в\ @ref\ UART\_MspInit}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00068}\mbox{\hyperlink{group___u_a_r_t___i_n_i_t_gaacb3968508217a0d8b3f64aa0c8aa07d}{00068}}\ \textcolor{preprocessor}{\#define\ USE\_USART2\ \ \ \ }\textcolor{comment}{///<\ Включить\ USART2\ в\ @ref\ UART\_MspInit}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00069}\mbox{\hyperlink{group___u_a_r_t___i_n_i_t_ga6dadd967b428aade24008ec060009976}{00069}}\ \textcolor{preprocessor}{\#define\ USE\_USART3\ \ \ \ }\textcolor{comment}{///<\ Включить\ USART3\ в\ @ref\ UART\_MspInit}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00070}\mbox{\hyperlink{group___u_a_r_t___i_n_i_t_ga779530e93e7aa1f25eb13045ec42b8e7}{00070}}\ \textcolor{preprocessor}{\#define\ USE\_UART4\ \ \ \ \ }\textcolor{comment}{///<\ Включить\ UART4\ в\ @ref\ UART\_MspInit}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00071}\mbox{\hyperlink{group___u_a_r_t___i_n_i_t_ga592c6bf4a6496d6806ba0838cdfa2340}{00071}}\ \textcolor{preprocessor}{\#define\ USE\_UART5\ \ \ \ \ }\textcolor{comment}{///<\ Включить\ UART5\ в\ @ref\ UART\_MspInit}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00072}\mbox{\hyperlink{group___u_a_r_t___i_n_i_t_gafaeb8bdd4aa7fb1987505530daa90868}{00072}}\ \textcolor{preprocessor}{\#define\ USE\_USART6\ \ \ \ }\textcolor{comment}{///<\ Включить\ USART6\ в\ @ref\ UART\_MspInit}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00073}00073\ \textcolor{comment}{/**\ UART\_INIT}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00074}00074\ \textcolor{comment}{\ \ *\ @\}}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00075}00075\ \textcolor{comment}{\ \ */}\textcolor{preprocessor}{}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00076}00076\ \textcolor{comment}{/////////////////////////-\/-\/-\/USER\ SETTINGS-\/-\/-\//////////////////////////}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00077}00077\ \textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{mylibs__defs_8h}{mylibs\_defs.h}}"{}}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00078}00078\ } +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00079}00079\ } +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00080}00080\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00081}00081\ \textcolor{comment}{/////////////////////////////////////////////////////////////////////}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00082}00082\ \textcolor{comment}{////////////////////////////-\/-\/-\/DEFINES-\/-\/-\/////////////////////////////}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00083}00083\ } +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00084}00084\ } +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00085}00085\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00086}00086\ \textcolor{comment}{////////////////////////////-\/-\/-\/DEFINES-\/-\/-\/////////////////////////////}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00087}00087\ } +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00088}00088\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00089}00089\ \textcolor{comment}{/////////////////////////////////////////////////////////////////////}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00090}00090\ \textcolor{comment}{///////////////////////-\/-\/-\/STRUCTURES\ \&\ ENUMS-\/-\/-\///////////////////////}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00091}00091\ \textcolor{comment}{/**}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00092}00092\ \textcolor{comment}{\ \ *\ @brief\ Структура\ настроек\ UART}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00093}00093\ \textcolor{comment}{\ \ *\ @details\ Содержит\ все\ необходимые\ параметры\ для\ инициализации\ UART,}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00094}00094\ \textcolor{comment}{\ \ *\ включая\ GPIO\ и\ DMA.}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00095}00095\ \textcolor{comment}{\ \ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00096}\mbox{\hyperlink{struct_u_a_r_t___settings_type_def}{00096}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00097}00097\ \{} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00098}\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_accf2c9448a3ea8eb3b8c25a569276fea}{00098}}\ \ \ UART\_HandleTypeDef\ \mbox{\hyperlink{struct_u_a_r_t___settings_type_def_accf2c9448a3ea8eb3b8c25a569276fea}{huart}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ HAL\ handle\ UART}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00099}00099\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00100}\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_af6f9910d065bae715cdb4a1024143a8f}{00100}}\ \ \ GPIO\_TypeDef\ *\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_af6f9910d065bae715cdb4a1024143a8f}{GPIOx}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Порт\ для\ UART}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00101}\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_a3fba2b52788fe453348b5d92ed52ba49}{00101}}\ \ \ uint16\_t\ \mbox{\hyperlink{struct_u_a_r_t___settings_type_def_a3fba2b52788fe453348b5d92ed52ba49}{GPIO\_PIN\_RX}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Пин\ приема}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00102}\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_a5f1babfcfb436cd77f5614253c0a5bef}{00102}}\ \ \ uint16\_t\ \mbox{\hyperlink{struct_u_a_r_t___settings_type_def_a5f1babfcfb436cd77f5614253c0a5bef}{GPIO\_PIN\_TX}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Пин\ передачи}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00103}00103\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00104}\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_a1ecc9ac6a1d2747ade56770cbab6a613}{00104}}\ \ \ DMA\_Stream\_TypeDef\ *\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_a1ecc9ac6a1d2747ade56770cbab6a613}{DMAChannel}};\ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Канал\ DMA\ (NULL\ если\ не\ нужен)}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00105}\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_a15ce92b03f7f189bfbe1ab88a5f94d19}{00105}}\ \ \ uint32\_t\ \mbox{\hyperlink{struct_u_a_r_t___settings_type_def_a15ce92b03f7f189bfbe1ab88a5f94d19}{DMA\_CHANNEL\_X}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{///<\ Номер\ канала\ DMA\ (0\ если\ не\ нужен)}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00106}00106\ \ \ } +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00107}00107\ \}\ \mbox{\hyperlink{struct_u_a_r_t___settings_type_def}{UART\_SettingsTypeDef}};} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00108}00108\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00109}00109\ \textcolor{comment}{///////////////////////-\/-\/-\/STRUCTURES\ \&\ ENUMS-\/-\/-\///////////////////////}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00110}00110\ } +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00111}00111\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00112}00112\ \textcolor{comment}{/////////////////////////////////////////////////////////////////////}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00113}00113\ \textcolor{comment}{///////////////////////////-\/-\/-\/FUNCTIONS-\/-\/-\////////////////////////////}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00114}00114\ } +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00115}00115\ \textcolor{comment}{/*\ Инициализация\ UART\ с\ использованием\ структуры\ настроек\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00116}00116\ HAL\_StatusTypeDef\ \mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_gab9f07396b778505c934143e89953e154}{UART\_Base\_Init}}(\mbox{\hyperlink{struct_u_a_r_t___settings_type_def}{UART\_SettingsTypeDef}}\ *suart);} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00117}00117\ } +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00118}00118\ \textcolor{comment}{/*\ Проверка\ корректности\ структуры\ настроек\ UART\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00119}00119\ HAL\_StatusTypeDef\ \mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_ga2a22e46ecb9e04b2ce197a0e9c09044a}{UART\_Check\_Init\_Struct}}(\mbox{\hyperlink{struct_u_a_r_t___settings_type_def}{UART\_SettingsTypeDef}}\ *suart);} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00120}00120\ } +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00121}00121\ \textcolor{comment}{/*\ Инициализация\ тактирования\ и\ прерываний\ для\ выбранного\ UART\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00122}00122\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\_MspInit}}(UART\_HandleTypeDef\ *huart);} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00123}00123\ } +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00124}00124\ \textcolor{comment}{/*\ Деинициализация\ тактирования\ и\ прерываний\ для\ выбранного\ UART\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00125}00125\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_ga93ed6ceef4e3b5e7885786125cce93bc}{UART\_MspDeInit}}(UART\_HandleTypeDef\ *huart);} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00126}00126\ } +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00127}00127\ \ \ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00128}00128\ \textcolor{comment}{/**\ }} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00129}00129\ \textcolor{comment}{\ *\ @cond\ UART\_INTERNAL}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00130}00130\ \textcolor{comment}{\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00131}00131\ } +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00132}00132\ \textcolor{comment}{/*\ Настройка\ GPIO\ для\ UART\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00133}00133\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{general__uart_8c_a3abae05bbde5f3b402bf18ca13dc6a0b}{UART\_GPIO\_Init}}(GPIO\_TypeDef\ *GPIOx,\ uint16\_t\ GPIO\_PIN\_RX,\ uint16\_t\ GPIO\_PIN\_TX);} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00134}00134\ } +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00135}00135\ \textcolor{comment}{/*\ Настройка\ DMA\ для\ UART\ */}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00136}00136\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{general__uart_8c_ad82d0cbd19151675135fd75dad315d05}{UART\_DMA\_Init}}(UART\_HandleTypeDef\ *huart,\ DMA\_HandleTypeDef\ *hdma\_rx,\ DMA\_Stream\_TypeDef\ *DMAChannel,\ uint32\_t\ DMA\_CHANNEL\_X);} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00137}00137\ } +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00138}00138\ \textcolor{preprocessor}{\#ifndef\ \_\_USER\_LINKDMA}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00139}00139\ \textcolor{comment}{/**\ \ }} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00140}00140\ \textcolor{comment}{\ \ *\ @brief\ \ Аналог\ HAL\ макроса\ для\ привязки\ DMA\ к\ UART.}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00141}00141\ \textcolor{comment}{\ \ *\ @note\ \ \ @ref\ \_\_HAL\_LINKDMA.}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00142}00142\ \textcolor{comment}{\ \ */}\textcolor{preprocessor}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00143}00143\ \textcolor{preprocessor}{\#define\ \_\_USER\_LINKDMA(\_\_HANDLE\_\_,\ \_\_PPP\_DMA\_FIELD\_\_,\ \_\_DMA\_HANDLE\_\_)\ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00144}00144\ \textcolor{preprocessor}{do\{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00145}00145\ \textcolor{preprocessor}{(\_\_HANDLE\_\_)-\/>\_\_PPP\_DMA\_FIELD\_\_\ =\ (\_\_DMA\_HANDLE\_\_);\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00146}00146\ \textcolor{preprocessor}{(\_\_DMA\_HANDLE\_\_)-\/>Parent\ =\ (\_\_HANDLE\_\_);\}\ while(0U)}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00147}00147\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00148}00148\ \ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00149}00149\ \textcolor{comment}{/**\ @endcond\ */}\textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00150}00150\ \textcolor{comment}{///////////////////////////-\/-\/-\/FUNCTIONS-\/-\/-\////////////////////////////}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00151}00151\ } +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00152}00152\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ \_\_UART\_GENERAL\_H\_}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00153}00153\ \textcolor{comment}{}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00154}00154\ \textcolor{comment}{/**\ MY\_LIBS\_UART}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00155}00155\ \textcolor{comment}{\ \ *\ @\}}} +\DoxyCodeLine{\Hypertarget{general__uart_8h_source_l00156}00156\ \textcolor{comment}{\ \ */}} + +\end{DoxyCode} diff --git a/Doc/latex/group___m_y___l_i_b_s___s_p_i.md5 b/Doc/latex/group___m_y___l_i_b_s___s_p_i.md5 new file mode 100644 index 0000000..85e5c62 --- /dev/null +++ b/Doc/latex/group___m_y___l_i_b_s___s_p_i.md5 @@ -0,0 +1 @@ +b9d2d820e20d54c87d46b9628c5b5f42 \ No newline at end of file diff --git a/Doc/latex/group___m_y___l_i_b_s___s_p_i.pdf b/Doc/latex/group___m_y___l_i_b_s___s_p_i.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5f01da5f8bfb96793d29ff3a4a966ccd76ddde4b GIT binary patch literal 14926 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

)Q`@4$ahihzBgZ)!Y+v9W*%9( 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

@qP1C$k}{{qcd!**Ms^!Mt7vD zht@%c8l*{kq$&!@kwVZjWybF4u7E7He)-bPu9h7&_MBTTk2Vx+A$1ki` zQ@ZL$-uuiGo5|O$KvsU*6*T5_(_fs;O?raEinon(HN3%2*sE_SI^{y-bFEuMrRuvo z;6dKi=qNJZnx--4pzEJ>D#u&)E$5xC^5TdmZZU+F#`+mTjde()2@Ya1`4qq1KNs-X zzVU0(qxXlaizJ^>jMVANh+vJp#lIL0Xo=7+cS*kmd%>Q!?RvTF^&OTTakJEdOZ4%2 z+?1xB_Om!-f!n{^W5KO&8yuV*c;UFT9x>I>JT{2KHvQjyCpxVKg5iSv{){0!LawSW;GmO2FPs z&r(MDKZBxrR%VuN0P;U_ioe8`dL|A4CdU8h2nyP`0yF_MtgOrc8YV_&03$v92mC|N z!~xL$qa@*|XK7|2U~OV)1fc&T5pXat`T&MF=>MX5ep~gsPs7OY7wRLVXDe=GW@762 z=QMw&C^;HgsRG#ln*X~a{!i!kb$yUIMvMT4-}sK=zfqk!Kk{I?hWI-!%k;~)4) z+1|GGRpN)}`mVuRxgZ1|nurknp7{$TP%nbN1`M*#4Pn(5>m6m~pk?BMCx9DHpe>MNh zf`7~Zy(&F`@!#Elsr~OwdH@p>6D>VG8~X=g#`2MZ|61iwB7STH8x?D_-!LM8;dd4L zuT=SM?|-L?-2b4`K9c*NI`=`P{gsPLqUAYv5ixtB+5QslzD}Sv71SahG;pJ7kCQHbu?rUwu;_#LqyUb@o<+Tf&+&M*K+{(#(`yrDC4s>Y_|GYu6T<2x7x` z&j->dS}N@VW)|dvxFzg}5+F7|hiu*Qrk{@0VPS8in>f~Ms*B8;A&-GuQF)R9xH{Sx zK9S$M7tVNfU7HM2n1$*}R_!tM>Z6Fk+;`m$=qlXCmK<6#T+i$|wI+Q6ZlQn4aSqZt z!55z=!4i$TeD#KwD%W}*r+vQER?%?`5QCVgW~r^9a#8iZ*oNR=Q0~&$u4;Jtx<}cj z1Mg0t)L<=LWuE$V5~tBQ$_IZl&Kl)K*F!JC!c9|^%4}cZvaSExhH3b@H86nk{ZrQx z8{z-F2meX8ziT@SGvhzCo$=q4;$OA>i=vV7pF;8viTigs`d`xVH?XK==57RF{7Xj- zpveGW1Tg+ps}*f*9082~2fmcBHn#cLhyQGr{{Xxs<84sB{1~8HFNeD*!XejwwlM55 zn$5nNUt0VtVZQwM(bk)$dy6Cv>5GAD&W}QfO3JuBPTM_=$W>pS8l2TEk!jeTgg4t+ za9f}=@RRS55b0|onsK8ZFt1D}9Q^-ug@dD>y`!uB$5nn57iI=%5)u(PQRx2*Bn?}f literal 0 HcmV?d00001 diff --git a/Doc/latex/group___m_y___l_i_b_s___u_a_r_t.tex b/Doc/latex/group___m_y___l_i_b_s___u_a_r_t.tex new file mode 100644 index 0000000..9a4d246 --- /dev/null +++ b/Doc/latex/group___m_y___l_i_b_s___u_a_r_t.tex @@ -0,0 +1,193 @@ +\doxysubsubsection{UART Tools } +\hypertarget{group___m_y___l_i_b_s___u_a_r_t}{}\label{group___m_y___l_i_b_s___u_a_r_t}\index{UART Tools@{UART Tools}} + + +Функции и макросы для удобной работы с UART. + + +Collaboration diagram for UART Tools\+:\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=344pt]{group___m_y___l_i_b_s___u_a_r_t} +\end{center} +\end{figure} +\doxysubsubsubsubsection*{Topics} +\begin{DoxyCompactItemize} +\item +\mbox{\hyperlink{group___u_a_r_t___i_n_i_t}{Init defines}} +\begin{DoxyCompactList}\small\item\em Настройка UART. \end{DoxyCompactList}\end{DoxyCompactItemize} +\doxysubsubsubsubsection*{Classes} +\begin{DoxyCompactItemize} +\item +struct \mbox{\hyperlink{struct_u_a_r_t___settings_type_def}{UART\+\_\+\+Settings\+Type\+Def}} +\begin{DoxyCompactList}\small\item\em Структура настроек UART. \end{DoxyCompactList}\end{DoxyCompactItemize} +\doxysubsubsubsubsection*{Functions} +\begin{DoxyCompactItemize} +\item +HAL\+\_\+\+Status\+Type\+Def \mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_gab9f07396b778505c934143e89953e154}{UART\+\_\+\+Base\+\_\+\+Init}} (\mbox{\hyperlink{struct_u_a_r_t___settings_type_def}{UART\+\_\+\+Settings\+Type\+Def}} \texorpdfstring{$\ast$}{*}suart) +\begin{DoxyCompactList}\small\item\em Инициализация UART с помощью структуры \doxylink{struct_u_a_r_t___settings_type_def}{UART\+\_\+\+Settings\+Type\+Def}. \end{DoxyCompactList}\item +HAL\+\_\+\+Status\+Type\+Def \mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_ga2a22e46ecb9e04b2ce197a0e9c09044a}{UART\+\_\+\+Check\+\_\+\+Init\+\_\+\+Struct}} (\mbox{\hyperlink{struct_u_a_r_t___settings_type_def}{UART\+\_\+\+Settings\+Type\+Def}} \texorpdfstring{$\ast$}{*}suart) +\begin{DoxyCompactList}\small\item\em Проверка корректности структуры инициализации UART. \end{DoxyCompactList}\item +void \mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\+\_\+\+Msp\+Init}} (UART\+\_\+\+Handle\+Type\+Def \texorpdfstring{$\ast$}{*}huart) +\begin{DoxyCompactList}\small\item\em Настройка тактирования и прерываний UART. \end{DoxyCompactList}\item +void \mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_ga93ed6ceef4e3b5e7885786125cce93bc}{UART\+\_\+\+Msp\+De\+Init}} (UART\+\_\+\+Handle\+Type\+Def \texorpdfstring{$\ast$}{*}huart) +\begin{DoxyCompactList}\small\item\em Деинициализация тактирования и прерываний UART. \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsubsubsection{Detailed Description} +Функции и макросы для удобной работы с UART. + +Модуль предоставляет функции для базовой инициализации UART + +\begin{DoxyParagraph}{Пример использования\+:} + +\begin{DoxyCode}{0} +\DoxyCodeLine{\textcolor{comment}{//\ Структура\ настроек\ UART}} +\DoxyCodeLine{\mbox{\hyperlink{struct_u_a_r_t___settings_type_def}{UART\_SettingsTypeDef}}\ uart2Settings;} +\DoxyCodeLine{} +\DoxyCodeLine{\textcolor{keywordtype}{void}\ UART2\_Init(\textcolor{keywordtype}{void})} +\DoxyCodeLine{\{} +\DoxyCodeLine{\ \ \ \ \textcolor{comment}{//\ Настройка\ UART2\ с\ 115200\ бод,\ 8\ бит,\ 1\ стоп-\/бит,\ без\ паритета}} +\DoxyCodeLine{\ \ \ \ uart2Settings.\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_accf2c9448a3ea8eb3b8c25a569276fea}{huart}}.Instance\ =\ USART2;} +\DoxyCodeLine{\ \ \ \ uart2Settings.\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_accf2c9448a3ea8eb3b8c25a569276fea}{huart}}.Init.BaudRate\ =\ 115200;} +\DoxyCodeLine{\ \ \ \ uart2Settings.\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_accf2c9448a3ea8eb3b8c25a569276fea}{huart}}.Init.WordLength\ =\ UART\_WORDLENGTH\_8B;} +\DoxyCodeLine{\ \ \ \ uart2Settings.\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_accf2c9448a3ea8eb3b8c25a569276fea}{huart}}.Init.StopBits\ =\ UART\_STOPBITS\_1;} +\DoxyCodeLine{\ \ \ \ uart2Settings.\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_accf2c9448a3ea8eb3b8c25a569276fea}{huart}}.Init.Parity\ =\ UART\_PARITY\_NONE;} +\DoxyCodeLine{\ \ \ \ uart2Settings.\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_accf2c9448a3ea8eb3b8c25a569276fea}{huart}}.Init.Mode\ =\ UART\_MODE\_TX\_RX;} +\DoxyCodeLine{\ \ \ \ uart2Settings.\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_accf2c9448a3ea8eb3b8c25a569276fea}{huart}}.Init.HwFlowCtl\ =\ UART\_HWCONTROL\_NONE;} +\DoxyCodeLine{\ \ \ \ uart2Settings.\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_accf2c9448a3ea8eb3b8c25a569276fea}{huart}}.Init.OverSampling\ =\ UART\_OVERSAMPLING\_16;} +\DoxyCodeLine{} +\DoxyCodeLine{\ \ \ \ \textcolor{comment}{//\ Настройка\ GPIO}} +\DoxyCodeLine{\ \ \ \ uart2Settings.\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_af6f9910d065bae715cdb4a1024143a8f}{GPIOx}}\ =\ GPIOA;} +\DoxyCodeLine{\ \ \ \ uart2Settings.\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_a5f1babfcfb436cd77f5614253c0a5bef}{GPIO\_PIN\_TX}}\ =\ GPIO\_PIN\_2;} +\DoxyCodeLine{\ \ \ \ uart2Settings.\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_a3fba2b52788fe453348b5d92ed52ba49}{GPIO\_PIN\_RX}}\ =\ GPIO\_PIN\_3;} +\DoxyCodeLine{} +\DoxyCodeLine{\ \ \ \ \textcolor{comment}{//\ DMA\ не\ используется\ в\ этом\ примере}} +\DoxyCodeLine{\ \ \ \ uart2Settings.\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_a1ecc9ac6a1d2747ade56770cbab6a613}{DMAChannel}}\ =\ NULL;} +\DoxyCodeLine{\ \ \ \ uart2Settings.\mbox{\hyperlink{struct_u_a_r_t___settings_type_def_a15ce92b03f7f189bfbe1ab88a5f94d19}{DMA\_CHANNEL\_X}}\ =\ 0;} +\DoxyCodeLine{} +\DoxyCodeLine{\ \ \ \ \textcolor{comment}{//\ Инициализация\ UART}} +\DoxyCodeLine{\ \ \ \ \textcolor{keywordflow}{if}(\mbox{\hyperlink{group___m_y___l_i_b_s___u_a_r_t_gab9f07396b778505c934143e89953e154}{UART\_Base\_Init}}(\&uart2Settings)\ !=\ HAL\_OK)} +\DoxyCodeLine{\ \ \ \ \{} +\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{comment}{//\ Обработка\ ошибки}} +\DoxyCodeLine{\ \ \ \ \ \ \ \ Error\_Handler();} +\DoxyCodeLine{\ \ \ \ \}} +\DoxyCodeLine{\}} + +\end{DoxyCode} + +\end{DoxyParagraph} +\begin{DoxyNote}{Note} +Требуется подключение модуля UART в библиотеке HAL +\begin{DoxyCode}{0} +\DoxyCodeLine{\textcolor{preprocessor}{\#define\ HAL\_UART\_MODULE\_ENABLED}} + +\end{DoxyCode} + +\end{DoxyNote} + + +\label{doc-func-members} +\Hypertarget{group___m_y___l_i_b_s___u_a_r_t_doc-func-members} +\doxysubsubsubsection{Function Documentation} +\Hypertarget{group___m_y___l_i_b_s___u_a_r_t_gab9f07396b778505c934143e89953e154}\index{UART Tools@{UART Tools}!UART\_Base\_Init@{UART\_Base\_Init}} +\index{UART\_Base\_Init@{UART\_Base\_Init}!UART Tools@{UART Tools}} +\doxysubsubsubsubsection{\texorpdfstring{UART\_Base\_Init()}{UART\_Base\_Init()}} +{\footnotesize\ttfamily \label{group___m_y___l_i_b_s___u_a_r_t_gab9f07396b778505c934143e89953e154} +HAL\+\_\+\+Status\+Type\+Def UART\+\_\+\+Base\+\_\+\+Init (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{struct_u_a_r_t___settings_type_def}{UART\+\_\+\+Settings\+Type\+Def}} \texorpdfstring{$\ast$}{*}}]{suart}{}\end{DoxyParamCaption})} + + + +Инициализация UART с помощью структуры \doxylink{struct_u_a_r_t___settings_type_def}{UART\+\_\+\+Settings\+Type\+Def}. + + +\begin{DoxyParams}{Parameters} +{\em suart} & Указатель на структуру с настройками UART. \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +HAL status. +\end{DoxyReturn} +~\newline + Инициализирует UART и его GPIO и при необходимости DMA. Настройка аналогична HAL\+\_\+\+UART\+\_\+\+Init +\begin{DoxyCode}{0} +\DoxyCodeLine{suart.huart.Init...} + +\end{DoxyCode} + но дополнительно надо прописать пины RX/\+TX \doxylink{struct_u_a_r_t___settings_type_def}{UART\+\_\+\+Settings\+Type\+Def} +\begin{DoxyCode}{0} +\DoxyCodeLine{suart-\/>GPIOx,\ suart-\/>GPIO\_PIN\_RX,\ suart-\/>GPIO\_PIN\_TX} + +\end{DoxyCode} + + +Definition at line \mbox{\hyperlink{general__uart_8c_source_l00032}{32}} of file \mbox{\hyperlink{general__uart_8c_source}{general\+\_\+uart.\+c}}. + +\Hypertarget{group___m_y___l_i_b_s___u_a_r_t_ga2a22e46ecb9e04b2ce197a0e9c09044a}\index{UART Tools@{UART Tools}!UART\_Check\_Init\_Struct@{UART\_Check\_Init\_Struct}} +\index{UART\_Check\_Init\_Struct@{UART\_Check\_Init\_Struct}!UART Tools@{UART Tools}} +\doxysubsubsubsubsection{\texorpdfstring{UART\_Check\_Init\_Struct()}{UART\_Check\_Init\_Struct()}} +{\footnotesize\ttfamily \label{group___m_y___l_i_b_s___u_a_r_t_ga2a22e46ecb9e04b2ce197a0e9c09044a} +HAL\+\_\+\+Status\+Type\+Def UART\+\_\+\+Check\+\_\+\+Init\+\_\+\+Struct (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{struct_u_a_r_t___settings_type_def}{UART\+\_\+\+Settings\+Type\+Def}} \texorpdfstring{$\ast$}{*}}]{suart}{}\end{DoxyParamCaption})} + + + +Проверка корректности структуры инициализации UART. + + +\begin{DoxyParams}{Parameters} +{\em suart} & Указатель на структуру с настройками UART. \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +HAL status. +\end{DoxyReturn} + + +Definition at line \mbox{\hyperlink{general__uart_8c_source_l00364}{364}} of file \mbox{\hyperlink{general__uart_8c_source}{general\+\_\+uart.\+c}}. + +\Hypertarget{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}\index{UART Tools@{UART Tools}!UART\_MspInit@{UART\_MspInit}} +\index{UART\_MspInit@{UART\_MspInit}!UART Tools@{UART Tools}} +\doxysubsubsubsubsection{\texorpdfstring{UART\_MspInit()}{UART\_MspInit()}} +{\footnotesize\ttfamily \label{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb} +void UART\+\_\+\+Msp\+Init (\begin{DoxyParamCaption}\item[{UART\+\_\+\+Handle\+Type\+Def \texorpdfstring{$\ast$}{*}}]{huart}{}\end{DoxyParamCaption})} + + + +Настройка тактирования и прерываний UART. + + +\begin{DoxyParams}{Parameters} +{\em huart} & Указатель на хендл UART. \\ +\hline +\end{DoxyParams} +\begin{DoxyNote}{Note} +Чтобы не генерировать функцию с иницилизацией неиспользуемых UART, дефайнами \doxylink{group___u_a_r_t___i_n_i_t}{Init defines} в \doxylink{general__uart_8h}{general\+\_\+uart.\+h} определяются используемые UART. +\end{DoxyNote} + + +Definition at line \mbox{\hyperlink{general__uart_8c_source_l00146}{146}} of file \mbox{\hyperlink{general__uart_8c_source}{general\+\_\+uart.\+c}}. + +\Hypertarget{group___m_y___l_i_b_s___u_a_r_t_ga93ed6ceef4e3b5e7885786125cce93bc}\index{UART Tools@{UART Tools}!UART\_MspDeInit@{UART\_MspDeInit}} +\index{UART\_MspDeInit@{UART\_MspDeInit}!UART Tools@{UART Tools}} +\doxysubsubsubsubsection{\texorpdfstring{UART\_MspDeInit()}{UART\_MspDeInit()}} +{\footnotesize\ttfamily \label{group___m_y___l_i_b_s___u_a_r_t_ga93ed6ceef4e3b5e7885786125cce93bc} +void UART\+\_\+\+Msp\+De\+Init (\begin{DoxyParamCaption}\item[{UART\+\_\+\+Handle\+Type\+Def \texorpdfstring{$\ast$}{*}}]{huart}{}\end{DoxyParamCaption})} + + + +Деинициализация тактирования и прерываний UART. + + +\begin{DoxyParams}{Parameters} +{\em huart} & Указатель на хендл UART. \\ +\hline +\end{DoxyParams} +\begin{DoxyNote}{Note} +Чтобы не генерировать функцию с деиницилизацией неиспользуемых UART, дефайнами \doxylink{group___u_a_r_t___i_n_i_t}{Init defines} в \doxylink{general__uart_8h}{general\+\_\+uart.\+h} определяются используемые UART. +\end{DoxyNote} + + +Definition at line \mbox{\hyperlink{general__uart_8c_source_l00267}{267}} of file \mbox{\hyperlink{general__uart_8c_source}{general\+\_\+uart.\+c}}. + +\input{group___u_a_r_t___i_n_i_t} diff --git a/Doc/latex/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.md5 b/Doc/latex/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.md5 new file mode 100644 index 0000000..7716970 --- /dev/null +++ b/Doc/latex/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.md5 @@ -0,0 +1 @@ +e6d1f13a7d892bfe12b1137f7c4b33fa \ No newline at end of file diff --git a/Doc/latex/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.pdf b/Doc/latex/group___m_y_l_i_b_s___u_a_r_t___g_e_n_e_r_a_l.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d381472c08ccdc39748f25fbeb2b36907a0c82f2 GIT binary patch literal 14982 zcmbumbyytRw(d=WySp{+(v7>jyF+kymyqD@?!ieQxNC5Cx8UxsflIRX+Gp+WobTK} zZdZ3z%~8{8%(q5W^)r7IilX8SKt>KYin^2XCpb<3Gr-=+3XYc-z$9yGXYOJF;CeGD z!vO#QCUHv}7gMLVt&O3Jsi>*3y@@FtKR=wai<7CLEu2SYmU5?E7c)ZJ9-WUY5@Jp0WMsGD?|JeftOtgld%>lokBadn0^Gu^USJ@WR4w%46Y3H z`Qn?0`-?L?Y!+}D4rqtsqt^q9Q`TEb9btn%e|l74Z`yWZVBApYOr6CWig;PWRUn(` z$IKFv`O%B>pnTRj-RKkMF1LH0LyCQ&4Z4NoY7MWHo1XG=7fVH zE|psVtyUpe>O}T}L_Nw=w6K=IgScwl-fD_L_pea|HZACOs9av^#Yv+ykDs(|AHdXo45;0l6joNkW!E>aj`|w`nkU-WBPjPaeMkpallw{mNqpKaKxOPC%Bw z%QDFWfPapNTRJ(r0NDPu|G#UDg;kMxJ$yHO=RFv7*SpaF?ubA2|H~6Vj(>NJ?H^tH zyC>}b?#ch8?BCA$D<=>D<0D~y#m9tnXklI)-vdp0L zD=Ls$o|s@S9QC{LW}(BKw!ixI!k@GDsY9MS^Og3VRY!!8Ke(V-}OIj&5q8?^&+je zfK^RfH@B$&YNEJ+6KumgDk|%Q(@45Nq~|c?YBuYh!`EKg;nLI(*cqO;*Ik4(!JnE# zHf(YgnMceZPp~BZK|z{4E0@v2!N-06GpCXOvQiz)G=XhBswT;B7lopjf=iBg>hcF5 z8|w#sL^14rRQv`jW_DphrzjCAdMCEV*lbQkPKA%Az?lypE1=vbd~jRJ(0oD5ANCz8 zzgp0S0vou``)`~Gf*(Y7^}0#AnZ5-2P}PzBEW(6X@$*^Ik}e1BqNbok2`}svQYeZ_ zakG@|=zO127ACik(}Tg5q7*hNq?i<^V0o`ziH3-VGWv{2|6y=*ukxoj>u7T5H~%ln zb+rj_tXW)q+YS?jq0hDhW?KVCBIWk7|l%$iHTUsrEGGwxuUtNMw6&Dv%#Te z@)&)pEI^%`JO)Gc1!J>MHakh}oaG|CKY?emyhJ(0E}7l*Ka~U&xMDoprqwjwA)4cj zeIV+m=mNdK_?OyU7HDx;$r+KO(8D|i_?tx0P&`yAj%bqhky7yM7~=3ow=$!(T&d#9 z^ajT>!)mu0Zn_yMo4|#T(0+JtBa0S8cO(6g*FDLWif{szliFg^VnH6jpn77U5UK}P z95fVgM3F$pG=3`P^Px=-%s`~II`13FX^&^M6m~1f(kXr>k&^ugfJi{F{d=UI3A%FbqW*|FPXzFp9FOU~y8C&1+!&dZOIkLj4)IPQy zA5Q?gPfDgho#!x#(`n!P(+gARL2t;#3<+1eMu4dMDXyraqXU>DnVh5 z1^HOhbNpfcK=^2;M~_253hifqh-4^Ck91#DE8AsU-YHLOu+PJomUa6mE0bSV3DWCl z&_2nhb+lA-lmgzzz<70Erq&F1b_R?&lvJ96F>iIGabvG-gK_#;YXui>13l?h zW?`xdbDOE*N=;*$tkDD6XcwmikcXhvN8TCOu3h_$W)>H|Gsm<&W>81yCh;)wtSrXv z^5mw_r<;G0YT}zu45O3?tb%+!FBk4*;+MmLOnfKq17%VEU3`C%^b|SN`<@>olu)D@ z81~N9VQ(P}EKUw_VV^N`OiR~LQ3*yqH!Af^ZOrvL@*Dk3Ed4{Je&Qn4X1v1 zfv0>Q3J!)!ETJ`5drABz9n*g_=q{c)3#62M7|V*W^{%;^RPW_gbsH_zX(#JzudeW% zZXMDYv(I(cZ^^yzOBoj!-Z6zR(aGlswK+G=MP#` z?{LYnqeS+gB`Qk(u)%9smW=GRA{xx^9a~xAab9uQOmzZ_sBx(|9B`=Jbvz3%ocf8kr*}7^;23^?s`bKM~t~ z$)1bd6V1hj(n1q#ewth|xt7`VLt6op#ZC}pFXqjV4aKB7r#mmZv2Ayf#%L;+^P}1+ zDe%@}yl}c*g}XS{`RYN#@nIb_^CYC(?WjnHaivDju_$Zmt0T1Np`)dhWh?D#`$2ng zr5Z^`Vv&1!sd`N6V?9s5!1052XF~n6f|%RQ~m2#N9bpXKEf+v;=8M7 zj(*$>-h$BY{t0az5%$OdNrh|&BQ&<}x`ltnGU@B9>ru@mjbkz~DBvVqltx)^&1<=9 z8`S!mJW-#PeXmDX`WmY4P1kL=c6ou{KYh^&=N<6N_ld~6&u+nZ&HVKT<3fxH|J>bU zXW;743Nnw%Q>2O;J8ZlCiFzMIOV5H)jH#C0on!Ku!orDAXGW0%;^R=0rp0Yw#fnXK z)6AWzJ2Q3nev6><*Cr6PW}iEa-eO*XPnqX#3 ze;n)_>Y8#{f0T#V3VKp|3oP~%>Kuo}Ff4rj^db$bTV+HeY1t^b@RJDKLq*k)RQkTD zw0W0pn8TJbrARrmlk_OursfUq=7#7QPsh}NGUp1rZB~^oolUy(0o%av74edZyU<-( zRnZvfehR#JJaXEm8XgHJbK=J_v`etBf3v{F$WN> z@Cx(V)h+cG2f;$mlU2x!3RCn$MvNaJHa9^c4CVW3fjf^JW~wca*;S&My*Fl?RVkXe zY$-~|7ie;U8a=G?Y3RofgN?T-4h2crN=GSn98NTU93NYBvK(crsGw9EZLw>qV%}-F z?a^z=wo;S*xoIBo6SJSaUc*kaWw%Om<3z?>pw0N@_Q9^@J3!m0-K~pakjP+sl|g&n z6y2WlX)s!*D4wGqGRg6Zmhq(3sgq)!MbCqWvM#tA5PM>SjjZgP%<`Tzs+o|SIviV+ zH3FHUgksqEU7XU?l`%PI1liYA)0)o%srt^zZmJ8&ln5#~HHafE-?FqvuMY9}a#*#- zBV;_vleWD}34>z|V>SwebUzPj1)zXzK-YL6C{)+-G`MCwGd@SxOanEQHs}H7Ofk&c z9GA;}?Tt??@pg9PQCfAppv1ap-1dyrzPS;C45l$l!qQBoB6gNe5%`54EA;A*cXZ65 z(zuEi)!GZ5Pq7>4{WY!~Q27+vW*#uD+uD5@;+SQ|Ml{1XE1Xa%{p(XWE0ISiVQLu* z+@h!lH|PNMj5L^aC0WN1t;;XUPSm}MvNq)_;%+-OnZsrF6PtmhJ<_1+s>PWV8vA(f zoz-fXYTC0TmCH&W;l9rpeCGApplLB1mSOrt<0IOd!rd`?kw*JcZ)!A=F)OU1uO@aE zCT66KDc-5&;KXTDpKdxBPD6^5SejpRGhZsRZEdhBautrszA5XQ&}Hjv`@Z`)KSZ+f zjsDxW8QG(-MKkB6QOcFh{RU~9d37~)b>_3A6LqHL?^Sr_1w}(z5%s`L7nb5ATF8|7 z3QYswe!_sKyS?6iOulA`w8>vMdY;H}^D!&l;}1+@bW9&w^Ctptt1wRT5ueGs8{GkG z{XZ$0?zEB29-47?_YfHuj~m9~7}+Qb3LNWd=Pb(9i<*i&t$aqMBT9RxkF7asGq7j~ z%aO)O*PyzgrfE$BtOLxG&b;F7;}PoVf+&J1cImz!1=)!-c(%tZ)urpsGyx%2pVU?Iuv7Ryef=PnUKKjrNn>d8;*jP;B?06O6!ZIUt_)wPgYfk zhaG@}3kJmCC4j?vUJio6GULJ5P=zi#=b4Q!B6!c4vE~&cs`JRd*IfbAekezHdzZ{7 zS)T(d^Rf53XPj}^M_~oPmo55|%rj|vc0i*sH+_bb*G=aZrwG?VM#$hE>*Zlo?W>to z>Bhw<$wt~woBdgohJ}xnp^l@TDmoPhq1Qt%PlTXFpO=#H9*B>S%eg~Sx344Ap3yJl zsoOHI%JOUNdbGv&T4%HAVB9^2fXmt9!(JA60FN8e1h2B!nk!ic&+AZ*fI@ia$xcrD zvw^_lfs8H{>)SKqqf$9#n3%4CxAW6zva|G=BHd6wt#4K_3Ja6WvK>e7*_v z@IWY!h7#kT>M?S^V4XHCDzeCHY`Hg^{#eA5w>IY8{LIy9c8PW0nxH*oaE15Yg{DxN z0{FBPbyDQ!+)}u@WT#`UYp!jsZ?0voXO16^n8Yn@JUO+0Pcvz{TVSeYGu!w*?)&7= zeeBT~O=6t8q)R4+$D#+RqpiX<0uG!fr4g3sueg-ZyJvp6(uEo+v^Dw%7Ir4zNXD zo_@`|e#98^S$TZM5O!v93bF{K-G;~&#OP8Ogj&tE^5xE5$eIn5wPDgVkc1C-s4n5L zbD<&qw2l`?qD{1{Yvhnep(+TM=gTmzp*KiWVd6b~Hmy?6^-T2kqxGJus4jk9k-EIf ze?PZmu_=2sO*biSg4y*!I6B$z(^G&e)sQ4Ee!8nlUoFN_23c7KXcws_dnkH4l|Pl5 zZrvF+C0Wf~9Z6#WUC2RZK} zI90{ZK42}5Qf{vA`68YA@sO`#aG^(UCJ5qvcz5ddx_zuADKXxP+<&~<=>M?$z?H&G zbY@6JN*ukop5f?i{L`T*c*otehT7-$m%@rBc<2CqK@+(h^5AboEySYV4LZY%zyGsvx#i^!FvM?Pct%YXSg3L|c_V9C=0Ykq zUgH){1RD0LJ-*GGKVZmfRu5-G;5=jhjx*qI=0IHX)J0>_(H~B`$T7^y@VZ&euPD$6wlty zpnfm>%;}>mM#9NTht2G-;gz)Su_7gzSDZUQqCE*?-mw^QKKTH)BXLrY^kbNBcoObISHS;#w?vI9k>ji9SZRL}0jWaL?DcLZzj@wop~{YjTO2wYR<2 zeDv-?G<$}wU%N%(CjmeV9A=}BIdKSo3b~hH5&rqwtUkWYSB)Enzks?qBRuW2z zRmLgoT@T-;K9B+_qFB^Ylb22zMePD2SrmvZ7@A*fLy8O#B@ztf{fu&R1rfau4CKV) z4!w%P4nZQ6MZmc`QewNPA%GewT=luYT^6hA5t_7#72LWI?WEHczqI;x37MFnCn6%U znG-|&N^TJO@sfLJ*yfr{KChKCH+J{pDkEcbAOuaP?)#uwiQ_y(#TS{8h?R(d(gRwN z2Ft=07ES`M+4JF6j$dcnZCfutp3Gl)f{KOHVyQ5~v1hyw;kDt|gWN*4!&t2{_S3|z zZ5V17*_Zh^Jc76kb!@#QyymZf4-@6FKAm<-1Sl}tCRC|cz{7L4^#072N2h+k{;Vo0 zXFQAgerFOVAvWP8cb^AYG(i@Y9H%tKPGADH{OIDrv1>TV>1=Rg$dL2V@@JVbt=yT6Q1*kK@Xp;?+A&r2o<(N%#wlXD)(+`4q?ru$geBo)U`>K3J2(0 zpVpV!)2cZZ2hgBl2=0n!uOxL&)@FtlwMm2VXZ(pa^~KJB2@jE^(&(qM4Lm-GZ*IWS z4KY+w<7ah4tGlXY-zMAD(gt^aO`wPVuhaUY_M09#4qmT4j?;(j3qH|(odwAg;_;&L z6obbN_=*l6*%#XO73T_<)-Q4|6pp@Ir7MBB2VEj@EG5P z!A>C}U*6Lz0U0C_oH10E`^^hyW6vJpS>(w}XYs7CoP!TMtwio#-D%v#r-qG~#U}9- z`JxoP+i;&%oFHJh-sJAetUJ$SrM3^6Ji!~Tudb@;QNwVdlo z5ZUUp4^|J-@nV98!;@=D19Xu(qZPNWuE%|Lw)Ho2gN?^#Pq)2rZ~ivzz3Kckcf{Tj z{1p@Ky#%gZ3-skkCOk1@9WDiZU)MU$RZgAO5s$2`<={JlYRnQAxfldV$~&<&?^SHb z?8URT09g0PU0L!S>tTT_+C}@;;@bE1L$x9|D6`XtxyQ~16%ywQPK*Hz{k9n|ZFhoQ zeFAsYi)oH-W=X)Qk#_$|AZJ%FGs~|LT+3Yp{>o>C_Lk9O)}JHwnN4J$ye>EGtrpLE z2>CKon#L^=Z=M6+alikC7VN7AJtsr?1*_z(ynzcG--P1``-n?-j+B#@(a`z#6$zFCxEciOx4YcYlfp4wyuCI?1Y;K%?vxn;@#4vabduPT6EEG5)@(mDWQdkppr82n+JL?o)-OiI z)9aveNUP(1r!a08aUU}&#m^`KR5tslQ!!7|rmzw;__N$K)e0vX$5uX#bk$}Z~C)_Qa7PGt$lBkiB1_rfOqR=Io_^JQGw)MU`xH9m*=Gd-49%V#Q2j(R5 z@=S@Q#6ctLeL7p+x91J7enuFoMh-u))h!Lw!{Tw2gJp!*vt219Mn zhW)BuH$60x@pce#s5yXoii#%O)r+oJ$aX0pJX>6IrKZmRHof7-O(-9N$;N_+?J*KR z{B@xWDra!}0_#4aRY36UqALdz!TLdV*rN@FkulE(7pUKWAHk>`CuXc_q9iYNs({gZ z93$C8tvf`+9A+sY@JdN~aRwl?a#5+}pcRey$hE`ig|a>T0*vI_Pzek7(i?@M+H>k0 zY|?dzpAA1IBj+%C9m%pauOoF4EfN5#)49!zPb=u(2;^Mk+#Xm}Wkc2<6C{UB?Nupi z_;s>4dL6kfQS~8Gw;Lmw-N09)#+tEPMRSLMMi0`1)ug({mXQ4Tu9DT)E1a>Oj&xz% z7&MD9T2O^y9$XjYk@>-mPJ1^%eT}+HDh(P~5 z0iW3OdnGydr)5dxG@pJx6^6?PTVb`6DCfDALEC+DunXqt)t=#eAWc6JSBPX&qsEKD zmOc&k-O#JdN<=IB1gX-Gb&X_%JQ}$Mgm2BX+|*wK)nP;heFQcxf5?Af(4~yj^1H`h zQw?p+N{Cc&j*oph_2a`s=4GXH6H9^Gcs__0pnkUg1peAxT_tpcfTD3vk!mU@Dk<$>Zf|2KL3;yQK32p8{v`LX z9=WhYei<7wmFQem2-c_mVjlRFFETwjxc+dp-tW8UB)uV5;6ge@e9{E+$j?xG{S;0F zqp?KDYP-Z6Q*^Tzp-vo>TM4Z;oEov%<9^EO?6!}9r`dNktjC_CU&Amcg3(?0Qe0to zSFqUsfbiKIK1azUM^3#B2+qGI-I+IJ;iY#8C9lCFiZ0iVb>j-)`_0FoWKd8UAxL2W|D^3NM$B7)uAfTcfISg@4l|pA=Z_s-C&IL

vKZmfNFKDuGCy?#-RKqgX?d!-2EW8p?{nl{@!rBiG9*F)84v(C` zhA_Vm15pjqT_!Y5uxC1hZQH<02+w$g4Qi@^u!cmG$I;%x%2+iAF8>5$0oReQvI0Nb<47vkRws|_A2fIn{!cbg_^ z&fpge*|)wn7Q&+U7a71F3gi+FnP9NNw8J36Q0^M;%II3|;@VJYWy#Y*2Kn|r2GAP(ehoed2M%FD82vzI7>|SP3s(V8 z6-Lhw*MT|OBQrK}2J@X7at+%YX9+;h`+g1GYk;9LhaEgs0QfV&i8qHg$jcD+EBPxL z2=L_>zQ6Xyodb`q$R|W|2jVmTideNxt48E+1Ec4RKKSmv9^G}yX^9H@1=hX%=@P-8 z!xc7{XXB_*5$qZRTwsu8h$q&5uyZn|Z!m1Ma6WBadw20(lo_IG1@Nq6HKKcgmN&#j zGVYzL@gU+qqg`NFHDm-y10x@7OVpN>iV1(Le#E&E%x6Zn_MzrV$=9V9L%d-AX&}Z& zk_YjqD>ar|b@+1zHFhWIvl{Ld`xY&vRW5`64^i6PkurzH3Z)s^Ix2c< zT%O9kJ+M0$)fZdR#uSs1j+%&=m{8!5zB$-@v%HZk1a29aWSXZ7u!(}6&L(cf>EW(L zJ(}B7GE|jL1@LsueX1@+s%7aPfpXF(+a`y-iFnHTzw8s!<-bNLqltYFd4%1uau$_q zo5E0Vy#C!d|cjUL~+w~JmzK@PciSGU+uBqbLoU&qDv)XesAG)rzlucMcj z4ph3#n@jLGiY3YrTG$#V_p65|z#-5pqxdFY!n#|k5RO!Cl;%@G*eHM^k=6aXbRDCO zwH;hw_aN*J4anNmL=29UMJ1Y(%1_HDHIbE$;>vKQ?$~zSuCBwU@hrRcJstPfoLZck z-ia+uF5O_CL!aYHQR1C*@ki|Ng(hqD<*};o?{X^^8`MpE+uO6Otj@aXtG*j1Qzk4x z^UKJXx!;cV<(_ql*=Ut*TDVA5Gl;pZ$I^PE->N@8xk{vK$?b8onTC%6 zf~BRNL57j`;6z1YxmuIfUOfZli&i8Q#LsZyMSkfKINP~IO@Dzf_?vIFHlkm**+jFl zl)0H^rwh0UUOIfJv$%${Hy4BYtEXka4z!*iGMUrolPQKDA4jn3a!U@t z$41SlFDeTd%EqKSl~>Xz?q$q_i$Ri5%6N>6^x~f{i#1Fmuu-9^JOrN$HldnJfif!dM?1>C7Sv z!y@HFKEg^^nXhKaGK5l*eZ{q54DDNF!LNdfD zIn|zG7lh54-D;IP-mIT0SN>DRXk^Y24E6e6k<+aw1My(Eqt zb|YFL+L0f_cVHz%W5l3fzkkLRt3b= ze%8|CPK>aEWC=T%ng$sPQjXv%P`t8|4w;g`2rT8(qiQQzBP|`et=CYxq$i5Ebdi_F zwgtFQVi>#_9skgd74v}0z`g~?j`(t9KCpm^L)U8O69J-m4yi_U;_LnOQ?Z~ZG4c0W zehUNdHBe%|!?#$(%q(cElTPxpcjlLB{ODa#)6&M2dR9NaG?~>csus7v7xvMkv~d+H$;dkJ&Wt>&m=ugv04si4e`oN zP?_Sg`aazNf-CV=rn=jPu}xA9Sz&pU!3@PAgg-4Dk5NU!p{*KEf)&*vN;L{L&zB;E z)KZQ7CyWCluY9#nIqIq}sjfE+edc~u46*S_IeM$JgoZ$YXd7N7zylZ zG3m7y`=9%w$2iLaYsP1b=WaHF&jj@-`qU}8l`6i5bL;Gsox**9#WrN5qo^Xwno#Y6 zx$u06C}i(>;@OUeXM1h{mZRf)R;+|c*6m7~yoeM~W#|3;x-g)hO|RW|@*WhSNk}{12jQZ>sg^9+IrrbidQyqOX=rcTzpN<{w zgrB>e-f78e2=EJW3E%D06ezjFt^eRo;HSH9-TS^EO;!@VNf8tuo4x^`)WRSAPy8>L z?-w88HL?TMlnHH68U*3H{UOjT^IiBVm;2Il{mYLy3DI^)$1iJhC_X&r3++ zxW=6>?v8EJ42~|ou7csL`K<&FH^cu}g8SfY0Nsy%EQtCe;r;mo7#t%c3_rYLEgT^5 zq}TFuJk`Q0!`0&MtKR}9Rv|+q6+u478^wJ3s6b`rq-;TY&cPBr(Cq5f)KPQnvl68m4Z+;l_hXdn_nvX~G_?Sbc@E^B63 zArT8P<|%Y=PT6!K;?Pk9Hn08h{g}=Ox)-=#u;T_rOy|$V*Al#+P_IZw4Dy%|FoM2J z`k#Crr%t6y)%eij_u{~O2xp3ybxmEa2Qv*92o(qkGmLsF5xcLX&09&k-6bFWL#8BC z*ahrm;L5(+SbSnGsCI!KLokV=$}$BIJV@lK5NTBfP25E)V|2&&8Ary*eI?*+owFSM zwmzy5iKM7fJ3=v*vRQQM(L~d!gaFD;UE@RN7v?TO&ZE>#3RU#0H4|wZctwU>%C(oM}z9gkJNDd$mZNeJ^n5IrvW1rV;m(^8hjaC+Spa z+)pwST1GLZ$zVp>IZOVjC$xi)!Pj;qZNMoVVXyoG4T?JL^kC>+^^3AJ^MELuX+z&Z zgc*J$ygp3C{E-kPDuUi?PT}AbR&wPCSEEm;!x7NKc-NObmPz=IPrNb6{4q8jMDnDe z17G%(BD4GDv-^<H+-NV#TGo(o7A(vL*;ZnOkNhTj!oX&rZzH(mga7;%tdX{6flM95aoDbxG1=*xbe zmR@cY@Kf>RuKB$LR90Qw**iY1lc}z5mx5Q3<@WhpVp5|iT}l%6NW$)_7{W8n3r-AN zTER>e11kt%D9?fYf@QoesSArL(89!!3L!5zvMQo$@IdAyKt7w_%&6ET9%{RfN^&h011F?FO zgBW{X(*5a#m#~hn1WQOf)JpV=zZs4bz{qvc^tjd{Q1S2&Ku2L1jw+Uz9ZW5;YUL*l zBM;eLzV{5*rAZk!8@*`{$Q&=5MGrUMMg{@`0p&HNoR|CmmE&@O$R6s zbi?tsA%VEt_M;J+ZOr*JX*N;`5XIn0&zJ{_E-ym|krsuxge85XS*M0s57*o#*pQN29XZcu& zr~;-F=$02R^vw&J@N-#Q?_8~Y=#`b8G$?EKe5=MV>E|c>b zPs%*K3ceCAWu(;JG+3|7flt>RjK-B0ZLep}9WF)mHCwxs9nQT@Xwe;&rAM(9-wLqK zSMPG!lxef8GvHfCvxme$>dxpaKSnXLaFyzfLx1g!G+GY37?q8wwuDOAI51rM?$^EF z%=<3c17sRCBD;v9IUU#s8&w9|fMs1>!?I$Na5i_a@x$;^v|g&y%G`vqr@?Ny8qsIe zI^%i`tF_YVh`oN@3vcaG3%j1JxVF5ALFb*evT1~lG9r9R-OVs)&aGNQT5fn&i+=QA zq*9*?m9Dr-S_p^2#Pz0Z%w!1d#r?&8c=uUB+v^}sC=WC4dnE-;LAZ9Z;tY&Tb%<%m zWR+39kqnxF1AJHlLlb}X^xUgau<3D@bET^e)^K_6oK3kvSd7ge!{B}|79D@Hk&b7B z57*X-ZIqi~xZ=C0eIA7_pZB}y%oRPY$|V!JRk4EBB9z9q14edmgUTw@^VT4wS7;`P zu(1DO%KYz%@PAL42Xg%vJ^=hLe&Fx9@NZM$|JPabZ#2Nac@Vw0VY>ik6tTOPaIK<< zP>Ij1Xu{v75F_|imyp4{Gqq{^Kx6(LXA9_s%Gk{PTizR9nORSJKhwb$TMV{8zpJep z+G^Hq6HPrgDx;QG6c1jeZQJ4Hj*IhLnEUK(e?z*2RgJu)8?g4_t{@qf7y``1UO$)P z_I*pm)sOERhbzcq7U0`?M}oOU<86_ru9>LSCO_}OZ{-$lO`cSI?2vM0kNn97#WoJb z!+dM8F>JHlC#+UsYY*4-F9wpOhR-G=>bc`t$G?Wwe??az5jP{}PY(O4*s<=5ss)nS z1S!Y{U1J`VmQ0pSR()E3@oVJ1_@toJy+UqgpU{fvETZdN&uv!9DT2u|lleV*@ok=7 z7<5M#b2Q-R?8o}cL%t|BJ&Sbn%z`S94(Eo(ed%!~jJ1@4|6z3gW^&$u1QsCkzlnyw ziI3m(#$T|-Z&pLp)Y;g{(!s^v=`Wn(%_MJV`$l4@O32HLiqi=>SsL2Nss8(*xS_43 zjVFNmkDcZ(vyGv-Gk^v3?>xf7_8tHo00TQaD}aFo#0mg0GrvI~Z`T???@uNv7egCM zV<9_p8&d%DAB&K)vFRH)!o~a-)$zMmztapL;9tmxh@pd|sinDv%b#lg6j5<8wN(dj z{#E{WLh|p#@AG;iG)zGN;BSmW`Jc$iZxZFVbpO)}e^uyej7$4^~RzjjE5R9avGs^;n6C#zH5yuA?x~auo zMU9d*g_8R(?^@!Id$bJts26tcC9B7{n&%OyaRa`P`=v(1ngc{-jU-C|@6r4)f?%Uy z_n6aQx(vCcU}F4$*|CcVc{c|o0O=j|SqQMaekYY~+G=2sKrOH((3AZST8a~NlveP^1 zj_@}g815sPu|N~pnPS$@sP%sbJSOwG*uxl}n_0U!k6g75n%X%-V8Kjmgb zimyIDz-6wT;Xs03_p&=&Vh%5iT)5G&V?8eI$Nh}1ljw;r(fRKzZn-L$P@gj{m`2~t zwm23KB!zS%Y$7?KF!(eh(Lr1~Rv;Cqd5qCQ67k>Q!Ow|*m2KEVyL89+pizsKFM%)% zkEG2ct&-0nmy3V^r-g@T6L=$OSXpzcxh5KC-XKooZmJYhyNDE$%MlsR_)=I42Q`c@ z-}E7IOYAGkndNiz)JC1=y!CngNkqBS7@R<<9L?S%2b`<8F|fDxpb4F>R2Nfj{OW9V zvAqO#{8rk?) z-!8mAg8%1D+W5nV``4T>zZk!Fq7I*7uuwW-NHv8Z(8;#=prFK|d;y&v?+c=#2SAI+ zht|heduhd8>i7q}w|I}w{TCS#ywAd z4)3Gxd&OV8B6JhA3ao_3kq94~?ax23-$5cUvlzd)cH*TLTUh-f9yONmXzCQJ+ffRjwP9X*xq97=XXolPB zh=eQ>jQ#@~|Mna(-2#~HQE zc%>!rOf88+pJ7e6^d!W^hab02udTboi*Coi=RAJZ&T5$-OM!ddfo8}qT(M;KLB zeGDDtZ%3YmeeMDA+8tGsZMF5U=Rl`d-|brvi*3FIJ-E9KGm=DB@d2#t*qn%h1s%jO zNS&x|Mlg5MY#=OJTK-grBp$(3J9Z51v}TDqm8Wd|o*wQr5sjz!z*TT0<5sAS0H3c6 zs_qfW3<$mtVK^w_p6G9)mxVL?0>sZXnw2-7$WZfNK)+X@pe+J8pdt*;CRoZXs!6am zh5#;sOknJ(+}AWJ9fP(@#LFB|2$G%8Snf4aXKJPHY{~qA;RW)GuD*D-eDkEiQ5&Ci zm2_GwWShRUQOv7MYqV$tO5olr%Pgd(qDkki;>Q^_RgwFAWe{cZK{ZAsZlyDu3vwim z=Fh?c3!*I;flbkiK%XGYWMk<1hHDkd6jv^{*hxwBV>ayOu)1t$|9VyL_l!sJ=64sj z3BD~n-SMU+o;_#2RYeD7gY;+JzOF`aL17M0p=LGo;HIYuE_;VBK_4VX?1SQ_vd3Xi zj|}VYoE{5#H|i45P(?($*I9_=@e5c|Mj9q%WsPXaZD3?Q>s~B|_mgLWB1bubrnZw5 zJ(N73%~W&9hpd==Kiq?R#2BE0n-NE436wB?hJG@1VI$PMm&F_4JoIOXmJBPTQ6fU| ztBIzWl(|7B5<`}%jYA_}Sh!TG3bLihSLCFu%w5OOFtv)5$Nvdup%J+={fHvKY#h5S zo5Bt)KQL`@Ad{`C>aeYF!>z=!Fx@g3NnOg5SyIy?NZQOj;7Sl7IvpqZyU(q$f$a$A zKHxxSMUxU$L3`~g&Af$P;bBzBSg&$k^`0s(WE-YZWtY(3!v=i;tt;KVlJUDg2|k@P zJ9nskHDuQLKH7LA3CnrpfFCB{4grOi;<9-NRxH!3rhNE-hR>h@K?qnHG1K>}TBCY! zh%&FQ+8oA2aXS=?d1hk6kX(uYjF~3vV>c4kUa#o*s+Uzn*6cv@FGwe2E*QaC7--y)U6^KWG24cX8 ze1p_t2s^f@&6sof0dEHKGiK6Ng!aS4LI){rdG#&-U-w}Jd z;0X48rC(*^;c}fCXemQ}201qpM}bO4i(&}UE3pg4rF}?F5fmgK+i2qI%Iw>l{t@zU z)AP#kvU&d4Z#l+0>oRlI+~SJXrcF+a2D)>o6?xQhoG$8~31AXvt8mZJ~z+xg7#mQ`CR8o53 zj*DV#T7u%eG>{ zv#o{5))+T5oD#q7hNb#KLNo+ZG;COCqsl|jiq}TmFnW)B+yw>5VQe)t$F&;2@}Vig z6Z&pS`5+>zB`JHYA*?vMxyFj~T!3}2;nn1UdQXLfuv<;vrA6U`$><*cBEp0HzJuV& zM#eS)O;+NAF-IH`P|dw(bAd(z zvJt#742ZtxPmk4O9#?HisV0)YDbYjhZDk%sgKbY`%Mzs0!eDlaZ7Sk!8HW3?HKKcr z)pc4rr;S2WX0cckC1)-y<}94T>cy;VYa3EpaQ)#g85*Z%_O*6a4CW2AD6Q=*?aHrL zzuJum`#gWv_0#p+{;ZxpZoXH0wLq2jlbrpdk~w^GhJ+EBakTNkKq5fVYKY>ZI8@tX z#w?eTg0LdD&u_S4c*m9ua_X|kd};27$=j4y+z~CO?@?kfSB}cJ+GcwmA>2hER)dXSC z2rWb|qg2Xvlx7r8AsGDQqx2*Z$bd|rmN1J$^DH++%y>fd`L>dEfyq%_%w64%8N&ywx|os$Yj32q(yqwtjQ zrSOpOq41LMqlrV!e1||qRv}}slIq56?L@77onJi~NidJ`eX!+PEN#3;=7xEEzNHMh zr{$pNRlv7fR9Ni>5NJkGHXl?&MCmSKxkUa>tQ>NmEi!rQ!ZL5wV#yw)6ro}Hti~)y zH4m+5o^137@uX#+R@XJ;HM2GTHK_CnAj|{Hqx5}u#wh{*^$(00LX43M#)2MwGkBte zAn^i8>8wK{hD<6I`~h3#%M8s?J0%o`Qld86^c@I0k|=5)M}aMbY{^Q@EF;D)vQK%c zKA3T6_tO^EjwFX#14nsd#reZF_sf#pKcEly~9!Iw;wn7jDyKqZIc#p`E#KoODb0hkoY_L*XO*^R| zCys$22l6h9ZwFg&qK8k}&bKs@AYg$ot_JseJ%teb2?)-UAP#i4Q^iU`7y3rOUa`%5 zgF2%fQ8vdCj$i)I=`Q5u#@7Ae<*KRfcp-ers$zPq%hC`-uFreTHZU->ybU!gqgIA} zp_q6~brpcZmYbj)U=s<%xOeV|C>s zeR^b-<`MjKn@5;tHpt|IN6_^puLNaBZ&8@Gh93{1Zl6giQ#qYFi68km>a!3U9P)J0 z`D=9|@FKI`nR<*s#=0^jmI^Hzm#u4e6BzF7@XZRMV@A4 z_PWjGLkkm^)E795!1;ZxZgVHOe^<-hK&)#x`c=i_(Mg$|d8yqW7klNz?scWFZN3iJ zvn2Br>`rR)JiFRE=KDKp(2o;?w!u)G?t72rVapIl{EYv{`-S+dB7a=m;v4N}ORMq| zaKx9NH-l0y?J^7tpE?qy(xYQ8PJNxK#$Yh2!U#DrP}PoS>if4OF2qhvtp_Q;AB|w7RP}RxsPL`@3e% zt-aW#uO&-4L$UEhvI01oXy8Q3VPn5$uRFaz%{@edv3ZYyL1Y9kLnSN_Y8OD5#|@YE zV9UN6)rCT1UMbQ_cMnp6U&K?eS>(Aept6R=1zlQP&U@J1Ra3TRl|5xauSy)E6Pqoq zAD_-fMUz)s;77tap$Yn>K%04q+6smq`jfI;0p#$gF7`+IKpqhRo_kZC-`zh)yO^An?Q-tlnvij_0@ zgkWiuS~6a)8wa_R-~Uu)j7XA68cQLegBW?<@pbWRI;dectOFYX3nZ57us{vZ?VTiw zt$}hvr28D2)k7`>3pl|*2ux-pO+ydU-*AcYE(j#6Bo0o>5cxGO8fBi-&n&maAJLD) zzsS9B8^MNj5*Q+t5Wtywq|!geVWJ1sT&LUqA-y!=aMSR7Om{+$&U;WlqeZz<$#70# z8`@;)1REC@?bUswyRT92YLiv=F+}ck3b~7Doq+X>Qx@DJ=0u<*#%79GBiR?542b@{ zELBmXcUU*@}2wG)StbrK= ztE1SnoWLSw(9gcukI|%IVq_%Q-O}@+Gsu^LPq5w6aiQDDF&}sl=zS}-C#n5BK;%lF z$PFaZeXe}c9Ad4&Xp`t2R(Qcv@P9>(9en5Gx#Y*?)X(6W&rPT<5`Upb`Rczf=*>x? z5Pk!t#Pm%d*X)D{y?G_ckeIZaWo_%09d) z%YIta#QY=IX^s10*?yst0zBe0VfTiI-|Ysm(E7=X8-usLfJvrp*Q{6N2KB^|Y-`Hm z1oyj&4T8|o%#Cn!CTTvY4YQ`MYJ4?UMR*zWRkE91(+B;IIoP)Tm$1{@g|;#F-TUg( z+xvWG2Ol?|NhURe^qn**^CRk-fz@BtbT+lQBdwz^ZkwDZ5&aOV z34vK#RA)BxuBEmUNP~v|9r6>uc+S+bctxJ5aQ`_Zx=M*hz)D!(mg^rgsAS zFT}{AQj4mGl5B$cPolk_z>XZ~ft*Q~Kr)@0T5?x1gyf2wA1fs6)rr%olFEq6)7#c&C-9CD zw)K{?)Dnvf4KwR65A)RqIuN)kAHK{{mFZ=E*6bL3v2oPJ8?ir^(ob42-zB$JxnZ?pVcDE{n^fM|!H6h}MqkC_XKqiKHWtrdVizFp=w+5A`3OzP9^~c<<60KzuERa6EeQ)p8;A<4luCXu_LGll(nU>ZjRO&B(AN zqoH|ZA3wvD6r@!BMAwWC6`k>@(mRG@X0JSuS5wrFb=$QdeAoQ!Hq{r=Kv7&$t2}?cl>L)c(*~ z^%2LpRpI7p7qdhgl#%Uue5nUBeg@hD0jOJtY?N>>9S*~Xz^W9}q~9{1 z8U^weye*Kb8?%CxLee2dsyWVKH`_R;mSSsVC?VM5dSA*+I2%mPO_( znAZu>!*$=))wKu}V#z8@cm73oj+wEp2|R*C{@Ku|0A6BzUOD@k%-Ydzj*mPyD#&-M zE&eaAMO|FdKPC^|(s29`H2~;my?Pj=OHe!EbTp-#y&D!s7Gxoa2jh%0>8ab(L=!j* zrc4sTF;SlltA`Mzv%6&IV5t`xW4gyfEv|VX(4APCX{ZJB4QtrOO*2J#)({Jdm*YP2LC87|0 z^fYluqq@U8eF6FF*Yww&j>NuzNaH)wyKZvlbDT5y&Son7wMf^5+Uj2~P(d-KAkNTf zB-rb!Z18JjyOneNY#*}EkexG-T0d~EUpgUX0gOric$8YKE7~$! z-w4|Q5gly6nN+6}5KfQrm&^}1+*|~4T>_6W@~7BPs7(x~@Hs|dqJ+FoDvJf!R~Qd4 zGOLy z-~jTZaQ@`T6}>K{nG3~DD!jSw$BRb^wg+{S4ES%@+yq<{9uiOUiM$>hael}_oe99= zGj6>;TE%{ldn%XIr|{AI;{AmErOw@+{GN2NmAjd_PEu!(R&Y-;8ip7ulDWuh1Bk|i zCkPkc7IEolC)1Cb{N?$(zSo`Tz~&7u_k@s-8=C%Zu(#N2xYqcu9e1ALuiT1BO%U-} zJV)I#o}hSLw45Kv)|Kzlyz7I!bmsla1q2L88sXMB`#)|$U7)%ohi*`j4J>U%Z2h=k zy`UHJ;R~CV5v)O6qgxTT&PvbM&LlhI7F)~4hsMj44TNGANJYe8*(^FiyV-dBb*4@) z!$pu6ITq(1@OCpPgVkzy*9vTzApJ25mZ!|)a-lcSQ{Sum)OsG!7tkjn-_{d29KeD0 z6EF=tXg*&FyzszeJ^?)8{3ygAkrmj9E{z2LIjPuRjK zTaf3efcdOS5B;4 zA^(&x`#qd0%+ZiLh}s`q{t879i?(%B;fyQKP#1fOA=X&i$$nQkiJA>&+V)f}Fm-k@2sCBP57`*umDvsaVo(Dan333xVgY&qBJ+_brn>9a_&;w#bqX?(J|!@?g5_BG^O!d zHCp?RAu*1j2f3Yuor!`qCGC)|L#A z8xi33IHgcYelYqH2s-tkfKTPM3p|VlZOX+QR3YN+I{gjjx?eTTlIi6B@d8M&pJOaARI<`Kl>xMsV{@oILzA4x95-#PTY^_1}x#`e#&Y@0w zrOvJ=x(Cked3kJlB#GPH$WqEtar-Lx!qhOgGP+PcI6ErKMpqOHeGB5rg{QnPH6`ZQ zZZMpxdBlwV(vuB?+-ow=#y%lSsF{iWbL&PhgA%-xzR+z>FpX44(aw-5Q*KBMMS^^h zsLKlPw<3;Q4t_C%T=;`Q@wmK-tlx{6O3?;0li$1XO1~ zU$>{D!wv1Yee!0Ylpwx$lkL+@Zq!a$htV%r1cpk(M(^qg&GYYJN1YUCHzY^JSEq+? ztd+@SVZlc5V=(3T%kzF&1K86#3)Gpw7Ord21Ewuz3LnbFE`rik{BS4MPyTi~HVf25 zJc{R7_Im}JH(Lsd|t$aPs~0t%2)``>Ixj&+~%lBo7m zp?tU*qhQn7I9ZpU&ccu3s!aX6@sDbH}s8smv6>|0yA`Zo$r(m>VBmAoLN zC#*)faw&1rX>l#VSR<*ECIOkvc-g(zDtQLSwCjz9T&sOUvugc>gk24#RtuLpeo&0i zlUl=`q7MEcL(2lQ2Va;eEHkbW69kG&W|bgLMsHp&mN5gwTk|hf7Cc0J&r`*dJwuSs zrd;6&Q=?UrMobPqJ|nuhE*0h#oJry(P?UDgXOPc4&o4Tj^2)-t(S_N!kF`78wp%l< z49z7>!)l)(=HR^$J4_W`5rLw|Pmi06(JEXer9pmzz#FZn_{;?zn9{xE2uwd0L0!AG zNrJfLdUwS~BrKW2+foz!Jm1mNWDNW-opm=v&`r=<5~|e22H<{Z8GZnB|H7cD$A|(D zsMRkQ&{`*A$m@=IlDJ-J#50EmKeEWvMSI$-$S4k|&HUf~#fZ^L7%$AvDU_Ngtd7rq zk|}Y?et`vjZPt(|MGS8YRVEYDGYLQ7?G#aq z&yxg@6iY}>0|&7da=dJKp1YK_9=zj<7e#hHgpbMRB=+GMnc5=7+#<3{N{*F>*Dmep z4B1Wd&6*_b*GrlysfdL6*3JM^1dk4D>dvSMN?^^Q)y#=MdxLx3t!H>!V>V7s&6eet z1jT-`$!UmJiOIZ%kR_u*vz(7RoDu!G5E-;!H8fm@W~|?@W5iLqyEf`yJlD@mwawf5 zl!=8nyDLIlD#I~P-vE70pR-*ZGf=SF!wxD#nv^z~(s3GmP$6+^o+?EFEPg8O_tk%A_I;>8B5nOH9OT)Xp zb&>kP$g;L8w$LNjaySk|ye`HK+wan-o)BmoAWYHt9h!uE+#9!q9{6==1goLr-p=1$ zLwSxSAa$IfjEl!Rd>!NQLFSu&YW@;rNgi1C0Fj~ic?!ap5%~Oy-TE2g2fWN3?dI*b z$oqS6SiCMb9T1KhJ!Kz7azk2bUw24o`b@AOAAx}idfr6TywI<|J7UIQ zE__6M^$0wjrDdg{fk?_$x!IYLI-Ygvqw?TWBajeC;Y5KIYUJ&%SW}!x$bal#U+F&R z4632|jzB&lNmrv2XhXtM@;7Fxoat)gd;AnUYiIXG_5OKywO)d!;$86>NZ|VnDJcGmhuquKb*BQ4D0sCcW#>i7J_KnRg?-?jUM9JjSbLCnbPK%Vm9 z%+$`li)~?AGhrN5y!ug`KAcrY82)~*->ts*9zr`mWLgRWWMc+_Y)4|*H}E;pZ#8zW zw)|j(vR>_Kka@je3>HpGEGj0!X&*7b_OZsIJ_kqBG3%?BWkcT`&MEo!UvM7=D($H#5RYsg}x8zLMLwgAAyn$DLg)}$}z zvA}D{*w&yzNzbtKYja85E4c2}4D0nt4;~H9;tNO-y=_xsOfe!n&(F4vlrdMvUHH;M zVZm8B-?GD@{OB->d^>^t4hp=dHY@%*(JxkCgTN7(6vpTH1Tz|<=WKT7`1nnP_5}7s z=m>8(^vVT4=+btAg292-!pdXuXVMb2c%N}7016;WAxT~BF!RMGQMx8vIzF*JQ#>O% zM{br+COE%9|A^Y<&E(y>kD#Y*e=>a7u;EAiTrv+oFVd^g+k&$McjZPTRHjqZAr?V& z>YW%*G)+XsuM&2K=pBWZ@7HDSLxZ!0*%I1ICK>>Y;ClVUrTf8AUp8!11YAJ{IrSN< zn{J`}C_;|;;fzSdKn&cl3i5A9GCiuGo0ULJi7azg!rth;qM5hCCIfK2 zMB;t@fRJFHT8T0;aUY*mUyUZHMh6tTeNx1IsUtrGp}IO+goIc?AD*JVyo5JY=zbbm zkRkConAlZxH!g8y4Do^JhFWxB)YqTH(4qn)LHY)yRfPQ06GOq(3bbM^lE`Dx-5_FL z#RvtEg@`jF)tJQuyI_i)XS=JTKGp5hy$);C@W6i-2=|xW6*NH!*LVFu&?E5$nZl2w zvi#?^9}&s5tIOii;7G#{t@d!*3{0(`@{okkd*BM$7&eg@HXsmr@9EHsI7*O%7%Hk6 z2;&);4=*`{bbzGvp5pKw{R#H)UY$Ev$OspHl|l*m7_DIZIkf9TRzC!pa(0G5*-5nt zxKIJ%AF6TyihSlB$HL|(cFDiQ^mwnF9(iA^AnbjTctr8_@={Kub`jt_1M^bcP1#(j z<|8FqA;AgF@RGp4A$Pcw!k*c|fk{%8`-42A@5FU^u^jDShR1)3h^Cr7ls)TePg=+S zC>Ffe?4{qK{Y5Ma7Q)kud5r_row|baZu24s$~-NC6v{{hP1=>1j`8kj=$8W-3l|4Y zi;rP|cRd6;SUJL(zt(TyA}Cd1_G5D?ag`28YLLvuCE?41;Urt6W?R_pz%n)%(l_X0{ zj{yUgR8~-Odu-QBf>tQ|F%Hq~if~jeVV~ikT#=iLxFl*B7`3`dCiT#66uM;zgxW0m zqTe= z$M;$XFi6`I*Y>dsie|jPzK+Az%2oB#riZOOrdN--XCVTh!2t0*2 z6jIylI8a_4^Hec+!OytoH zBh(hM6kmR2`snz)4ADsbOXV^z@9#@JdIkov)v1oM)22?T-;kP%&#Yy)RWX4K(S0%>my&LB?*4eWtRto+*4o@jN@UvWG%WPn{Qk07U9Mh}4K=y-Qc{Wb^?gsqk zj>m@f$7zYhP1kF%vxA?CjqIrlo>@m~OI$!xisMHVhj!F5Xx8mPm9J-S2vCMY#!kmC zk<4l{7QX}U4b#+5(uW+KrTg6iUdjDwWW1Qs=PZCO$+%w3am=yI6{O2*B@`hm6L~2u zPQy_55z+aRQVdF*U6+75%g6TbXDpT`)1DvibY|*~LxHZJvF~aimXeujn{9Ql`9hSc zT7-)G1YaYGbuBR-i7mh9jhb1C=k;C*@5k_weEH+WhS9=Q9eus=9vVA7Z!}!J4n*4$F0^ zq)t8Lt{md?CqY5bSF-TdU%IRKm0B5o<4>jQFAEQc$*HWPMxoVa z9od3*-`oz;pgYf5+;o=hbxbE+BV(}iARdRltC#d^G47Z6U!hHs{0`Sdwc=u4Dhv`E z2NaCp6LG(2+d|ja9`F|McNq1(PXPgIXMj3@nuUc4K+VX&1Yn?}qXW>>F|q?R|5Orl(6unt z=eIJpFa*&3@$lR08@>^|>~ze3%=cNn+tdv7f5Eqcx;CPQrp6`?f4ccoN8Z8EQVGEJ zSNnHE^l#&R4sWomAp?N^ov4-j2mJev1ivTge;47e{v7oj{?Nb*c8-Sc0{!s{=-L~; z_xGO#c}Ic;O?2)4K6^>sf7$eJRPWz%{FlT4`u8CGg^&wby;0+)R>lBYWm7ADD|^$w z9e>&>n;JNn*uRO$z{*O)#>ha&_zooh|9$^Ix@KWvpL903k^Lp1LIr8e;oc_<1sKW(9pB6va`I$gbwiE%zw1{$KhW?GQZ{0Kf3yp zQEwS-t!QQX&fx>--`AUe#+;tv&GFxZF7rQtZ-)0ue?>+b!1h<{{sO+)|7HB|#J8pV zH}fSrM339@hJY{)Wnn+*Hsk0(L40X1 zOxDTh0Fhnh5SEJS>KPqfUBsJ}WpT%Kx5p{R8Dmv1Gek=Dxg!nens@?hY97O}CDeF$ zC{N0T+6k$LvoB2=v2_S)@chrcL?v@38OI^yr3%+Sj|raAcoEVVb#KZhi!6h)8c>z% z(_mCv(0Wz#OrRUt7KU8Hp~{$t7mh$VpMc3ufv30TZni?3JYJ}#{4oMsBXjCn539VX zJtSw$VKoMPk58|}I5mik7oj)91YpwQp89tiqCqWGFTRq+`s&bd)zK2AKWR*w0Cb$H zONozkN8{p`JH!&zvQ5cjZbG%|{mbF%pw%nfL{yo+z_E=xq97hbhBj&xGO$%QW(d>1 z#n!;=E$r*QIML<4EL3uW&8KOljEf=q7bwGfkx}^60+;a?7PwVKEr>fT9BsX`IvO)F zk0H4&nUtW&M!KSzT)N0mC+YmjhWyDeRB2n*==$!PYm3HhW5xUU6__Lkcgm%&3vG13 z4X^*XzW&LSe_iO9SegD_Um5-h@Bg*Fs>m4{{YjpGvHWj~@t-x}KRi70?w2=pH3TsH z^?-pgK%E}I0AToQy_B=Ib^tK^*CPpHRz}uui|XHb{_kt0zK+h_YkH7ZfEVc33NJ__ z#E$-cm67)L{&oanOnLq)4ZipjdBj`rNS#4Yh~>B?2MgPv21}L|c44JeWY8 w4@e~d@6-v=kL2cH3a}t^$1no_Qv-VkT{{P7ySLM$XJBJtgeD;ok`adfKOV_PAOHXW literal 0 HcmV?d00001 diff --git a/Doc/latex/group___s_p_i___i_n_i_t.tex b/Doc/latex/group___s_p_i___i_n_i_t.tex new file mode 100644 index 0000000..77960f4 --- /dev/null +++ b/Doc/latex/group___s_p_i___i_n_i_t.tex @@ -0,0 +1,91 @@ +\doxysubsubsubsection{Init defines } +\hypertarget{group___s_p_i___i_n_i_t}{}\label{group___s_p_i___i_n_i_t}\index{Init defines@{Init defines}} + + +Настройка SPI. + + +Collaboration diagram for Init defines\+:\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=238pt]{group___s_p_i___i_n_i_t} +\end{center} +\end{figure} +\doxysubsubsubsubsubsection*{Macros} +\begin{DoxyCompactItemize} +\item +\#define \mbox{\hyperlink{group___s_p_i___i_n_i_t_ga8ad4712bf4add56892d057778e826e0c}{HAL\+\_\+\+SPI\+\_\+\+MODULE\+\_\+\+ENABLED}} +\begin{DoxyCompactList}\small\item\em Включение HAL SPI. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___s_p_i___i_n_i_t_ga2fe0c8aeb2c61679f32836fef479eedf}{USE\+\_\+\+SPI1}} +\begin{DoxyCompactList}\small\item\em Включить SPI1 в \doxylink{group___m_y___l_i_b_s___s_p_i_gab9f13318daf02bc5b5f302ae392dccac}{SPI\+\_\+\+Msp\+Init}. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___s_p_i___i_n_i_t_ga53687cddb8e39e76a79b8ffaa152fb2b}{USE\+\_\+\+SPI2}} +\begin{DoxyCompactList}\small\item\em Включить SPI2 в \doxylink{group___m_y___l_i_b_s___s_p_i_gab9f13318daf02bc5b5f302ae392dccac}{SPI\+\_\+\+Msp\+Init}. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___s_p_i___i_n_i_t_ga5fdd6e5934a8005ef05b80f6d95883dc}{USE\+\_\+\+SPI3}} +\begin{DoxyCompactList}\small\item\em Включить SPI3 в \doxylink{group___m_y___l_i_b_s___s_p_i_gab9f13318daf02bc5b5f302ae392dccac}{SPI\+\_\+\+Msp\+Init}. \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsubsubsubsection{Detailed Description} +Настройка SPI. + + + +\label{doc-define-members} +\Hypertarget{group___s_p_i___i_n_i_t_doc-define-members} +\doxysubsubsubsubsection{Macro Definition Documentation} +\Hypertarget{group___s_p_i___i_n_i_t_ga8ad4712bf4add56892d057778e826e0c}\index{Init defines@{Init defines}!HAL\_SPI\_MODULE\_ENABLED@{HAL\_SPI\_MODULE\_ENABLED}} +\index{HAL\_SPI\_MODULE\_ENABLED@{HAL\_SPI\_MODULE\_ENABLED}!Init defines@{Init defines}} +\doxysubsubsubsubsubsection{\texorpdfstring{HAL\_SPI\_MODULE\_ENABLED}{HAL\_SPI\_MODULE\_ENABLED}} +{\footnotesize\ttfamily \label{group___s_p_i___i_n_i_t_ga8ad4712bf4add56892d057778e826e0c} +\#define HAL\+\_\+\+SPI\+\_\+\+MODULE\+\_\+\+ENABLED} + + + +Включение HAL SPI. + + + +Definition at line \mbox{\hyperlink{general__spi_8h_source_l00075}{75}} of file \mbox{\hyperlink{general__spi_8h_source}{general\+\_\+spi.\+h}}. + +\Hypertarget{group___s_p_i___i_n_i_t_ga2fe0c8aeb2c61679f32836fef479eedf}\index{Init defines@{Init defines}!USE\_SPI1@{USE\_SPI1}} +\index{USE\_SPI1@{USE\_SPI1}!Init defines@{Init defines}} +\doxysubsubsubsubsubsection{\texorpdfstring{USE\_SPI1}{USE\_SPI1}} +{\footnotesize\ttfamily \label{group___s_p_i___i_n_i_t_ga2fe0c8aeb2c61679f32836fef479eedf} +\#define USE\+\_\+\+SPI1} + + + +Включить SPI1 в \doxylink{group___m_y___l_i_b_s___s_p_i_gab9f13318daf02bc5b5f302ae392dccac}{SPI\+\_\+\+Msp\+Init}. + + + +Definition at line \mbox{\hyperlink{general__spi_8h_source_l00077}{77}} of file \mbox{\hyperlink{general__spi_8h_source}{general\+\_\+spi.\+h}}. + +\Hypertarget{group___s_p_i___i_n_i_t_ga53687cddb8e39e76a79b8ffaa152fb2b}\index{Init defines@{Init defines}!USE\_SPI2@{USE\_SPI2}} +\index{USE\_SPI2@{USE\_SPI2}!Init defines@{Init defines}} +\doxysubsubsubsubsubsection{\texorpdfstring{USE\_SPI2}{USE\_SPI2}} +{\footnotesize\ttfamily \label{group___s_p_i___i_n_i_t_ga53687cddb8e39e76a79b8ffaa152fb2b} +\#define USE\+\_\+\+SPI2} + + + +Включить SPI2 в \doxylink{group___m_y___l_i_b_s___s_p_i_gab9f13318daf02bc5b5f302ae392dccac}{SPI\+\_\+\+Msp\+Init}. + + + +Definition at line \mbox{\hyperlink{general__spi_8h_source_l00078}{78}} of file \mbox{\hyperlink{general__spi_8h_source}{general\+\_\+spi.\+h}}. + +\Hypertarget{group___s_p_i___i_n_i_t_ga5fdd6e5934a8005ef05b80f6d95883dc}\index{Init defines@{Init defines}!USE\_SPI3@{USE\_SPI3}} +\index{USE\_SPI3@{USE\_SPI3}!Init defines@{Init defines}} +\doxysubsubsubsubsubsection{\texorpdfstring{USE\_SPI3}{USE\_SPI3}} +{\footnotesize\ttfamily \label{group___s_p_i___i_n_i_t_ga5fdd6e5934a8005ef05b80f6d95883dc} +\#define USE\+\_\+\+SPI3} + + + +Включить SPI3 в \doxylink{group___m_y___l_i_b_s___s_p_i_gab9f13318daf02bc5b5f302ae392dccac}{SPI\+\_\+\+Msp\+Init}. + + + +Definition at line \mbox{\hyperlink{general__spi_8h_source_l00079}{79}} of file \mbox{\hyperlink{general__spi_8h_source}{general\+\_\+spi.\+h}}. + diff --git a/Doc/latex/group___u_a_r_t___i_n_i_t.md5 b/Doc/latex/group___u_a_r_t___i_n_i_t.md5 new file mode 100644 index 0000000..51b7988 --- /dev/null +++ b/Doc/latex/group___u_a_r_t___i_n_i_t.md5 @@ -0,0 +1 @@ +a6be7d8c2d212183934faf5551879d8d \ No newline at end of file diff --git a/Doc/latex/group___u_a_r_t___i_n_i_t.pdf b/Doc/latex/group___u_a_r_t___i_n_i_t.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6d38e68cf5f9f31b17c3163a33c1eac80bc74783 GIT binary patch literal 13466 zcmbuGWmFu^x9%ah1$P@9f)7q`cXti$K4_5O4#8c6TX1)G*C4^&UBe}>o%eswx#!EB znblo;m-bV;tJmuJ6@`L`7(Fus2RudHNyQU9JAesbXJ`q}!vkQHF|joRnFBc9TuSf& z0Dw`7J1Uzx5(a2a~Y5tzk(&U`%&aXWe7FGU=$7a z@pU*7^~g9;Tx?w`erjpv2ZQVDRss?4%)@7<)(?l=FF<3SdofJ!(rX~nkv%3 zhG}`rrn`BJ$n&fs@i5Yp>z&+3UPJVAU1&uY{C*%6m#2sEyS3vvyos&xU$VTVehd0r z#oy;Q9f9nezw>`vZ2!pphrpt4AaP~To45cTp5KnQ52FFon*m@H76dQ@7>x|xj&G8` zW&C+$6tlAh{j0PoJrg|>fa~umdn@$z`>Qi%rhj?^FsiuQn*bQ)4K0;HHh=W}*K9L0 z|6P|+4#50Jj+lj`69~ZiSNeYsff@y-^|0Nrop)f+65#s(U4}oJ|4RpE_J2mk@~@Ho zJrLG^2J%0}-EV3BEXfRDX6It!{EtXH`RwkgGPiW@G`?z@^)b#kag^MNDh@Fj4ze2M z9Zi!jc@ZkC_UI>4I229DCEY`;5?C=6y=BX~`bLmL@r@}eOeKY?m3C?OvX*u^yp~p7 zf>e2a*w=?lr&AeN8?T>dcTc}wcE_FGzV73WSy$G3GVdV4tS1rPnU5?u+ugt1+pWT6 zJA+SBjC^0o<#jk8Bm@(k02@@-sW;eZF8+B#0X9wxQHf8xpy!mrvoU#QA3zKy5~Owm z`hG7hy*vV@YG=3_ud1<8UfcR!AtQWeQ}w7`hgUf9L?biI#Ovg7XBDiF%HYA0j-%qJ z-NTd z=Qh@NzIn8-GB6foq(+;!s}Y}E+MM4!LT1Hr6VT)$*Kz5(w1h4a$cfz6b8V$YE-oHg zH*%*Hlz^DAh5?{Ht?d`XfS9d|A^C=v>xDtR7v=sS02btZX zj0}AF>P-T*fXA(yLDA`yFXIXw$C7XfpBIMJvR&YPA0Hok^M)jq4u#Z~ zTVk_E@7VIZC~FEXZJK4^a`rtCmJ=AFJ1%2TV}e2xuA#eRVr+#`vwOh4=~!AIfoSqo zK6tSJa2c9ujBnyxsj_LV|7p=olW|Q1}DI(5rTa6_Z zo3DVijj@`o-L-iyP#7@%()&JO(fPZuKar@$sVdZ!KjG8&9bDNh+v(j*go}AU-iaUa6>V9fQ#P&!Kq*nWi835ZaaNph~31 zfTNyo>gY;2aQhPpt9Q&LPo0I!YJpK8uh-e&UdSe=jjWZSb;zUc2=C5iS?-Q^Tzr-0 z?y2H#<->5%uEU-Ok8Sj_!A+1k>rb<|Hln$MukX}KC$fm?u3tHMc`VPK%_A<86E2=e zv{WQ;@gZy*MwHy5Lg@&MND*o%FN^ED8;`uX61=nUnYgSvjZF#tkNZqgsw7Tl!#FVR zun_u0eajpWjU$aZS)-au>9bLhPPiMwzSf0(CBzUbCmpnIdrLD}V&<^0zr<9jRiP8Y zn>t%kafEdlfzQy*7vD4S_ZU<7o)%QpuN-}+Ao4kRzt9^HusJfeyNFzQVd|WnRkeSr z)xbTrl@X*WS&d42=S%xipGjPHg8^mL2Ft*!Q;M}iDuQxp$>L8g3^AY0Poc7ZTh|3Z z;gDjW>AvjLV(18sc%IJ%Q}@Wlx~O&^cYa^SfYs{R$;b8vogxpwPmPU3@G3ig|JC57>ujqCf%{9A<<1r zB$u{oKshrCg8*&APh?uRYa^uLW#rjVrOFcoN6+ZXpNqclfkWdODFtfVIRj_Cudi}B{CkuPPgRzYH6%E7J z3muyg`u7JB`XsBih2aS*j}y(o4k~b!TB2jKnK*`reWuKVm10+JG77>h8<4{~R(+fUjI|K8FO)NXsCU-wT2Z!5~CfVit zpIIl3RwimV^~YpH)XGi)RxxbjILfS8ti}Jgu=Or|YZ6E&ZzT7_HS`O%|}4 z}yw+@Bh{w`Ok{l@`J&^G`a6HBlNI)*HTNa&Nzx1uk?Pg2lN+YN< zl`?_Kt{$!;9UL-I#893hZMyi_@ay`n*Y!l-_9M{I^Jiz2HZ*j@8BR8r@d}}ORIAhO zPKRe82HKuB+_A?K)pjo-qO8jW#m-nj1lYkwfVEr#JQk=as2gY z5vu@}xDs>ENAMWtZ`|SuZ2tVKl(GiPBpXrh=Vi(_-Bs&SnAmr7^rJU-CD&pep**tBMwC}{LG!F~P3O5SePARLGhNNcyOX~- z|Cp@!XHEzPez?Ag@ez10#9Sh#l3 zLb!NAf23(7a$s(-<{7FYXdM=NJ?S&4eo$d;7w#K*C{{+Cd?wc*PRG{4^8~t4Q@8lX ztUs>DWaGfC;pTM_=V)x_XnG^&yJ<|AY=4-7Qynt6E)$`MXQ~>xQLWNZ*UkJOMCpQ2 zMxPC}!6Rxs@+kx5VFm@AE@+=?^gMJU^j3mzi1Ga)mv0IDe4F3W*r!gJlnwaDWH)HG zd6uFoJ;8)F)yaVq{(5$ehXSYrifrS^n@?#M9m=(M_Qc_E^*2&Y>B7Larh@?Kd z>2$nbSFgM3r#;&f_Zz26D#AA4we+X71!+};B$&@d!I2dNSsHv9c44(igfmUUXMrw@ z3k8@hO%V21*bY_^Yh$&HN%XxZhNbo&8?{-GWt$7fbU~03yraTnNOGpTE({+jM<0wM zbY+W@?NUo!Y-N(Q8e<4$`MFAM2RL#L`dWY8ixEXIXYdqcZr}z9-S_zibhupRX)f$P zHo^rm(=^bXDz;fheHav#qlcWokP4ANXQCPHGn~al5L6sJs7yCQh`HD*W9K3X0_0)^ zz~VXXzKjJt{hIErw^{xa;RVQWyXMsH3K42XLY9ZRb!+{U8 z5xa=`dzrkO<&@5BqB<~GVT;A9v+=$$w6@t&Y77H}!k48V%JThd(vg{_E6?`J$uXES3+z#`t#>?UU+_Q^~ckeOiCP%z*1^_+=| z=brl@`-7gB2F@?&_Fm2n3=w5SFj$S#Z%ydZQlkkUQf~ar6!7%|m)JD=z0VkQ2$l03 z54Y3A#n*c+M;Yso_deO!4UH^K4$7-3Q-gplig5=dETRH4-JUM9CM!TCgup%eBNXui zIzQX4gkQQav7+)JaloCU94wWSaV-_qHEB!DAzp%~FfRcoo&=1@SnSd8jeAe5ka5<` zE{ID9XV{DTFi_X1n|q4JN%Ucv5({67Bla?ruykChdP7lxMQIPT^PAqTS&J`gKJ{K@&|W`MV@*Xjpq)^XJjI`%%wLCY1g7NK67 zE8x+W&$`V>J?{jBQKrk~(k8@=1uqK%Bq6LQl&6krTC&VO)G|(>U#X;Moh)5U&Nnm@ zS*zLz=O<-#JUkgbXHuoHj}|xn8a4G8!92n{^*BIm;mWT>zp0KoprD?;JyX;>T=`6k zbqCeKdAfydWae;zuqo&?Ntas*%Y5I5N=ke^nvBr=O2B1mdk75aHXK^V9*9jzFm+%K zKVq{{BQhSZIj!gW#8%cbPd1OP233Z71a0-*S-#+~h|Q)>vLwYt96^XFqLoh^Sc_JtjN1>B8i$ub7NJSZ9NRb&tckNjW zzToPIeKW}CTyV72SQ;9I=2y<8WjSj@(fHDIpySR%HSVcZD+%1^nIH8@kye#+Hp%?r zVzM_m`Sm_YIGAq&eJiWOcUnLFS8}4%onMwtmz@TieMD1wRdg4H!j|IH4RqYGSj$aiHd>e#<~nqUW+9xwD9!Fn6m|L7XSd8Kqv3kE z%|SCusF|Ws-BSx@EC{zoaKsK$pT<;*c6PT_cjLS)xlT)O@bejcFgg|g)dBgcVb2;H zbx#^2;+^rGp@YIl*w|GhMIt-{-D}3Yt|pM3E6s@!R^QsnsRHy%(R;!*%yUyoGIPDU z)D|}IBn-ydy|L66dKu>xjq~#vQ4zU4;K=rzTzAtUYb$KUNRH@~E<HQT#1`*4`J*cZYw5;*MtMwACP99OHw@aJuaviTQ8=s3P$Vleqtjq6AcNc zTsfp%i38Hbu@N$q3Z1Lk#2a`tn*FO?3AC~Husu$jsLqtgy+3;D`TR9AgNYZhHY z8_;Lz&q3#&cH;Jejms?z9UndGJe}7hJ%HJUlUpv2FXeo<5XtKZEv}`=MJlR&3X27u z-d7_1xpFPD5XP=huU&CG6E?B;qLGk_)2W>koHvpe;*mnOoMYD47vHGBw1LCu zt);@6)6stJQ{L7US1=YW z4Bun3PT3+{K!njd$?lZvdRUmbcPneIHO0J~@9nv&5@CLz?TjlGdGHMs+1hGc)NSrK z{{F;=^ANJ#{(!$pTKKa8$y&etXcQmRZe+P!zQ8N>;~5z_1{O8MKZ4l(^EQj>XUEqM zmp9s`<&T-}>aqTQi?lCzUi0}n?+~2IdkN`~<=_vykh<)+PhI&AYqviRe2iSTS3s<` ziP#n|fv1z}+IYV#K_t7q8{&sp&)Y=Kkzr)JFk{2j%;|BmIe`b&(WKtoHl|PNCvZl( z%Qmw;%BD<8Q2Yalyy%Lo<&S;Od(YDzeN7urM&1g`aiX)K8fO1I&eQPw<0B zNuhiCqdnjraS2(GQ_>nmf?O`D4tprT8bi5Q7=QERl?Ho{`MrY0gl4!JB=pQLfWxVwsnO~{1UN{&58_ht|@QjqA zo^DFU_6uWUXhfYhCOM!~kHa6-y@q-$z*?ZRn5iWe37@vOed6a4!1~Hy-N84L>3>r9 z?L_~XgmWNmo6nK|ft?T8I1~H)f$M?m72WT30r@4V`sOD!BxFp-9kx&UAQZ>IF^}q( z7y6)di#ou-uh%`F`%k0jB7;fo$b!u8!Fga>gU|U!#MKIanw`)U`iO0+K!XwaQVm+V zy?ftXvkiIcfp*)4@=WkN347P$e9p#WGg1j@Wg7@}FQM_uh9-k7$i)-#^ayB;sKxF< zswCD`2E2evUAk;6ELwd$HAiL5X4XY+hzpp2TMjg z2UH{xC&tb(H!8-sOprjY%Mb!hZ5&8TJI_eiYUQyeuATk_scyxHy2o#z448uwcrzd(l6hDca zr*fnC`ebGH_KK{=~B@LK{o~?8FO$y~9Pe(XS(F(GUgFZ2z zheo!U+_TsxMXwznV=AQ}Kt&#S(^x{-ZR?qdwuXAuCv1rK zphL1se-c9!LzI-6AUF7ahZd`{74*2ll5e&~eTb6Vg!Me>NpOF`|YYmeYARLrEkkKqwO-_6#&>PON_-b&F*n~ov3 z6^CVGC_;y}Whj(R&w$ww_7m$T`p-D-Jbfvjc$-V^2P`g%SJ{-@Q3b7p2dP5G!fJK* zx#_^^2Lc`_`RF-!N0miNRyg@C!dfN7Y4v?t>IrFsK&If_ylL@4IS*dk+`j3#OAvR) zXdt>Ff&0t5Rblz*gKmOpA*^mZ?j-`*aZKW#GC9xpQQ;HoEp2{e`t%*>z#$;b z>Bk?G4c=aOdc)bliieQ$!FFKV^vXxgoFSA`L-C`TNt~cyo(2=c;}6}OW7r6>{Ax16 z9=_1I#Q6~@n&;>FA&=QQIb2DF>>1qFZ{*-?o%8TQt}(a_MZKF)L9)XCZvAr+=ANYb zV7?>K1C%cP?GynJQpFSFXGJ0gy5MkNnq;AU)-$RXVSP8r6to=zf9D)=E>M3BF$4!ABAC4bsFbZ}=!ea)_$d44u4c2S54n2>w^W|-xV~47=j7OUDOWqF4o1#~{?E5z? z?J68zS|_uqhb6;dLvh1Ya@5lCnH=6at$Cbk7;~h7P#X%~OzU?$JG*YYCCfXYMH{tW zF!1jv6y`CkPNyT>l1TcE_OkeW6O2|hrg#f-MD@BMH%k^r zE1{{D`ZvRwXerCE=-EbC&{P|Hf81=~=#NcxNZ)eeY){*g>;0y9oXrNM#%2k9Fr6B) zORIjv=FGNf|KhS-wpd2A901&JSVFBMGrc#$e+>13-hjQ~kUc8=9seA|j&Ds02vJo|&tQuQHan|qU-|gA3KI`*gaccK=wblG^jj%z2^OE(Q!=t^uIhl-r z*=>lniL7Q#>1D2Dq_;RdwCXQ*B|+E5vgE{H&9vqibV*k-vg=+O_Uy>iKrcPe`i48d zIJ#KU&ZgVQ_TU9g*GS3zHS7DCG;!cFWx1W=XFAK-V8fx)etRE=Yx+i0rXs5@CvD33 zn^K~Si1Y6sPR+>!1n%!y`EnraHlZjT1v9~zwGb)MKGJ)+o$}x!i zl74Lwn2ltmNJnKAe9m~KW-my^B9RteuVC?C7B7$|$`8h82PqEuzvRfsiHRaD*EGgR z;N<7ah{S6)7B=?dw(9Wa91mke_OTb?nGW)qi>|p)6(*29eN(LOYRCs^1VMds^={Fe z|DjcTpOCj(X1hKmx)#j4= zStsf27;H}62tZsZ9y-ft%Nj(Dh*V8KeI9msldp)l+||}tWC9N?rNBNXSYceAP-4mq z^x@R0$(tLtf!f{niuO~LW>-xaWh1Yr{hI5gb|hI{%`VCOyPsIVR9A`^_0qvwI1}di z>4k<|;sCUCG2|QcsM*nGdW%tMa-;rg5js4pvo61<|7Z;!wXzXg!-Z~6aH6ak2Q1e z$EwOA-G;gSnd^f`L@oIkvNB6Bt6Q=Y&^vz?30}CHtz-l@=dkNr`32#pdkF+!e4E73 zp@;a9{Z54Sr~qfy!)EwId)Fq#i9ZY2z#fg#s4=mrg#)UQa|k{q6J{1a# zrW3c-a#`q$|3r%)C{paC94~_iudt7e{zCfztq->`Zo$~g4o8|t zl>**RO@S`U;(OMu%5GT(hierVsu*i~JMLAqJd^Avzm;LevM1RQzWvIF~29~*uICN>p2S&DQgK9bxEq~tQbJ#vTsWNXkDwIOqVKxrq%5p8X+vI z-5H53_#GJ357@rm`4)} zd3oTlEt9@>{Xk)6b?@rcO0K%XKlP(Gp<73FvCd@CI z>KGN8hZRr36vi7=5y8KhD&lv(uX-N$D9dMR7WYO^ndgRB;i8HZ~| z|NaH;7Ox){$#^H2auFY#KpdQ>1-v!O@Sd5d^XGe%Q7G6GNNP~!Yr|%#(t)zuv=8df zIKSZuX23%}vf#TP9p<0?b*YVz>HXe?z{2HVgpvsze9=LXgxiAI@*UhT3%FXReup`Z zFM%O)3%3>E=X-$4OVJD6=8kz91o!TV<-jr1GPy$B4Q&J92P+*YRHn|{hMI%DAsOHg z8;oiUCZkyzR7qrj+^slIiUGR;PM^yjf$q1+5yH5R^?Z&hgeTbP{OF*@KPs#dW>3{k z1er2Zm3jlqK}sOP*`*EY;+C@Wv@v#nX28VdKvrW*4c_hhka?Ice# zjg_qcmQszgUOAYUp3)cZn>3ASGOw(od)~+L>D)uhz-&0{|f>FX|sza3H=O2>U|IYg<3L<+_)wg(nV z{WQ+)RSsGpQ+T8-`0&EpK7YpSJi~$V*}vUa`sqeM)~1gyihP(wB9GkvUKqFcs8nJ~ zAIZ~&NJ@pk6_4WZivlD|wh}cSbxOo0HcpW?q2v@lqGjkH1XA37=_i1K&QK}mRcSU! zEh&h^THq_{XQZlyY-|ILZU|WDcT%_oAN<7hMcm*v*i;4=1jNlnD<^v(IAz0#@Iv1H zx4++~y*67HkLr-|8NW)}N8ov-c%hl_@pUKJWt_%_h9{f+G~m+7_hI+L?#?2^R2CxE zXR-rmWZsb0@K0J%3eil+1~lCnus~jkaA-A=R?b0iH`GXlfcKp+Jg-DN#^7GEBGD5< z;IkTNS+^9uOiSNRLX~;F@7gqsC7+{OP>dv>cXdOm$baqFydB$brFu2c^sAtm6MK{B zL?b9J+{00N$VEF|Ko^Y?W33~h^XmobBuN!Q47!0j&F~@~n4i~KV#-g_AoBAEtDdfV z-ScDgB2F?%+7Kkpg!3ALuh#@T8e-PCr$5si$bMa8I-nR%i}d_mj$GyRfeGr6JtaPxYN2ko`6|MLq0^Vbd)r zgG`d=E-6l0K1lu^tGd;^vUZJ5K3%PfXl{?|_@2PF$H^X2uoubWecwJ8!8R8`XQTyh zw^D#XKs3rUEKmu1qx)>T7=Okwz#}04Ezms!09QMn0RjeIrlInefmNbOW>|d4f_W1g zJ+?mISWB>r4A^oq8CP&APlbTrnRF$rI`@RFPH!}LXf{`#DcccLF&fvEr5_a#BoL@M-Q%c->fu>VnC9QSN;LjYus`Fq63ON?47aUJS*&UyY{D^zec@J0#tC`_E9JGcSMfAbfl37;2_Z_^ z0r5KF3%Oc4Siya!RT{?O<~dlE+tohk(oB09v`)kf;dGc>6-tRpGt0_`IrbztTtWyo znw)X9I6WgdCMl-rIylm(_(Y!hi!y#OP_=Za7BaH6dGXipzEMsYQkN&y-l02+qgf#} zqet6@|4=3$E2$4&#GK&+^wzxGqKpjKb?~MHd^sC_6lik|Dy(n1;3wBj0gW=Y`8u8Z zrSz}TBP_#|5PvTFWIA26?#3PI7Ji}Xf>{^sDI>?qc1q@Bq*?8i#pLg~Qu}2Nfdwya zC=tVA3zQwxK|&Zd{*yBUs*Uv<#F&!#^s3o(!Y7|RT2tI<&2okA1F14KIVv=2Qu62BXA^=}Vp$bYNinJ>DLKf6aBBP?_GD61moPQ|LbbKU2S zgqXQGkgYoH-(EkSFG+RUZFUA#l+3>}Y0%=Ag^jVb?DDfNRPHWWSKzU$Bc)l@^QBEd z>C9>`KhZO>aFzCq!W6Ft87>FzC8zK?_aHL#%zX337kXj_xkDa@=52(Gv8Kb8SqSw6 zK+gx1^rh+?SFq1uG#YrY)@Jd};QY-@42!uo>s4P+3m7#;lTE!y>i;Z~}@);eQ#EnW&aEdjmC5w8>@Kv76dec-Tc z9&w}N>~&sd{1vJui3o?>gJkJlTAZKaVs%Kas78Df#&WbT<`rgI+`V6#q@VS8RE%c* z192vu(OG&Ry*7(R5Vkh3X$if>dc4~Bx+ggSXJ-+MkIu|2_gh;Rg$(L&4!F^tWU_px z=eu3ZWOdk`W)31$bJIq3}Deq$CgFtKLCAB(3Uqs z!3+&{mgKxy8yBJ};-hZNYwX?~8a4Ao0aIub^`Ck`ux^)wXbG}{<>$!RV-W z$_q?|&)^M34c%zl&`MhTXtn3zyw@+iwH`0qM?A8~GP=^y5As9qt!FHwB&EX-P@SG% ztNw@i_?rQLLu`Ru|HbJ3O)&qak^iKJf3wFTCQe3<7WN=J$3OYtH!Upyd zCKhJqpg)@Vql_}h#6}Ik`Dgv#hQ!~-@9TPFj!l37=HFnl(!Ut$-(>agSp82C{%p_L z5cCIBt>Wlx@>`%kyg~*}CVw#6|Dzzk$!cM91INFwUdG@roB0in{*5^Qr^Eo}|AO&F zZQuBN3tKY)qq>Eypska|-;O`(saqI>%$?pu1afdNaIyfISblTe|9@Y0c6J6XE+8`} z=l|8v|I!Bs5XivH&cVh0TR3)Rrnj+hak8=k{=@(O9u^xLI|DNtkmaq$zmoq~f53nD z!36jZ^Ix_8mHe|qwzr`AS5tq4)>~-XsoGln-r4|Q{=NSEd-9oqZ;t<*efj?e&;x%L z`g6a89DwuBN&FL_=laX|-wApf<>jztCKRs)^-*DIbolyhX-h@}gSdE;rTRuWDdJ($ z+9-P&^pQbFi(lb6Kz44V8eykKE0R~bU?+jwUei6bDC;!43 zCE2+S!CkhnPFxWQ$&a3I4F`5VF;^8xi~<%&pyy#;+WZ5I?C!26B)D0vfPc;PdqFUt z>dgc=b2F_BW$p16-E|%MfQ)KgRg(DZuLw%L=LL-$K!xzM4wk9Cu4eSCR?iSb*}{Bf zeQ7>ZLW#IF@~?(xiaE^R6-5#!vbJ_|sy$kiV+&PCXHjcF+opEV=Ki(fjV?@@a zKVzUobhh-H5!CD^Xvh9p;wJ(*fnaRT zxG!eg6rjgOd|-Lh8{R_)uV?`^Y7{DN-~cSJIP>ffm!?luR;|sP-f`rTD9x{2ISGiV zTwH}>4Z%e^AE0oP?{ST1up6oU_RcP&>|4LGP1a5o8vYHwblyFbV%X-C#aBzR6WB7! zS8>`=e!ts&nF)U^=jBD6KIeceu!qJASrHrUKH-Dw?RUUtEtG_pW z%&Fd5nb@VT66V!5=+#W9F!B6Q6J=+TM)L&I-oIV&-`Cqe0_LyhA1f#G-%mf_zxPD^ zx!!6hnV9|&Lw{|N;NA+{|@(m9-$PYV{l)XFd)|Re)+=sX~XuB>JF#jyP*&W5loR-`Xxp4pb>phdI#NE zTL2_S{(=L=(a@$O#ix(zQYBU>-8;i$m@@kOS}MyFd63*T!f_66Ede+9-xY8I890L6 U9N#XE`E8}*f~TMml^28mKbLQX5dZ)H literal 0 HcmV?d00001 diff --git a/Doc/latex/group___u_a_r_t___i_n_i_t.tex b/Doc/latex/group___u_a_r_t___i_n_i_t.tex new file mode 100644 index 0000000..2ed0a89 --- /dev/null +++ b/Doc/latex/group___u_a_r_t___i_n_i_t.tex @@ -0,0 +1,139 @@ +\doxysubsubsubsection{Init defines } +\hypertarget{group___u_a_r_t___i_n_i_t}{}\label{group___u_a_r_t___i_n_i_t}\index{Init defines@{Init defines}} + + +Настройка UART. + + +Collaboration diagram for Init defines\+:\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=249pt]{group___u_a_r_t___i_n_i_t} +\end{center} +\end{figure} +\doxysubsubsubsubsubsection*{Macros} +\begin{DoxyCompactItemize} +\item +\#define \mbox{\hyperlink{group___u_a_r_t___i_n_i_t_ga167269406e73327b95c3bb7b9cfe6d89}{HAL\+\_\+\+UART\+\_\+\+MODULE\+\_\+\+ENABLED}} +\begin{DoxyCompactList}\small\item\em Включение HAL UART. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___u_a_r_t___i_n_i_t_gace54f148bb1d72f13bf397d096d38d1b}{USE\+\_\+\+USART1}} +\begin{DoxyCompactList}\small\item\em Включить USART1 в \doxylink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\+\_\+\+Msp\+Init}. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___u_a_r_t___i_n_i_t_gaacb3968508217a0d8b3f64aa0c8aa07d}{USE\+\_\+\+USART2}} +\begin{DoxyCompactList}\small\item\em Включить USART2 в \doxylink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\+\_\+\+Msp\+Init}. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___u_a_r_t___i_n_i_t_ga6dadd967b428aade24008ec060009976}{USE\+\_\+\+USART3}} +\begin{DoxyCompactList}\small\item\em Включить USART3 в \doxylink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\+\_\+\+Msp\+Init}. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___u_a_r_t___i_n_i_t_ga779530e93e7aa1f25eb13045ec42b8e7}{USE\+\_\+\+UART4}} +\begin{DoxyCompactList}\small\item\em Включить UART4 в \doxylink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\+\_\+\+Msp\+Init}. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___u_a_r_t___i_n_i_t_ga592c6bf4a6496d6806ba0838cdfa2340}{USE\+\_\+\+UART5}} +\begin{DoxyCompactList}\small\item\em Включить UART5 в \doxylink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\+\_\+\+Msp\+Init}. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{group___u_a_r_t___i_n_i_t_gafaeb8bdd4aa7fb1987505530daa90868}{USE\+\_\+\+USART6}} +\begin{DoxyCompactList}\small\item\em Включить USART6 в \doxylink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\+\_\+\+Msp\+Init}. \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsubsubsubsection{Detailed Description} +Настройка UART. + + + +\label{doc-define-members} +\Hypertarget{group___u_a_r_t___i_n_i_t_doc-define-members} +\doxysubsubsubsubsection{Macro Definition Documentation} +\Hypertarget{group___u_a_r_t___i_n_i_t_ga167269406e73327b95c3bb7b9cfe6d89}\index{Init defines@{Init defines}!HAL\_UART\_MODULE\_ENABLED@{HAL\_UART\_MODULE\_ENABLED}} +\index{HAL\_UART\_MODULE\_ENABLED@{HAL\_UART\_MODULE\_ENABLED}!Init defines@{Init defines}} +\doxysubsubsubsubsubsection{\texorpdfstring{HAL\_UART\_MODULE\_ENABLED}{HAL\_UART\_MODULE\_ENABLED}} +{\footnotesize\ttfamily \label{group___u_a_r_t___i_n_i_t_ga167269406e73327b95c3bb7b9cfe6d89} +\#define HAL\+\_\+\+UART\+\_\+\+MODULE\+\_\+\+ENABLED} + + + +Включение HAL UART. + + + +Definition at line \mbox{\hyperlink{general__uart_8h_source_l00065}{65}} of file \mbox{\hyperlink{general__uart_8h_source}{general\+\_\+uart.\+h}}. + +\Hypertarget{group___u_a_r_t___i_n_i_t_gace54f148bb1d72f13bf397d096d38d1b}\index{Init defines@{Init defines}!USE\_USART1@{USE\_USART1}} +\index{USE\_USART1@{USE\_USART1}!Init defines@{Init defines}} +\doxysubsubsubsubsubsection{\texorpdfstring{USE\_USART1}{USE\_USART1}} +{\footnotesize\ttfamily \label{group___u_a_r_t___i_n_i_t_gace54f148bb1d72f13bf397d096d38d1b} +\#define USE\+\_\+\+USART1} + + + +Включить USART1 в \doxylink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\+\_\+\+Msp\+Init}. + + + +Definition at line \mbox{\hyperlink{general__uart_8h_source_l00067}{67}} of file \mbox{\hyperlink{general__uart_8h_source}{general\+\_\+uart.\+h}}. + +\Hypertarget{group___u_a_r_t___i_n_i_t_gaacb3968508217a0d8b3f64aa0c8aa07d}\index{Init defines@{Init defines}!USE\_USART2@{USE\_USART2}} +\index{USE\_USART2@{USE\_USART2}!Init defines@{Init defines}} +\doxysubsubsubsubsubsection{\texorpdfstring{USE\_USART2}{USE\_USART2}} +{\footnotesize\ttfamily \label{group___u_a_r_t___i_n_i_t_gaacb3968508217a0d8b3f64aa0c8aa07d} +\#define USE\+\_\+\+USART2} + + + +Включить USART2 в \doxylink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\+\_\+\+Msp\+Init}. + + + +Definition at line \mbox{\hyperlink{general__uart_8h_source_l00068}{68}} of file \mbox{\hyperlink{general__uart_8h_source}{general\+\_\+uart.\+h}}. + +\Hypertarget{group___u_a_r_t___i_n_i_t_ga6dadd967b428aade24008ec060009976}\index{Init defines@{Init defines}!USE\_USART3@{USE\_USART3}} +\index{USE\_USART3@{USE\_USART3}!Init defines@{Init defines}} +\doxysubsubsubsubsubsection{\texorpdfstring{USE\_USART3}{USE\_USART3}} +{\footnotesize\ttfamily \label{group___u_a_r_t___i_n_i_t_ga6dadd967b428aade24008ec060009976} +\#define USE\+\_\+\+USART3} + + + +Включить USART3 в \doxylink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\+\_\+\+Msp\+Init}. + + + +Definition at line \mbox{\hyperlink{general__uart_8h_source_l00069}{69}} of file \mbox{\hyperlink{general__uart_8h_source}{general\+\_\+uart.\+h}}. + +\Hypertarget{group___u_a_r_t___i_n_i_t_ga779530e93e7aa1f25eb13045ec42b8e7}\index{Init defines@{Init defines}!USE\_UART4@{USE\_UART4}} +\index{USE\_UART4@{USE\_UART4}!Init defines@{Init defines}} +\doxysubsubsubsubsubsection{\texorpdfstring{USE\_UART4}{USE\_UART4}} +{\footnotesize\ttfamily \label{group___u_a_r_t___i_n_i_t_ga779530e93e7aa1f25eb13045ec42b8e7} +\#define USE\+\_\+\+UART4} + + + +Включить UART4 в \doxylink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\+\_\+\+Msp\+Init}. + + + +Definition at line \mbox{\hyperlink{general__uart_8h_source_l00070}{70}} of file \mbox{\hyperlink{general__uart_8h_source}{general\+\_\+uart.\+h}}. + +\Hypertarget{group___u_a_r_t___i_n_i_t_ga592c6bf4a6496d6806ba0838cdfa2340}\index{Init defines@{Init defines}!USE\_UART5@{USE\_UART5}} +\index{USE\_UART5@{USE\_UART5}!Init defines@{Init defines}} +\doxysubsubsubsubsubsection{\texorpdfstring{USE\_UART5}{USE\_UART5}} +{\footnotesize\ttfamily \label{group___u_a_r_t___i_n_i_t_ga592c6bf4a6496d6806ba0838cdfa2340} +\#define USE\+\_\+\+UART5} + + + +Включить UART5 в \doxylink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\+\_\+\+Msp\+Init}. + + + +Definition at line \mbox{\hyperlink{general__uart_8h_source_l00071}{71}} of file \mbox{\hyperlink{general__uart_8h_source}{general\+\_\+uart.\+h}}. + +\Hypertarget{group___u_a_r_t___i_n_i_t_gafaeb8bdd4aa7fb1987505530daa90868}\index{Init defines@{Init defines}!USE\_USART6@{USE\_USART6}} +\index{USE\_USART6@{USE\_USART6}!Init defines@{Init defines}} +\doxysubsubsubsubsubsection{\texorpdfstring{USE\_USART6}{USE\_USART6}} +{\footnotesize\ttfamily \label{group___u_a_r_t___i_n_i_t_gafaeb8bdd4aa7fb1987505530daa90868} +\#define USE\+\_\+\+USART6} + + + +Включить USART6 в \doxylink{group___m_y___l_i_b_s___u_a_r_t_gab9313fd2f9fc6873ca6bfbc5b96edbbb}{UART\+\_\+\+Msp\+Init}. + + + +Definition at line \mbox{\hyperlink{general__uart_8h_source_l00072}{72}} of file \mbox{\hyperlink{general__uart_8h_source}{general\+\_\+uart.\+h}}. +