STM32_ExtendedLibs/Doc/html/____general__spi_8c_source.html
Razvalyaev 03a203fe2a evovle перенесен на float + добавлены некоторые опциональные параметры
т.к. нет особо смысла супер быстро рассчитывать параметры. это просто вспомогательный инструмент для их параметров
2025-10-20 18:57:00 +03:00

418 lines
49 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.10.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: F:/Work/Projects/STM/.Elementary/STM32_ExtendedLibs/MyLibsGeneral/Src/__general_spi.c Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
extensions: ["tex2jax.js"],
jax: ["input/TeX","output/HTML-CSS"],
});
</script>
<script type="text/javascript" async="async" src="https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js"></script>
<script type="text/javascript" src="darkmode_toggle.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">MyLibs<span id="projectnumber">&#160;1.0</span>
</div>
<div id="projectbrief">Расширенные библиотеки для STM32</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.10.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('____general__spi_8c_source.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">__general_spi.c</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/** </span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">**************************************************************************</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">* @file general_spi.c</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">* @brief Модуль для инициализации SPI.</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">**************************************************************************</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">* @details</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">*</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment">* Функции:</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">* - SPI_Base_Init Инициализация SPI </span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment">* </span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment">* Functions: spi initialize</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment">* - SPI_GPIO_Init Инициализация GPIO для SPI</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment">* - SPI_DMA_Init Инициализация DMA для SPI</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">* - SPI_MspInit Аналог HAL_MspInit для SPI</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment">* - SPI_MspDeInit Аналог HAL_MspDeInit для SPI</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment">*</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment">*************************************************************************/</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#include &quot;general_spi.h&quot;</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &quot;<a class="code" href="general__gpio_8h.html">general_gpio.h</a>&quot;</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">//-------------------------------------------------------------------</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">//------------------------SPI INIT FUNCTIONS------------------------</span><span class="comment"></span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment">/** </span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment"> * @brief Initialize SPI with SPI_SettingsTypeDef structure.</span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="comment"> * @param sspi - указатель на структуру с настройками SPI.</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment"> * @return HAL status.</span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment"> * @note SPI_SettingsTypeDef структура содержит хендл SPI и настройки перефирии (GPIO)</span></div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment"> */</span></div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span>HAL_StatusTypeDef SPI_Base_Init(<a class="code hl_struct" href="struct_s_p_i___settings_type_def.html">SPI_SettingsTypeDef</a> *sspi)</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span>{ <span class="comment">// function takes setting structure for init</span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="comment">// check is settings are valid</span></div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keywordflow">if</span>(Check_SPI_Init_Struct(sspi) != HAL_OK)</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> SPI_MspInit(&amp;sspi-&gt;hspi); </div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keywordflow">if</span> (HAL_SPI_Init(&amp;sspi-&gt;hspi) != HAL_OK)</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> {</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <a class="code hl_define" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gae110df81afd885a390bbeb152d7b709f">MyLibs_Error_Handler</a>();</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> }</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="comment">// init gpio from SPISettings structure</span></div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> SPI_GPIO_Init(sspi);</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="comment">// // init dma from SPISettings structure if need</span></div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="comment">// if (sspi-&gt;DMAChannel != 0)</span></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment">// SPI_DMA_Init(&amp;sspi-&gt;hspi, sspi-&gt;hspi.hdmarx, sspi-&gt;DMAChannel, sspi-&gt;DMA_CHANNEL_X);</span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">return</span> HAL_OK;</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span>}</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="comment"></span> </div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="comment">/** </span></div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="comment"> * @brief Initialize GPIO for SPI.</span></div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="comment"> * @param GPIOx - порт для настройки.</span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="comment"> * @param GPIO_PIN_RX - пин для настройки на прием.</span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="comment"> * @param GPIO_PIN_TX - пин для настройки на передачу.</span></div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="comment"> */</span></div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="keywordtype">void</span> SPI_GPIO_Init(<a class="code hl_struct" href="struct_s_p_i___settings_type_def.html">SPI_SettingsTypeDef</a> *sspi)</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span>{ </div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> GPIO_InitTypeDef GPIO_InitStruct = {0}; </div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="comment">// GPIO INIT </span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <a class="code hl_function" href="group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6">GPIO_Clock_Enable</a>(sspi-&gt;CLK_GPIOx);</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <a class="code hl_function" href="group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6">GPIO_Clock_Enable</a>(sspi-&gt;MISO_GPIOx);</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <a class="code hl_function" href="group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6">GPIO_Clock_Enable</a>(sspi-&gt;MOSI_GPIOx); </div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="comment">// CLK PIN INIT</span></div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> GPIO_InitStruct.Pin = sspi-&gt;CLK_PIN;</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> GPIO_InitStruct.Alternate = sspi-&gt;CLK_GPIO_AlternageFunc;</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> GPIO_InitStruct.Pull = GPIO_NOPULL;</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> HAL_GPIO_Init(sspi-&gt;CLK_GPIOx, &amp;GPIO_InitStruct);</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="comment">// MISO PIN INIT</span></div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> GPIO_InitStruct.Pin = sspi-&gt;MISO_PIN;</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> GPIO_InitStruct.Alternate = sspi-&gt;MISO_GPIO_AlternageFunc;</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> GPIO_InitStruct.Pull = GPIO_NOPULL;</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> HAL_GPIO_Init(sspi-&gt;MISO_GPIOx, &amp;GPIO_InitStruct);</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="comment">// MOSI PIN INIT</span></div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> GPIO_InitStruct.Pin = sspi-&gt;MOSI_PIN;</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> GPIO_InitStruct.Alternate = sspi-&gt;MOSI_GPIO_AlternageFunc;</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> GPIO_InitStruct.Pull = GPIO_NOPULL;</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> HAL_GPIO_Init(sspi-&gt;MOSI_GPIOx, &amp;GPIO_InitStruct);</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span>}</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span><span class="comment"></span> </div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="comment">/** </span></div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="comment"> * @brief Initialize DMA for SPI.</span></div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="comment"> * @param hspi - указатель на хендл SPI для настройки DMA.</span></div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><span class="comment"> * @param hdma_rx - указатель на хендл DMA для линии приема SPI.</span></div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="comment"> * @param DMAChannel - указатель на канал DMA/поток DMA в STM32F407.</span></div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="comment"> * @param DMA_CHANNEL_X - канал DMA.</span></div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="comment"> */</span></div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span><span class="keywordtype">void</span> SPI_DMA_Init(SPI_HandleTypeDef *hspi, DMA_HandleTypeDef *hdma_rx, DMA_Stream_TypeDef *DMAChannel, uint32_t DMA_CHANNEL_X)</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span>{ <span class="comment">// function takes spi and dma handlers and dmachannel for spi</span></div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="comment">// // for now only dma rx is supported, tx maybe later if needed</span></div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="comment">// // calc defines on boot_project_setup.h</span></div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> </div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="comment">// /* SPI3 DMA Init */</span></div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="comment">// /* SPI3_RX Init */</span></div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span><span class="comment">// </span></div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span><span class="comment">// hdma_rx-&gt;Instance = DMAChannel;</span></div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span><span class="comment">//#if defined(STM32F407xx) // dma channel choose for 407</span></div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span><span class="comment">// hdma_rx-&gt;Init.Channel = DMA_CHANNEL_X;</span></div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="comment">//#endif</span></div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="comment">// hdma_rx-&gt;Init.Direction = DMA_PERIPH_TO_MEMORY;</span></div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="comment">// hdma_rx-&gt;Init.PeriphInc = DMA_PINC_DISABLE;</span></div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span><span class="comment">// hdma_rx-&gt;Init.MemInc = DMA_MINC_ENABLE;</span></div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="comment">// hdma_rx-&gt;Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;</span></div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span><span class="comment">// hdma_rx-&gt;Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;</span></div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="comment">// hdma_rx-&gt;Init.Mode = DMA_CIRCULAR;</span></div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span><span class="comment">// hdma_rx-&gt;Init.Priority = DMA_PRIORITY_LOW;</span></div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span><span class="comment">// if (HAL_DMA_Init(hdma_rx) != HAL_OK)</span></div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span><span class="comment">// {</span></div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span><span class="comment">// MyLibs_Error_Handler();</span></div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span><span class="comment">// }</span></div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="comment">// __USER_LINKDMA(hspi,hdmarx,hdma_rx); </span></div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="comment">// </span></div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> </div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span><span class="comment">// // __USER_LINKDMA is need because __HAL_LINKDMA is written for global defined hdma_rx</span></div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span><span class="comment">// // so you get error because hal uses . insted of -&gt;</span></div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span>}</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span><span class="comment"></span> </div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span><span class="comment">/** </span></div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span><span class="comment"> * @brief Initialize SPI &amp; DMA clock and interrupt.</span></div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span><span class="comment"> * @param hspi - указатель на хендл SPI для инициализации.</span></div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span><span class="comment"> * @note Чтобы не генерировать функцию с иницилизацией неиспользуемых SPI,</span></div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span><span class="comment"> дефайнами в general_spi.h определяются используемые SPI.</span></div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span><span class="comment"> */</span></div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span><span class="keywordtype">void</span> SPI_MspInit(SPI_HandleTypeDef *hspi) <span class="comment">// analog for hal function</span></div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span>{ </div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="comment">// rcc, dma and interrupt init for SPIs</span></div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="comment">// GPIO init was moved to own functions SPI_GPIO_Init </span></div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">if</span>(0);</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span><span class="preprocessor">#ifdef USE_SPI1</span></div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(hspi-&gt;Instance==SPI1)</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> {</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> </div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span><span class="comment">// /* DMA2 clock enable */</span></div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="comment">// __HAL_RCC_DMA2_CLK_ENABLE();</span></div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span><span class="comment">// /* DMA interrupt init */</span></div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span><span class="comment">// HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 0, 0);</span></div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span><span class="comment">// HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);</span></div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="comment">/* SPI1 clock enable */</span></div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> __HAL_RCC_SPI1_CLK_ENABLE();</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> </div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="comment">/* SPI1 interrupt Init */</span></div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> HAL_NVIC_SetPriority(SPI1_IRQn, 0, 0);</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> HAL_NVIC_EnableIRQ(SPI1_IRQn);</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> }</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span><span class="preprocessor">#endif </span><span class="comment">// USE_SPI1</span></div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span><span class="preprocessor">#ifdef USE_SPI2</span></div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(hspi-&gt;Instance==SPI2)</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> {</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span><span class="comment">// /* DMA1 clock enable */</span></div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span><span class="comment">// __HAL_RCC_DMA1_CLK_ENABLE();</span></div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span><span class="comment">// /* DMA interrupt init */</span></div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span><span class="comment">// HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 0, 0);</span></div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span><span class="comment">// HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn);</span></div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> </div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="comment">/* SPI2 clock enable */</span></div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> __HAL_RCC_SPI2_CLK_ENABLE();</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> </div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="comment">/* SPI2 interrupt Init */</span></div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> HAL_NVIC_SetPriority(SPI2_IRQn, 0, 0);</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> HAL_NVIC_EnableIRQ(SPI2_IRQn);</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> }</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span><span class="preprocessor">#endif </span><span class="comment">// USE_SPI2</span></div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span><span class="preprocessor">#ifdef USE_SPI3</span></div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(hspi-&gt;Instance==SPI3)</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> { </div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span><span class="comment">// /* DMA1 clock enable */</span></div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span><span class="comment">// __HAL_RCC_DMA1_CLK_ENABLE();</span></div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span><span class="comment">// /* DMA interrupt init */</span></div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span><span class="comment">// HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 0, 0);</span></div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span><span class="comment">// HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);</span></div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> </div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="comment">/* SPI3 clock enable */</span></div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> __HAL_RCC_SPI3_CLK_ENABLE(); </div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="comment">/* SPI3 interrupt Init */</span></div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> HAL_NVIC_SetPriority(SPI3_IRQn, 0, 0);</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> HAL_NVIC_EnableIRQ(SPI3_IRQn);</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> }</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span><span class="preprocessor">#endif </span><span class="comment">// USE_SPI3</span></div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span>}</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span><span class="comment"></span> </div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span><span class="comment">/** </span></div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span><span class="comment"> * @brief Deinitialize SPI &amp; DMA clock and interrupt.</span></div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span><span class="comment"> * @param hspi - указатель на хендл SPI для деинициализации.</span></div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span><span class="comment"> * @note Чтобы не генерировать функцию с деиницилизацией неиспользуемых SPI,</span></div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span><span class="comment"> дефайнами определяются используемые SPI.</span></div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span><span class="comment"> */</span></div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span><span class="keywordtype">void</span> SPI_MspDeInit(SPI_HandleTypeDef *hspi) <span class="comment">// analog for hal function</span></div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span>{ </div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="comment">// rcc, dma and interrupt init for SPIs</span></div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="comment">// GPIO init was moved to own functions SPI_GPIO_Init </span></div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">if</span>(0);</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span><span class="preprocessor">#ifdef USE_SPI1</span></div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(hspi-&gt;Instance==SPI1)</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> {</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> </div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span><span class="comment">// /* DMA2 clock enable */</span></div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span><span class="comment">// __HAL_RCC_DMA2_CLK_ENABLE();</span></div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span><span class="comment">// /* DMA interrupt init */</span></div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span><span class="comment">// HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 0, 0);</span></div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span><span class="comment">// HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);</span></div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> </div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="comment">/* SPI1 clock reset */</span></div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> __HAL_RCC_SPI1_FORCE_RESET();</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> __HAL_RCC_SPI1_RELEASE_RESET();</div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> }</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span><span class="preprocessor">#endif </span><span class="comment">// USE_SPI1</span></div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span><span class="preprocessor">#ifdef USE_SPI2</span></div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(hspi-&gt;Instance==SPI2)</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> {</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span><span class="comment">// /* DMA1 clock enable */</span></div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span><span class="comment">// __HAL_RCC_DMA1_CLK_ENABLE();</span></div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span><span class="comment">// /* DMA interrupt init */</span></div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span><span class="comment">// HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 0, 0);</span></div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span><span class="comment">// HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn);</span></div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> </div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> <span class="comment">/* SPI2 clock reset */</span></div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> __HAL_RCC_SPI2_FORCE_RESET();</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> __HAL_RCC_SPI2_RELEASE_RESET();</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> }</div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span><span class="preprocessor">#endif </span><span class="comment">// USE_SPI2</span></div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span><span class="preprocessor">#ifdef USE_SPI3</span></div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(hspi-&gt;Instance==SPI3)</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> { </div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span><span class="comment">// /* DMA1 clock enable */</span></div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span><span class="comment">// __HAL_RCC_DMA1_CLK_ENABLE();</span></div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span><span class="comment">// /* DMA interrupt init */</span></div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span><span class="comment">// HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 0, 0);</span></div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span><span class="comment">// HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);</span></div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> </div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> <span class="comment">/* SPI3 clock reset */</span></div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> __HAL_RCC_SPI3_FORCE_RESET();</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> __HAL_RCC_SPI3_RELEASE_RESET();</div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> }</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span><span class="preprocessor">#endif </span><span class="comment">// USE_SPI3</span></div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span>}</div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span><span class="comment"></span> </div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span><span class="comment">/** </span></div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span><span class="comment"> * @brief Check that spi init structure have correct values.</span></div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span><span class="comment"> * @param sspi - указатель на структуру с настройками SPI.</span></div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span><span class="comment"> * @return HAL status.</span></div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span><span class="comment"> */</span></div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span>HAL_StatusTypeDef Check_SPI_Init_Struct(<a class="code hl_struct" href="struct_s_p_i___settings_type_def.html">SPI_SettingsTypeDef</a> *sspi)</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span>{</div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <span class="comment">// check is settings are valid</span></div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> <span class="keywordflow">if</span> (!IS_SPI_ALL_INSTANCE(sspi-&gt;hspi.Instance))</div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> </div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> <span class="comment">// check init settings</span></div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">if</span> (!IS_SPI_MODE(sspi-&gt;hspi.Init.Mode))</div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> <span class="keywordflow">return</span> HAL_ERROR; </div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">if</span> (!IS_SPI_DIRECTION(sspi-&gt;hspi.Init.Direction))</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">return</span> HAL_ERROR; </div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> <span class="keywordflow">if</span> (!IS_SPI_DATASIZE(sspi-&gt;hspi.Init.DataSize))</div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">return</span> HAL_ERROR; </div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="keywordflow">if</span> (!IS_SPI_BAUDRATE_PRESCALER(sspi-&gt;hspi.Init.BaudRatePrescaler))</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">return</span> HAL_ERROR; </div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <span class="keywordflow">if</span> (!IS_SPI_CPOL(sspi-&gt;hspi.Init.CLKPolarity))</div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">return</span> HAL_ERROR; </div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> <span class="keywordflow">if</span> (!IS_SPI_CPHA(sspi-&gt;hspi.Init.CLKPhase))</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> <span class="keywordflow">return</span> HAL_ERROR; </div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> <span class="keywordflow">if</span> (!IS_SPI_NSS(sspi-&gt;hspi.Init.NSS))</div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> <span class="keywordflow">return</span> HAL_ERROR; </div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">if</span> (!IS_SPI_FIRST_BIT(sspi-&gt;hspi.Init.FirstBit))</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">return</span> HAL_ERROR; </div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> <span class="keywordflow">if</span> (!IS_SPI_CRC_CALCULATION(sspi-&gt;hspi.Init.CRCCalculation))</div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">return</span> HAL_ERROR; </div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">if</span> (!IS_SPI_CRC_POLYNOMIAL(sspi-&gt;hspi.Init.NSS) &amp;&amp; </div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> (sspi-&gt;hspi.Init.CRCCalculation != SPI_CRCCALCULATION_DISABLE))</div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">return</span> HAL_ERROR; </div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> <span class="keywordflow">if</span> (!IS_SPI_TIMODE(sspi-&gt;hspi.Init.TIMode))</div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> </div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> <span class="comment">// check gpio</span></div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">if</span> (!IS_GPIO_ALL_INSTANCE(sspi-&gt;CLK_GPIOx) || !IS_GPIO_ALL_INSTANCE(sspi-&gt;MISO_GPIOx) || !IS_GPIO_ALL_INSTANCE(sspi-&gt;MOSI_GPIOx))</div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> <span class="keywordflow">return</span> HAL_ERROR; </div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> <span class="keywordflow">if</span> (!IS_GPIO_PIN(sspi-&gt;CLK_PIN) &amp;&amp; !IS_GPIO_PIN(sspi-&gt;MISO_PIN) &amp;&amp; !IS_GPIO_PIN(sspi-&gt;MOSI_PIN)) <span class="comment">// if both pins arent set up</span></div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> </div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> <span class="keywordflow">return</span> HAL_OK;</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span>}</div>
<div class="ttc" id="ageneral__gpio_8h_html"><div class="ttname"><a href="general__gpio_8h.html">general_gpio.h</a></div><div class="ttdoc">Заголовочный файл для модуля инициализации портов и работы с ними.</div></div>
<div class="ttc" id="agroup___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s_html_gae110df81afd885a390bbeb152d7b709f"><div class="ttname"><a href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gae110df81afd885a390bbeb152d7b709f">MyLibs_Error_Handler</a></div><div class="ttdeci">#define MyLibs_Error_Handler(params)</div><div class="ttdoc">Error_Handler который будет вызыватся в библиотеке</div><div class="ttdef"><b>Definition</b> <a href="mylibs__defs_8h_source.html#l00031">mylibs_defs.h:31</a></div></div>
<div class="ttc" id="agroup___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l_html_ga962f010f783b81fcdd27eb6b53db28e6"><div class="ttname"><a href="group___m_y_l_i_b_s___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6">GPIO_Clock_Enable</a></div><div class="ttdeci">HAL_StatusTypeDef GPIO_Clock_Enable(GPIO_TypeDef *GPIOx)</div><div class="ttdoc">Включить тактирование порта GPIO.</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8c_source.html#l00022">general_gpio.c:22</a></div></div>
<div class="ttc" id="astruct_s_p_i___settings_type_def_html"><div class="ttname"><a href="struct_s_p_i___settings_type_def.html">SPI_SettingsTypeDef</a></div><div class="ttdef"><b>Definition</b> <a href="____general__spi_8h_source.html#l00033">__general_spi.h:34</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_9e11e9a41112194af3eee6cc728f9515.html">MyLibsGeneral</a></li><li class="navelem"><a class="el" href="dir_9c80311a018e1f8cfb6659b73d634be4.html">Src</a></li><li class="navelem"><b>__general_spi.c</b></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0 </li>
</ul>
</div>
</body>
</html>