init commit

сделаны базовые хедеры:
- mylibs_config
- mylibs_defs
- mylibs_include
- trace
- trackers
- bit_access

также сделан модуль general_gpio.c/.h

Но надо проверить переструктуризированные модули

Остальные модули  __general_XXX в целом готовы и как-то работают (на МЗКТЭ) но не структуризированы
This commit is contained in:
Razvalyaev 2025-10-18 18:27:37 +03:00
commit f61aa1ff0f
304 changed files with 57234 additions and 0 deletions

2991
Doc/Doxyfile Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,306 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Src/__general_flash.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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('____general__flash_8c_source.html','',''); });
</script>
<div id="container">
<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_flash.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="preprocessor">#include &quot;general_flash.h&quot;</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span>FLASH_EraseInitTypeDef EraseInitStruct;</div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="keyword">extern</span> HAL_StatusTypeDef res_hal;</div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="keywordtype">unsigned</span> CRC_Update;</div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">//uint32_t PAGE_OFFSET = ((uint32_t)((4-1) * 0x0400));</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span>uint32_t PAGE_NUMB = 127;</div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span> </div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">/* Записать в память данные, произвольного размера */</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span>HAL_StatusTypeDef FLASH_Write_Data(uint32_t* Address, uint8_t* Data, <span class="keywordtype">int</span> Data_size)</div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span>{</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> HAL_StatusTypeDef res_hal;</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> <span class="keywordtype">int</span> data_cnt = 0;</div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> uint32_t adr;</div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> uint32_t word_data;</div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> res_hal = HAL_FLASH_Unlock();</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> <span class="keywordflow">if</span> (res_hal != HAL_OK) <span class="keywordflow">return</span> res_hal;</div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <span class="keywordflow">for</span> (adr = *Address; adr &lt; *Address + Data_size; adr = adr + 4)</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> {</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> word_data = (</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> Data[data_cnt] |</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> Data[data_cnt + 1] &lt;&lt; 8 |</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> Data[data_cnt + 2] &lt;&lt; 16 |</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> Data[data_cnt + 3] &lt;&lt; 24);</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> res_hal = HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, adr, word_data);</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="keywordflow">if</span> (res_hal != HAL_OK) <span class="keywordflow">return</span> res_hal;</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> data_cnt += 4;</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> </div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> *Address += Data_size;</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> res_hal = HAL_FLASH_Lock();</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> </div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keywordflow">return</span> res_hal;</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> </div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </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>HAL_StatusTypeDef FLASH_Enable_DualBankMode(<span class="keywordtype">void</span>)</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span>{</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> HAL_StatusTypeDef res_hal;</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> FLASH_AdvOBProgramInitTypeDef OB_DualBank;</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </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> res_hal = HAL_FLASH_Unlock();</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">if</span> (res_hal != HAL_OK) </div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">return</span> res_hal;</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> res_hal = HAL_FLASH_OB_Unlock();</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">if</span> (res_hal != HAL_OK) </div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">return</span> res_hal;</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> FLASH-&gt;OPTCR |= FLASH_OPTCR_DB1M;</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> res_hal = HAL_FLASH_OB_Launch();</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">if</span> (res_hal != HAL_OK) </div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">return</span> res_hal;</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> res_hal = HAL_FLASH_OB_Lock();</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">if</span> (res_hal != HAL_OK) </div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">return</span> res_hal;</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> res_hal = HAL_FLASH_Lock();</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">if</span> (res_hal != HAL_OK) </div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">return</span> res_hal;</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> </div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">return</span> res_hal;</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span>}</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> </div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="comment">/* Убрать защиту */</span></div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span>HAL_StatusTypeDef FLASH_WriteProtection(uint32_t BankN, uint32_t WriteProtection)</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span>{</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> HAL_StatusTypeDef res_hal;</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> FLASH_OBProgramInitTypeDef OBInit;</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> </div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="comment">// Очистка всех возможных ошибок</span></div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> FLASH-&gt;SR |= FLASH_FLAG_WRPERR <span class="comment">// Write Protection Error</span></div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> | FLASH_FLAG_PGSERR <span class="comment">// Programming Sequence Error</span></div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> | FLASH_FLAG_PGAERR <span class="comment">// Programming Alignment Error</span></div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> | FLASH_FLAG_OPERR; <span class="comment">// Operation Error</span></div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> res_hal = HAL_FLASH_Unlock();</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">if</span> (res_hal != HAL_OK) </div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">return</span> res_hal;</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> </div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> res_hal = HAL_FLASH_OB_Unlock(); <span class="comment">// Разблокировка Option Bytes</span></div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">if</span> (res_hal != HAL_OK) </div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">return</span> res_hal;</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="comment">// Считываем текущую конфигурацию Option Bytes</span></div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> HAL_FLASHEx_OBGetConfig(&amp;OBInit);</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</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> OBInit.OptionType = OPTIONBYTE_WRP;</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> OBInit.WRPState = WriteProtection; <span class="comment">// Снять защиту</span></div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> OBInit.WRPSector = OB_WRP_SECTOR_12; <span class="comment">// Снять защиту</span></div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> OBInit.Banks = BankN; <span class="comment">// Указываем второй банк</span></div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> res_hal = HAL_FLASHEx_OBProgram(&amp;OBInit);</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">if</span> (res_hal != HAL_OK) </div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">return</span> res_hal;</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="comment">// Записываем изменения и перезагружаем чип</span></div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> res_hal = HAL_FLASH_OB_Launch();</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">if</span> (res_hal != HAL_OK) </div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">return</span> res_hal;</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> </div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="comment">// Считываем текущую конфигурацию Option Bytes</span></div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> HAL_FLASHEx_OBGetConfig(&amp;OBInit);</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">// Блокировка Option Bytes</span></div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> res_hal = HAL_FLASH_OB_Lock(); </div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">if</span> (res_hal != HAL_OK) </div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">return</span> res_hal;</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> </div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> res_hal = HAL_FLASH_Lock();</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">if</span> (res_hal != HAL_OK) </div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">return</span> res_hal;</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> </div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">return</span> res_hal;</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span>}</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span><span class="comment">//-----------------ELEMENTARY FUNCTIONS---------------------</span></div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span><span class="comment">/* functions for reading bytes/halswords/words */</span></div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span>uint8_t FLASH_Read_Byte(uint32_t add)</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="keywordflow">return</span> (*(__IO uint8_t*)(add));</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span>}</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span>uint16_t FLASH_Read_HalfWord(uint32_t add)</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span>{</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">return</span> (*(__IO uint16_t*)(add));</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>uint32_t FLASH_Read_Word(uint32_t add)</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span>{</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">return</span> (*(__IO uint32_t*)(add));</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span>}</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span><span class="comment">/* functions for writing bytes/halswords/words */</span></div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span>HAL_StatusTypeDef FLASH_Write_Byte(uint32_t Address, uint8_t Data)</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> HAL_StatusTypeDef res_hal;</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> </div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> res_hal = HAL_FLASH_Unlock();</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">if</span> (res_hal != HAL_OK) <span class="keywordflow">return</span> res_hal;</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> res_hal = HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, Address, (uint8_t)(Data));</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> </div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">if</span> (res_hal != HAL_OK) <span class="keywordflow">return</span> res_hal;</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> </div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> res_hal = HAL_FLASH_Lock(); </div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">return</span> res_hal;</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span>}</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span>HAL_StatusTypeDef FLASH_Write_HalfWord(uint32_t Address, uint16_t Data)</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span>{</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> HAL_StatusTypeDef res_hal;</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> res_hal = HAL_FLASH_Unlock();</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">if</span> (res_hal != HAL_OK) <span class="keywordflow">return</span> res_hal;</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> </div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> res_hal = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, Address, (uint16_t)(Data));</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> </div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">if</span> (res_hal != HAL_OK) <span class="keywordflow">return</span> res_hal;</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> </div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> res_hal = HAL_FLASH_Lock(); </div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">return</span> res_hal;</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>HAL_StatusTypeDef FLASH_Write_Word(uint32_t Address, uint32_t Data)</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span>{</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> HAL_StatusTypeDef res_hal;</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> res_hal = HAL_FLASH_Unlock();</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">if</span> (res_hal != HAL_OK) <span class="keywordflow">return</span> res_hal;</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> </div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> res_hal = HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, (uint32_t)(Data)); </div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">if</span> (res_hal != HAL_OK) <span class="keywordflow">return</span> res_hal;</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> </div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> res_hal = HAL_FLASH_Lock(); </div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">return</span> res_hal;</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span>}</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span><span class="comment">//----------------------------------------------------------</span></div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> </div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_9e11e9a41112194af3eee6cc728f9515.html">MyLibsGeneral</a></li><li class="navelem"><a href="dir_9c80311a018e1f8cfb6659b73d634be4.html">Src</a></li><li class="navelem"><b>__general_flash.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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,177 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Inc/__general_flash.h 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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('____general__flash_8h_source.html','',''); });
</script>
<div id="container">
<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_flash.h</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">/*********************************UART**************************************</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">UART.</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">***************************************************************************/</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#ifndef __FLASH_GENERAL_H_</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#define __FLASH_GENERAL_H_</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">/////////////////////////---USER SETTINGS---/////////////////////////</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> </div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"></span> </div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment">/////////////////////////---USER SETTINGS---/////////////////////////</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#include &quot;<a class="code" href="mylibs__defs_8h.html">mylibs_defs.h</a>&quot;</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</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="comment">////////////////////////////---DEFINES---////////////////////////////</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <span class="comment"></span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment">////////////////////////////---DEFINES---////////////////////////////</span></div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</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">///////////////////////---STRUCTURES &amp; ENUMS---//////////////////////</span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="comment"></span> </div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment">///////////////////////---STRUCTURES &amp; ENUMS---//////////////////////</span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</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><span class="comment">/////////////////////////////////////////////////////////////////////</span></div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment">///////////////////////////---FUNCTIONS---///////////////////////////</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>HAL_StatusTypeDef FLASH_Enable_DualBankMode(<span class="keywordtype">void</span>);</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span>HAL_StatusTypeDef FLASH_WriteProtection(uint32_t BankN, uint32_t WriteProtection);</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="comment">/* functions for reading bytes/halswords/words */</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span>uint8_t FLASH_Read_Byte(uint32_t add);</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span>uint16_t FLASH_Read_HalfWord(uint32_t add);</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span>uint32_t FLASH_Read_Word(uint32_t add);</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="comment">/* functions for writing bytes/halswords/words */</span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span>HAL_StatusTypeDef FLASH_Write_Byte(uint32_t Address, uint8_t Data);</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span>HAL_StatusTypeDef FLASH_Write_HalfWord(uint32_t Address, uint16_t Data);</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span>HAL_StatusTypeDef FLASH_Write_Word(uint32_t Address, uint32_t Data);<span class="comment"></span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="comment">///////////////////////////---FUNCTIONS---///////////////////////////</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="preprocessor">#ifndef LED_PWM_TICKS</span></div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="preprocessor">#define LED_PWM_TICKS 15</span></div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="preprocessor">#ifndef LED_ON</span></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="preprocessor">#define LED_ON 1</span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="preprocessor">#ifndef LED_OFF</span></div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="preprocessor">#define LED_OFF 0</span></div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="preprocessor">#ifndef SW_ON</span></div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="preprocessor">#define SW_ON 1</span></div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="preprocessor">#ifndef SW_OFF</span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="preprocessor">#define SW_OFF 0</span></div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="preprocessor">#endif </span><span class="comment">// __FLASH_GENERAL_H_</span></div>
<div class="ttc" id="amylibs__defs_8h_html"><div class="ttname"><a href="mylibs__defs_8h.html">mylibs_defs.h</a></div><div class="ttdoc">Заголочный файл для дефайнов библиотеки MyLibsGeneral.</div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_9e11e9a41112194af3eee6cc728f9515.html">MyLibsGeneral</a></li><li class="navelem"><a href="dir_eb423fea8a9c4b9b32b922020ec391e1.html">Inc</a></li><li class="navelem"><b>__general_flash.h</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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,410 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: E:/.WORK/STM32/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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('____general__spi_8c_source.html','',''); });
</script>
<div id="container">
<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"> * //-------------------Функции-------------------//</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * @verbatim</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * Functions: users</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"> * @endverbatim</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___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___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___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___g_p_i_o___g_e_n_e_r_a_l_html_ga962f010f783b81fcdd27eb6b53db28e6"><div class="ttname"><a href="group___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#l00021">general_gpio.c:21</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 -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_9e11e9a41112194af3eee6cc728f9515.html">MyLibsGeneral</a></li><li class="navelem"><a 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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,218 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Inc/__general_spi.h 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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('____general__spi_8h_source.html','',''); });
</script>
<div id="container">
<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.h</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.h</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="preprocessor">#ifndef __SPI_GENERAL_H_</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#define __SPI_GENERAL_H_</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">//////////////////////////////////////////////////////////////////////</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment">/////////////////////////---USER SETTINGS---/////////////////////////</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#define HAL_SPI_MODULE_ENABLED </span><span class="comment">// need to uncomment these defines in stm32f4xx_hal_conf.h</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> <span class="comment">// also need to add hal_spi.c (source code)</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#define USE_SPI1</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#define USE_SPI2</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#define USE_SPI3</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="comment">/////////////////////////---USER SETTINGS---/////////////////////////</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="mylibs__defs_8h.html">mylibs_defs.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> </div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</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">////////////////////////////---DEFINES---////////////////////////////</span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="comment"></span></div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment">////////////////////////////---DEFINES---////////////////////////////</span></div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment"></span> </div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment">/////////////////////////////////////////////////////////////////////</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment">///////////////////////---STRUCTURES &amp; ENUMS---//////////////////////</span></div>
<div class="foldopen" id="foldopen00033" data-start="{" data-end="};">
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="struct_s_p_i___settings_type_def.html"> 33</a></span><span class="keyword">typedef</span> <span class="keyword">struct </span><span class="comment">// struct with settings for custom function</span></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span>{</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> SPI_HandleTypeDef hspi;</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> GPIO_TypeDef *CLK_GPIOx;</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> uint32_t CLK_PIN;</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> uint32_t CLK_GPIO_AlternageFunc;</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> GPIO_TypeDef *MISO_GPIOx;</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> uint32_t MISO_PIN;</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> uint32_t MISO_GPIO_AlternageFunc;</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> GPIO_TypeDef *MOSI_GPIOx;</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> uint32_t MOSI_PIN; </div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> uint32_t MOSI_GPIO_AlternageFunc;</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span>}<a class="code hl_struct" href="struct_s_p_i___settings_type_def.html">SPI_SettingsTypeDef</a>;<span class="comment"></span></div>
</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment">///////////////////////---STRUCTURES &amp; ENUMS---//////////////////////</span></div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="comment"></span> </div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="comment">/////////////////////////////////////////////////////////////////////</span></div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="comment">///////////////////////////---FUNCTIONS---///////////////////////////</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 SPI with SPI_SettingsTypeDef structure.</span></div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="comment"> * @param sspi - указатель на структуру с настройками SPI.</span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="comment"> * @return HAL status.</span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="comment"> * @note Данная структура содержит хендл ЮАРТ и настройки перефирии (GPIO)</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>HAL_StatusTypeDef SPI_Base_Init(<a class="code hl_struct" href="struct_s_p_i___settings_type_def.html">SPI_SettingsTypeDef</a> *sspi);<span class="comment"></span></div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment">/** </span></div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="comment"> * @brief Initialize GPIO for SPI.</span></div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="comment"> * @param GPIOx - порт для настройки.</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="comment"> * @param GPIO_PIN_RX - пин для настройки на прием.</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="comment"> * @param GPIO_PIN_TX - пин для настройки на передачу.</span></div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="comment"> */</span></div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</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);<span class="comment"></span></div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="comment">/** </span></div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="comment"> * @brief Initialize DMA for SPI.</span></div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="comment"> * @param hspi - указатель на хендл SPI для настройки DMA.</span></div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="comment"> * @param hdma_rx - указатель на хендл DMA для линии приема SPI.</span></div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="comment"> * @param DMAChannel - указатель на канал DMA/поток DMA в STM32F407.</span></div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="comment"> * @param DMA_CHANNEL_X - канал DMA.</span></div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="comment"> */</span></div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</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);<span class="comment"></span></div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="comment">/** </span></div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="comment"> * @brief Initialize SPI &amp; DMA clock and interrupt.</span></div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="comment"> * @param hspi - указатель на хендл SPI для инициализации.</span></div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="comment"> * @note Чтобы не генерировать функцию с иницилизацией неиспользуемых SPI,</span></div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="comment"> дефайнами определяются используемые SPI.</span></div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="comment"> */</span></div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="keywordtype">void</span> SPI_MspInit(SPI_HandleTypeDef *hspi);<span class="comment"></span></div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="comment">/** </span></div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="comment"> * @brief Deinitialize SPI &amp; DMA clock and interrupt.</span></div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="comment"> * @param hspi - указатель на хендл SPI для деинициализации.</span></div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="comment"> * @note Чтобы не генерировать функцию с деиницилизацией неиспользуемых SPI,</span></div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="comment"> дефайнами в rs_message.h определяются используемые SPI.</span></div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="comment"> */</span></div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span><span class="keywordtype">void</span> SPI_MspDeInit(SPI_HandleTypeDef *hspi);</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">/** </span></div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="comment"> * @brief Check that spi init structure have correct values.</span></div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><span class="comment"> * @param sspi - указатель на структуру с настройками SPI.</span></div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="comment"> * @return HAL status.</span></div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="comment"> */</span></div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</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);<span class="comment"></span></div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span><span class="comment">///////////////////////////---FUNCTIONS---///////////////////////////</span></div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> </div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="preprocessor">#endif </span><span class="comment">// __SPI_GENERAL_H_</span></div>
<div class="ttc" id="amylibs__defs_8h_html"><div class="ttname"><a href="mylibs__defs_8h.html">mylibs_defs.h</a></div><div class="ttdoc">Заголочный файл для дефайнов библиотеки MyLibsGeneral.</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="#l00033">__general_spi.h:34</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_9e11e9a41112194af3eee6cc728f9515.html">MyLibsGeneral</a></li><li class="navelem"><a href="dir_eb423fea8a9c4b9b32b922020ec391e1.html">Inc</a></li><li class="navelem"><b>__general_spi.h</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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,777 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Src/__general_tim.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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('____general__tim_8c_source.html','',''); });
</script>
<div id="container">
<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_tim.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_tim.c</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * @brief Модуль для инициализации таймеров.</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"> @verbatim</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"> Functions: user init</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> - TIM_Base_Init Инициализация TIM</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> - TIM_Encoder_Init Инициализация режима энкодера</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> - TIM_Output_PWM_Init Инициализация PWM с выводом на GPIO</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> - TIM_OC_Comparator_Init Инициализация TIM как компаратора</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> </span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> Functions: user</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> - TIM_Delay Задержка с помощью TIM</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"> Functions: tim initialize</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> - TIM_Base_MspInit Аналог HAL_MspInit для таймера</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment"> - TIM_Base_MspDeInit Аналог HAL_MspDeInit для таймера</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment"> @endverbatim</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="preprocessor">#include &quot;general_tim.h&quot;</span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</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="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="comment">//-------------------------------------------------------------------</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment">//-------------------------TIM INIT FUNCTIONS------------------------ </span><span class="comment"></span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment">/** </span></div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment"> * @brief Initialize TIM with TIM_SettingsTypeDef structure.</span></div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment"> * @param stim - указатель на структуру с настройками таймера.</span></div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment"> * @return HAL status.</span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment"> * @note Данная структура содержит хендл таймера и структуры для его настройки.</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment"> */</span></div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span>HAL_StatusTypeDef TIM_Base_Init(<a class="code hl_struct" href="struct_t_i_m___settings_type_def.html">TIM_SettingsTypeDef</a> *stim)</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span>{ <span class="comment">// function takes structure for init</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="comment">// check that htim is defined</span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keywordflow">if</span> (stim-&gt;htim.Instance == NULL)</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </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> </div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keywordflow">if</span>(stim-&gt;sTickBaseUS) <span class="comment">// if tickbase isnt disable</span></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> <span class="keywordflow">if</span>(stim-&gt;sTimAHBFreqMHz == NULL)</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keywordflow">return</span> HAL_ERROR; </div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> stim-&gt;htim.Init.Prescaler = (stim-&gt;sTimAHBFreqMHz*stim-&gt;sTickBaseUS) - 1;</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="keywordflow">if</span> ((stim-&gt;sTimFreqHz != NULL))</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> stim-&gt;htim.Init.Period = ((1000000/stim-&gt;sTickBaseUS) / stim-&gt;sTimFreqHz) - 1;</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (stim-&gt;htim.Init.Period == NULL)</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> stim-&gt;htim.Init.Period = 0xFFFF;</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">if</span>(stim-&gt;sTickBasePrescaler)</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> stim-&gt;htim.Init.Prescaler = (stim-&gt;htim.Init.Prescaler + 1)/stim-&gt;sTickBasePrescaler - 1;</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> stim-&gt;htim.Init.Period = (stim-&gt;htim.Init.Period + 1)*stim-&gt;sTickBasePrescaler - 1;</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> }</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> stim-&gt;sTickBasePrescaler = 1;</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> }</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="comment">// fix overflow of presc and period if need</span></div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; (stim-&gt;htim.Init.Prescaler &gt; 0xFFFF) || (stim-&gt;htim.Init.Period &gt; 0xFFFF); i++)</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> { </div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">if</span> (i&gt;10) <span class="comment">// if it isnt fixed after 10 itteration - return HAL_ERRPOR</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> {</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> }</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="comment">// if timbase is too big (prescaller too big for choosen base from MHZ)</span></div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">if</span>(stim-&gt;htim.Init.Prescaler &gt; 0xFFFF)</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> {</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="comment">// переносим часть пресскалера в период</span></div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> stim-&gt;htim.Init.Prescaler = ((stim-&gt;htim.Init.Prescaler + 1)/2) - 1;</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> stim-&gt;htim.Init.Period = ((stim-&gt;htim.Init.Period + 1)*2) - 1;</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="comment">// обновляем TickBase, если есть куда обновлять</span></div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">if</span>(stim-&gt;sTickBaseUS &gt; 1)</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> stim-&gt;sTickBaseUS /= 2;</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="comment">// обновляем sTickBasePrescaler, если sTickBaseUS - уже в минимуме</span></div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (stim-&gt;sTickBaseUS == 1)</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> stim-&gt;sTickBasePrescaler *= 2;</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">else</span> <span class="comment">// if TickBase = 0 - return error</span></div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> }</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="comment">// if freq is too low (period too big for choosen base)</span></div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">if</span>(stim-&gt;htim.Init.Period &gt; 0xFFFF)</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> { </div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="comment">// переносим часть периода в прескалер</span></div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> stim-&gt;htim.Init.Period = ((stim-&gt;htim.Init.Period + 1)/2) - 1;</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> stim-&gt;htim.Init.Prescaler = ((stim-&gt;htim.Init.Prescaler + 1)*2) - 1;</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="comment">// обновляем TickBase</span></div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> stim-&gt;sTickBaseUS *= 2;</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> }</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> }</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> </div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="comment">//-------------TIM BASE INIT----------------</span></div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="comment">// tim base init </span></div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> TIM_Base_MspInit(&amp;stim-&gt;htim, stim-&gt;sTimMode);</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">if</span> (HAL_TIM_Base_Init(&amp;stim-&gt;htim) != HAL_OK)</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> {</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</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="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">return</span> HAL_ERROR;</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> </div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="comment">//-------------CLOCK SRC INIT---------------</span></div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="comment">// fill sClockSourceConfig if its NULL</span></div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">if</span> (stim-&gt;sClockSourceConfig.ClockSource == NULL)</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> stim-&gt;sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; </div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="comment">// clock source init </span></div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">if</span> (HAL_TIM_ConfigClockSource(&amp;stim-&gt;htim, &amp;stim-&gt;sClockSourceConfig) != HAL_OK)</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> {</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</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="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> }</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> </div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="comment">//--------------SLAVE INIT------------------ </span></div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="comment">// if slave mode enables - config it</span></div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">if</span> (stim-&gt;sSlaveConfig.SlaveMode)</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> {</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="comment">// slave mode init </span></div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">if</span> (HAL_TIM_SlaveConfigSynchro(&amp;stim-&gt;htim, &amp;stim-&gt;sSlaveConfig) != HAL_OK)</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> <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="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">return</span> HAL_ERROR;</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> }</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="comment">//--------------MASTER INIT----------------- </span></div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="comment">// master mode init </span></div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">if</span> (HAL_TIMEx_MasterConfigSynchronization(&amp;stim-&gt;htim, &amp;stim-&gt;sMasterConfig) != HAL_OK)</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> {</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</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="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> } </div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> </div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="comment">//--------------BDTR INIT----------------- </span></div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">if</span> (HAL_TIMEx_ConfigBreakDeadTime(&amp;stim-&gt;htim, &amp;stim-&gt;sBreakDeadTimeConfig) != HAL_OK)</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> <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="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> }</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> </div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="comment">//----------------IT CLEAR------------------- </span></div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> __HAL_TIM_CLEAR_IT(&amp;stim-&gt;htim, TIM_IT_UPDATE);</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> </div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="comment">// обновляем TickBase</span></div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span><span class="preprocessor"> #ifdef UPDATE_TIM_PARAMS_AFTER_INITIALIZATION</span></div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> stim-&gt;sTickBaseUS = (stim-&gt;htim.Instance-&gt;PSC+1)*stim-&gt;sTickBasePrescaler/(stim-&gt;sTimAHBFreqMHz);</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">if</span>(stim-&gt;sTickBaseUS == 0) <span class="comment">// if prescaler is too high</span></div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> { <span class="comment">// recalc what is prescaler irl</span></div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> stim-&gt;sTickBaseUS = 1;</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> stim-&gt;sTickBasePrescaler = stim-&gt;sTimAHBFreqMHz/(stim-&gt;htim.Instance-&gt;PSC+1);</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="preprocessor"> #endif</span></div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> stim-&gt;htim.Instance-&gt;CNT = 0;</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">return</span> HAL_OK;</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> </div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> </div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span><span class="comment"></span> </div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span><span class="comment">/** </span></div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span><span class="comment"> * @brief Initialize TIM Encoder functional.</span></div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span><span class="comment"> * @param htim - указатель на хендл таймера.</span></div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span><span class="comment"> * @param sConfigOC - указатель на настрйоки канала таймера.</span></div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span><span class="comment"> * @param GPIOx - порт для приема енкодера.</span></div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span><span class="comment"> * @param GPIO_PIN1 - первый пин для енкодера.</span></div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span><span class="comment"> * @param GPIO_PIN2 - второй пин для енкодера.</span></div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span><span class="comment"> * @param GPIO_PIN_SW - пин для кнопки енкодера.</span></div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span><span class="comment"> * @return HAL status.</span></div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span><span class="comment"> */</span></div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span>HAL_StatusTypeDef TIM_Encoder_Init(<a class="code hl_struct" href="struct_t_i_m___encoder_type_def.html">TIM_EncoderTypeDef</a> *henc, TIM_HandleTypeDef *htim)</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span>{</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> GPIO_InitTypeDef GPIO_InitStruct = {0};</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> HAL_StatusTypeDef RES = HAL_ERROR;</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> henc-&gt;htim = htim;</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> </div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="comment">// setup channel for pwm</span></div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> RES = HAL_TIM_Encoder_Init(henc-&gt;htim, &amp;henc-&gt;sConfig);</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">if</span> (RES != HAL_OK)</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> {</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</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="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">return</span> RES;</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> }</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="comment">// choose port for enable clock</span></div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> RES = <a class="code hl_function" href="group___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6">GPIO_Clock_Enable</a>(henc-&gt;GPIOx);</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">if</span>(RES != HAL_OK)</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> {</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</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="l00188" name="l00188"></a><span class="lineno"> 188</span> <span class="keywordflow">return</span> RES;</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> </div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> GPIO_InitStruct.Pin = henc-&gt;GPIO_PIN_TI1|henc-&gt;GPIO_PIN_TI2;</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> GPIO_InitStruct.Pull = GPIO_PULLUP;</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> GPIO_InitStruct.Alternate = <a class="code hl_define" href="group___g_p_i_o___g_e_n_e_r_a_l.html#ga34242874b455a72aa6e25841678ed105">TIM_Alternate_Mapping</a>(henc-&gt;htim-&gt;Instance);</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">if</span>(GPIO_InitStruct.Alternate)</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> HAL_GPIO_Init(henc-&gt;GPIOx, &amp;GPIO_InitStruct);</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> </div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">if</span>(henc-&gt;GPIO_PIN_SW)</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">/*Configure switch pin */</span></div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> GPIO_InitStruct.Pin = henc-&gt;GPIO_PIN_SW;</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> GPIO_InitStruct.Mode = GPIO_MODE_INPUT;</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> GPIO_InitStruct.Pull = GPIO_PULLUP;</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> HAL_GPIO_Init(GPIOA, &amp;GPIO_InitStruct);</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="keywordflow">return</span> HAL_OK;</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span>}</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="comment"></span></div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span><span class="comment">/** </span></div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span><span class="comment"> * @brief Initialize PWM Channel and GPIO for output.</span></div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span><span class="comment"> * @param htim - указатель на хендл таймера.</span></div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span><span class="comment"> * @param sConfigOC - указатель на настрйоки канала таймера.</span></div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span><span class="comment"> * @param TIM_CHANNEL - канал таймера для настройки.</span></div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span><span class="comment"> * @param GPIOx - порт для вывода ШИМ.</span></div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span><span class="comment"> * @param GPIO_PIN - пин для вывода ШИМ.</span></div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span><span class="comment"> * @return HAL status.</span></div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span><span class="comment"> */</span></div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span>HAL_StatusTypeDef TIM_Output_PWM_Init(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfigOC, uint32_t TIM_CHANNEL, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN)</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> GPIO_InitTypeDef GPIO_InitStruct = {0};</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> HAL_StatusTypeDef RES = HAL_ERROR;</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> </div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="comment">// setup channel for pwm</span></div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> RES = HAL_TIM_PWM_ConfigChannel(htim, sConfigOC, TIM_CHANNEL);</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">if</span> (RES != HAL_OK)</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> {</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</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="l00230" name="l00230"></a><span class="lineno"> 230</span> <span class="keywordflow">return</span> RES;</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="comment">// choose port for enable clock</span></div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> RES = <a class="code hl_function" href="group___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6">GPIO_Clock_Enable</a>(GPIOx);</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">if</span>(RES != HAL_OK)</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> <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="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="keywordflow">return</span> RES;</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> }</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> </div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> GPIO_InitStruct.Pin = GPIO_PIN;</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">if</span>(sConfigOC-&gt;OCPolarity == TIM_OCNPOLARITY_HIGH)</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> GPIO_InitStruct.Pull = GPIO_PULLDOWN;</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> GPIO_InitStruct.Pull = GPIO_PULLUP;</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; </div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> GPIO_InitStruct.Alternate = <a class="code hl_define" href="group___g_p_i_o___g_e_n_e_r_a_l.html#ga34242874b455a72aa6e25841678ed105">TIM_Alternate_Mapping</a>(htim-&gt;Instance);</div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">if</span>(GPIO_InitStruct.Alternate)</div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> HAL_GPIO_Init(GPIOx, &amp;GPIO_InitStruct);</div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> </div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> <span class="keywordflow">return</span> HAL_OK;</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</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><span class="comment">/** </span></div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span><span class="comment"> * @brief Initialize OC Comparator.</span></div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span><span class="comment"> * @param htim - указатель на хендл таймера.</span></div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span><span class="comment"> * @param TIM_CHANNEL - канал таймера для настройки.</span></div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span><span class="comment"> * @return HAL status.</span></div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span><span class="comment"> */</span></div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span>HAL_StatusTypeDef TIM_OC_Comparator_Init(TIM_HandleTypeDef *htim, uint32_t TIM_CHANNEL)</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span>{ </div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> TIM_OC_InitTypeDef sConfigOC = {0};</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> HAL_StatusTypeDef RES = HAL_ERROR;</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> </div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> sConfigOC.OCMode = TIM_OCMODE_ACTIVE;</div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> sConfigOC.Pulse = 0;</div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> </div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> RES = HAL_TIM_OC_ConfigChannel(htim, &amp;sConfigOC, TIM_CHANNEL);</div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">if</span> (RES != HAL_OK)</div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> {</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</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="l00273" name="l00273"></a><span class="lineno"> 273</span> <span class="keywordflow">return</span> RES;</div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> }</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">return</span> RES;</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span>}</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> </div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> </div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> </div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span><span class="comment">//-------------------------------------------------------------------</span></div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span><span class="comment">//-------------------------TIM USER FUNCTIONS------------------------ </span><span class="comment"></span></div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span><span class="comment">/** </span></div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span><span class="comment"> * @brief Delay via TIM.</span></div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span><span class="comment"> * @param htim - указатель на хендл таймера.</span></div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span><span class="comment"> * @param delay - задержка в тиках таймера.</span></div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span><span class="comment"> * @return HAL status.</span></div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span><span class="comment"> * @note Таймер должен быть уже запущен.</span></div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span><span class="comment"> */</span></div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span>HAL_StatusTypeDef TIM_Delay(TIM_HandleTypeDef *htim, uint16_t delay)</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">if</span>(delay &gt;= htim-&gt;Instance-&gt;ARR)</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> {</div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> }</div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> htim-&gt;Instance-&gt;CNT = 0;</div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> <span class="keywordflow">while</span>(1)</div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> {</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> <span class="keywordflow">if</span>(htim-&gt;Instance-&gt;CNT &gt; delay)</div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> {</div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> <span class="keywordflow">return</span> HAL_OK;</div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> }</div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> }</div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span>}</div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span><span class="comment"></span> </div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span><span class="comment">/** </span></div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span><span class="comment"> * @brief Start delay via TIM.</span></div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span><span class="comment"> * @param htim - указатель на хендл таймера.</span></div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span><span class="comment"> * @return HAL status.</span></div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span><span class="comment"> * @note Таймер должен быть уже запущен.</span></div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span><span class="comment"> */</span></div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span>HAL_StatusTypeDef TIM_Delay_Start(TIM_HandleTypeDef *htim)</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span>{ </div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> htim-&gt;Instance-&gt;CNT = 0;</div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> </div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> <span class="keywordflow">return</span> HAL_OK;</div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span>}</div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span><span class="comment"></span> </div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span><span class="comment">/** </span></div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span><span class="comment"> * @brief Wait Delay via TIM without blocking app.</span></div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span><span class="comment"> * @param htim - указатель на хендл таймера.</span></div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span><span class="comment"> * @param delay - задержка в тиках таймера.</span></div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span><span class="comment"> * @return HAL status.</span></div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span><span class="comment"> * @note Перед ожиданием задержки надо запутстить таймер её @ref TIM_Delay_Start</span></div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span><span class="comment"> * @note Таймер не должен использоваться на время этой задержки</span></div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span><span class="comment"> */</span></div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span>HAL_StatusTypeDef TIM_Delay_NonBlocking(TIM_HandleTypeDef *htim, uint16_t delay)</div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span>{ </div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> <span class="keywordflow">if</span>(delay &gt;= htim-&gt;Instance-&gt;ARR)</div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> {</div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> }</div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> </div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> <span class="keywordflow">if</span>(htim-&gt;Instance-&gt;CNT &lt;= delay)</div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> {</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> <span class="keywordflow">return</span> HAL_BUSY;</div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> }</div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> {</div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> <span class="keywordflow">return</span> HAL_OK;</div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> }</div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span>}</div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span><span class="comment"></span> </div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span><span class="comment">/** </span></div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span><span class="comment"> * @brief Initialize TIMs clock and interrupt.</span></div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span><span class="comment"> * @param htim - указатель на хендл таймера.</span></div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span><span class="comment"> * @note Чтобы не генерировать функцию с иницилизацией неиспользуемых таймеров,</span></div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span><span class="comment"> дефайнами в general_tim.h определяются используемые таймеры.</span></div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span><span class="comment"> */</span></div>
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span><span class="keywordtype">void</span> TIM_Base_MspInit(TIM_HandleTypeDef* htim, TIM_ITModeTypeDef it_mode)</div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span>{</div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> it_mode = it_mode&amp;TIM_IT_CONF;</div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span><span class="preprocessor">#ifdef USE_TIM1</span></div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM1)</div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> {</div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> <span class="comment">/* TIM2 clock enable */</span></div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> __HAL_RCC_TIM1_CLK_ENABLE();</div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> </div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> <span class="comment">/* TIM2 interrupt Init */</span></div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">if</span>(it_mode)</div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> {</div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> HAL_NVIC_SetPriority(TIM1_UP_TIM10_IRQn, 0, 0);</div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> HAL_NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn);</div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> }</div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> }</div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span><span class="preprocessor">#ifdef USE_TIM2</span></div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM2)</div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> {</div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> <span class="comment">/* TIM2 clock enable */</span></div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> __HAL_RCC_TIM2_CLK_ENABLE();</div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> </div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> <span class="comment">/* TIM2 interrupt Init */</span></div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">if</span>(it_mode)</div>
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> {</div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);</div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> HAL_NVIC_EnableIRQ(TIM2_IRQn);</div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> }</div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> }</div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span><span class="preprocessor">#ifdef USE_TIM3</span></div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM3)</div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> {</div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> <span class="comment">/* TIM3 clock enable */</span></div>
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> __HAL_RCC_TIM3_CLK_ENABLE();</div>
<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> </div>
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> <span class="comment">/* TIM3 interrupt Init */</span></div>
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> <span class="keywordflow">if</span>(it_mode)</div>
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> {</div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);</div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> HAL_NVIC_EnableIRQ(TIM3_IRQn);</div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> }</div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> }</div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span><span class="preprocessor">#ifdef USE_TIM4</span></div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM4)</div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> {</div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> <span class="comment">/* TIM4 clock enable */</span></div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> __HAL_RCC_TIM4_CLK_ENABLE();</div>
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> </div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> <span class="comment">/* TIM4 interrupt Init */</span></div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> <span class="keywordflow">if</span>(it_mode)</div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> {</div>
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> HAL_NVIC_SetPriority(TIM4_IRQn, 0, 0);</div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> HAL_NVIC_EnableIRQ(TIM4_IRQn);</div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> }</div>
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> }</div>
<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span><span class="preprocessor">#ifdef USE_TIM5</span></div>
<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM5)</div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> {</div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> <span class="comment">/* TIM5 clock enable */</span></div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> __HAL_RCC_TIM5_CLK_ENABLE();</div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> </div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> <span class="comment">/* TIM5 interrupt Init */</span></div>
<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> <span class="keywordflow">if</span>(it_mode)</div>
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> {</div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> HAL_NVIC_SetPriority(TIM5_IRQn, 0, 0);</div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> HAL_NVIC_EnableIRQ(TIM5_IRQn);</div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> }</div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> }</div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span><span class="preprocessor">#ifdef USE_TIM6</span></div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM6)</div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> {</div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> <span class="comment">/* TIM6 clock enable */</span></div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> __HAL_RCC_TIM6_CLK_ENABLE();</div>
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> </div>
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> <span class="comment">/* TIM6 interrupt Init */</span></div>
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> <span class="keywordflow">if</span>(it_mode)</div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> {</div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 0, 0);</div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);</div>
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> }</div>
<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> }</div>
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span><span class="preprocessor">#ifdef USE_TIM7</span></div>
<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM7)</div>
<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span> {</div>
<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> <span class="comment">/* TIM7 clock enable */</span></div>
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> __HAL_RCC_TIM7_CLK_ENABLE();</div>
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> </div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> <span class="comment">/* TIM7 interrupt Init */</span></div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> <span class="keywordflow">if</span>(it_mode)</div>
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> {</div>
<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> HAL_NVIC_SetPriority(TIM7_IRQn, 0, 0);</div>
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> HAL_NVIC_EnableIRQ(TIM7_IRQn);</div>
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> }</div>
<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span> }</div>
<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span><span class="preprocessor">#ifdef USE_TIM8</span></div>
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM8)</div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> {</div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> <span class="comment">/* TIM8 clock enable */</span></div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> __HAL_RCC_TIM8_CLK_ENABLE();</div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> </div>
<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> <span class="comment">/* TIM8 interrupt Init */</span></div>
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> <span class="keywordflow">if</span>(it_mode)</div>
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> {</div>
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> HAL_NVIC_SetPriority(TIM8_UP_TIM13_IRQn, 0, 0);</div>
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> HAL_NVIC_EnableIRQ(TIM8_UP_TIM13_IRQn);</div>
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> }</div>
<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> }</div>
<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span><span class="preprocessor">#ifdef USE_TIM9</span></div>
<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM9)</div>
<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> {</div>
<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> <span class="comment">/* TIM9 clock enable */</span></div>
<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> __HAL_RCC_TIM9_CLK_ENABLE();</div>
<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> </div>
<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> <span class="comment">/* TIM9 interrupt Init */</span></div>
<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> <span class="keywordflow">if</span>(it_mode)</div>
<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> {</div>
<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> HAL_NVIC_SetPriority(TIM1_BRK_TIM9_IRQn, 0, 0);</div>
<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> HAL_NVIC_EnableIRQ(TIM1_BRK_TIM9_IRQn);</div>
<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> }</div>
<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> }</div>
<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span><span class="preprocessor">#ifdef USE_TIM10</span></div>
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM10)</div>
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> {</div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> <span class="comment">/* TIM10 clock enable */</span></div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> __HAL_RCC_TIM10_CLK_ENABLE();</div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> </div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> <span class="comment">/* TIM10 interrupt Init */</span></div>
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> <span class="keywordflow">if</span>(it_mode)</div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> {</div>
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> HAL_NVIC_SetPriority(TIM1_UP_TIM10_IRQn, 0, 0);</div>
<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> HAL_NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn);</div>
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> }</div>
<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> } </div>
<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span><span class="preprocessor">#ifdef USE_TIM11</span></div>
<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM11)</div>
<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> {</div>
<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> <span class="comment">/* TIM11 clock enable */</span></div>
<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> __HAL_RCC_TIM11_CLK_ENABLE();</div>
<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> </div>
<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> <span class="comment">/* TIM11 interrupt Init */</span></div>
<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> <span class="keywordflow">if</span>(it_mode)</div>
<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span> {</div>
<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> HAL_NVIC_SetPriority(TIM1_TRG_COM_TIM11_IRQn, 0, 0);</div>
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> HAL_NVIC_EnableIRQ(TIM1_TRG_COM_TIM11_IRQn);</div>
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> }</div>
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> }</div>
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span><span class="preprocessor">#ifdef USE_TIM12</span></div>
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM12)</div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> {</div>
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> <span class="comment">/* TIM12 clock enable */</span></div>
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span> __HAL_RCC_TIM12_CLK_ENABLE();</div>
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> </div>
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> <span class="comment">/* TIM12 interrupt Init */</span></div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> <span class="keywordflow">if</span>(it_mode)</div>
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> {</div>
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> HAL_NVIC_SetPriority(TIM8_BRK_TIM12_IRQn, 0, 0);</div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> HAL_NVIC_EnableIRQ(TIM8_BRK_TIM12_IRQn);</div>
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> }</div>
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> }</div>
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span><span class="preprocessor">#ifdef USE_TIM13</span></div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM13)</div>
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> {</div>
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> <span class="comment">/* TIM13 clock enable */</span></div>
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> __HAL_RCC_TIM13_CLK_ENABLE();</div>
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> </div>
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> <span class="comment">/* TIM13 interrupt Init */</span></div>
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> <span class="keywordflow">if</span>(it_mode)</div>
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> {</div>
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> HAL_NVIC_SetPriority(TIM8_UP_TIM13_IRQn, 0, 0);</div>
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span> HAL_NVIC_EnableIRQ(TIM8_UP_TIM13_IRQn);</div>
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> }</div>
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> }</div>
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span><span class="preprocessor">#ifdef USE_TIM14</span></div>
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM14)</div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> {</div>
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> <span class="comment">/* TIM14 clock enable */</span></div>
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> __HAL_RCC_TIM14_CLK_ENABLE();</div>
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> </div>
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> <span class="comment">/* TIM14 interrupt Init */</span></div>
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> <span class="keywordflow">if</span>(it_mode)</div>
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> {</div>
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> HAL_NVIC_SetPriority(TIM8_TRG_COM_TIM14_IRQn, 0, 0);</div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> HAL_NVIC_EnableIRQ(TIM8_TRG_COM_TIM14_IRQn);</div>
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> }</div>
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> }</div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span>}<span class="comment"></span></div>
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span><span class="comment">/** </span></div>
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span><span class="comment"> * @brief DeInitialize TIMs clock and interrupt.</span></div>
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span><span class="comment"> * @param htim - указатель на хендл таймера.</span></div>
<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span><span class="comment"> * @note Чтобы не генерировать функцию с деиницилизацией неиспользуемых таймеров,</span></div>
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span><span class="comment"> дефайнами в general_tim.h определяются используемые таймеры.</span></div>
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span><span class="comment"> */</span></div>
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span><span class="keywordtype">void</span> TIM_Base_MspDeInit(TIM_HandleTypeDef* htim)</div>
<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span>{</div>
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span><span class="preprocessor">#ifdef USE_TIM1</span></div>
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM1)</div>
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> {</div>
<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> __HAL_RCC_TIM1_FORCE_RESET();</div>
<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> __HAL_RCC_TIM1_RELEASE_RESET();</div>
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> }</div>
<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span><span class="preprocessor">#ifdef USE_TIM2</span></div>
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM2)</div>
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> {</div>
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span> __HAL_RCC_TIM2_FORCE_RESET();</div>
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span> __HAL_RCC_TIM2_RELEASE_RESET();</div>
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> }</div>
<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span><span class="preprocessor">#ifdef USE_TIM3</span></div>
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM3)</div>
<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> {</div>
<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> __HAL_RCC_TIM3_FORCE_RESET();</div>
<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> __HAL_RCC_TIM3_RELEASE_RESET();</div>
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> }</div>
<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span><span class="preprocessor">#ifdef USE_TIM4</span></div>
<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM4)</div>
<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span> {</div>
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> __HAL_RCC_TIM4_FORCE_RESET();</div>
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span> __HAL_RCC_TIM4_RELEASE_RESET();</div>
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span> }</div>
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span><span class="preprocessor">#ifdef USE_TIM5</span></div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM5)</div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> {</div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> __HAL_RCC_TIM5_FORCE_RESET();</div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> __HAL_RCC_TIM5_RELEASE_RESET();</div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span> }</div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span><span class="preprocessor">#ifdef USE_TIM6</span></div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM6)</div>
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> {</div>
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span> __HAL_RCC_TIM6_FORCE_RESET();</div>
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> __HAL_RCC_TIM6_RELEASE_RESET();</div>
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span> }</div>
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span><span class="preprocessor">#ifdef USE_TIM7</span></div>
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM7)</div>
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> {</div>
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> __HAL_RCC_TIM7_FORCE_RESET();</div>
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> __HAL_RCC_TIM7_RELEASE_RESET();</div>
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> }</div>
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span><span class="preprocessor">#ifdef USE_TIM8</span></div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM8)</div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> {</div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> __HAL_RCC_TIM8_FORCE_RESET();</div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> __HAL_RCC_TIM8_RELEASE_RESET();</div>
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> }</div>
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span><span class="preprocessor">#ifdef USE_TIM9</span></div>
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM9)</div>
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> {</div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> __HAL_RCC_TIM9_FORCE_RESET();</div>
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span> __HAL_RCC_TIM9_RELEASE_RESET();</div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> }</div>
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span><span class="preprocessor">#ifdef USE_TIM10</span></div>
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM10)</div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> {</div>
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span> __HAL_RCC_TIM10_FORCE_RESET();</div>
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span> __HAL_RCC_TIM10_RELEASE_RESET();</div>
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span> } </div>
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span><span class="preprocessor">#ifdef USE_TIM11</span></div>
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM11)</div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> {</div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> __HAL_RCC_TIM11_FORCE_RESET();</div>
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> __HAL_RCC_TIM11_RELEASE_RESET();</div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> }</div>
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span><span class="preprocessor">#ifdef USE_TIM12</span></div>
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM12)</div>
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span> {</div>
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> __HAL_RCC_TIM12_FORCE_RESET();</div>
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span> __HAL_RCC_TIM12_RELEASE_RESET();</div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> }</div>
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span><span class="preprocessor">#ifdef USE_TIM13</span></div>
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM13)</div>
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> {</div>
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span> __HAL_RCC_TIM13_FORCE_RESET();</div>
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> __HAL_RCC_TIM13_RELEASE_RESET();</div>
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span> }</div>
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span><span class="preprocessor">#endif </span></div>
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span><span class="preprocessor">#ifdef USE_TIM14</span></div>
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span> <span class="keywordflow">if</span>(htim-&gt;Instance==TIM14)</div>
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span> {</div>
<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span> __HAL_RCC_TIM14_FORCE_RESET();</div>
<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span> __HAL_RCC_TIM14_RELEASE_RESET();</div>
<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span> }</div>
<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"> 654</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span>}</div>
<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span><span class="comment">//-------------------------TIM INIT FUNCTIONS------------------------</span></div>
<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span><span class="comment">//-------------------------------------------------------------------</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___g_p_i_o___g_e_n_e_r_a_l_html_ga34242874b455a72aa6e25841678ed105"><div class="ttname"><a href="group___g_p_i_o___g_e_n_e_r_a_l.html#ga34242874b455a72aa6e25841678ed105">TIM_Alternate_Mapping</a></div><div class="ttdeci">#define TIM_Alternate_Mapping(INSTANCE)</div><div class="ttdoc">Маппинг альтернативной функции SPI между GPIO.</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8h_source.html#l00061">general_gpio.h:61</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___g_e_n_e_r_a_l_html_ga962f010f783b81fcdd27eb6b53db28e6"><div class="ttname"><a href="group___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#l00021">general_gpio.c:21</a></div></div>
<div class="ttc" id="astruct_t_i_m___encoder_type_def_html"><div class="ttname"><a href="struct_t_i_m___encoder_type_def.html">TIM_EncoderTypeDef</a></div><div class="ttdef"><b>Definition</b> <a href="____general__tim_8h_source.html#l00093">__general_tim.h:94</a></div></div>
<div class="ttc" id="astruct_t_i_m___settings_type_def_html"><div class="ttname"><a href="struct_t_i_m___settings_type_def.html">TIM_SettingsTypeDef</a></div><div class="ttdef"><b>Definition</b> <a href="____general__tim_8h_source.html#l00076">__general_tim.h:77</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_9e11e9a41112194af3eee6cc728f9515.html">MyLibsGeneral</a></li><li class="navelem"><a href="dir_9c80311a018e1f8cfb6659b73d634be4.html">Src</a></li><li class="navelem"><b>__general_tim.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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,251 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Inc/__general_tim.h 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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('____general__tim_8h_source.html','',''); });
</script>
<div id="container">
<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_tim.h</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_tim.h</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * @brief Заголовочный файл для базовой работы с таймерами.</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="preprocessor">#ifndef __TIM_GENERAL_H_</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#define __TIM_GENERAL_H_</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">/////////////////////////////////////////////////////////////////////</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment">/////////////////////////---USER SETTINGS---/////////////////////////</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#define HAL_TIM_MODULE_ENABLED </span><span class="comment">// need to uncomment this define in stm32f4xx_hal_conf.h</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> </div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#define USE_TIM1</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#define USE_TIM2</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#define USE_TIM3</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#define USE_TIM4</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define USE_TIM5</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define USE_TIM6</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#define USE_TIM7</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#define USE_TIM8</span></div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define USE_TIM9</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#define USE_TIM10</span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#define USE_TIM11</span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#define USE_TIM12</span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#define USE_TIM13</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#define USE_TIM14</span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment">/* note: used uart defines in modbus.h */</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><span class="comment">/////////////////////////---USER SETTINGS---/////////////////////////</span></div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="preprocessor">#include &quot;<a class="code" href="mylibs__defs_8h.html">mylibs_defs.h</a>&quot;</span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment"></span> </div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment">/////////////////////////////////////////////////////////////////////</span></div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment">////////////////////////////---DEFINES---////////////////////////////</span></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="preprocessor">#define TIM_IT_CONF_Pos 0</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="comment">//#define TIM_PWM_CONF_Pos 1</span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment">//#define TIM_CLCK_SRC_CONF_Pos 2</span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="comment">//#define TIM_SLAVE_CONF_Pos 3</span></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="comment">//#define TIM_MASTER_CONF_Pos 4</span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment">//#define TIM_BDTR_CONF_Pos 5</span></div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="preprocessor">#define TIM_IT_CONF (1&lt;&lt;(TIM_IT_CONF_Pos))</span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="comment">//#define TIM_PWM_CONF (1&lt;&lt;(TIM_PWM_Pos))</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> </div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="preprocessor">#define TIM_Alternate_Mapping(INSTANCE) ((((INSTANCE) == TIM1) || ((INSTANCE) == TIM2))? GPIO_AF1_TIM1: \</span></div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="preprocessor"> (((INSTANCE) == TIM3) || ((INSTANCE) == TIM4) || ((INSTANCE) == TIM5))? GPIO_AF2_TIM3: \</span></div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="preprocessor"> (((INSTANCE) == TIM8) || ((INSTANCE) == TIM9) || ((INSTANCE) == TIM10) || ((INSTANCE) == TIM11))? GPIO_AF3_TIM8: \</span></div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="preprocessor"> (((INSTANCE) == TIM12) || ((INSTANCE) == TIM13) || ((INSTANCE) == TIM14))? GPIO_AF9_TIM12: \</span></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="preprocessor"> (0))</span><span class="comment"></span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment">////////////////////////////---DEFINES---////////////////////////////]</span></div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </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><span class="comment"></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">///////////////////////---STRUCTURES &amp; ENUMS---//////////////////////</span></div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="keyword">typedef</span> <span class="keyword">enum</span></div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span>{</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> TIM_DEFAULT = 0,</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> TIM_IT_MODE = TIM_IT_CONF,</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="comment">// TIM_PWM_MODE = TIM_PWM_ENABLE,</span></div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment">// TIM_PWM_IT_MODE = TIM_PWM_ENABLE | TIM_IT_CONF,</span></div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span>}TIM_ITModeTypeDef;</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="keyword">typedef</span> <span class="keyword">enum</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span>{</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> TIM_Base_Disable = 0,</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> TIM_TickBase_1US = 1,</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> TIM_TickBase_10US = 10,</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> TIM_TickBase_100US = 100,</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> TIM_TickBase_1MS = 1000,</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> TIM_TickBase_10MS = 10000,</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> TIM_TickBase_100MS = 100000,</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span>}TIM_MHzTickBaseTypeDef;</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> </div>
<div class="foldopen" id="foldopen00076" data-start="{" data-end="};">
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"><a class="line" href="struct_t_i_m___settings_type_def.html"> 76</a></span><span class="keyword">typedef</span> <span class="keyword">struct </span><span class="comment">// struct with settings for custom function</span></div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span>{</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> TIM_HandleTypeDef htim;</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> TIM_ClockConfigTypeDef sClockSourceConfig;</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> TIM_SlaveConfigTypeDef sSlaveConfig;</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> TIM_MasterConfigTypeDef sMasterConfig;</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> TIM_ITModeTypeDef sTimMode;</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> </div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> TIM_MHzTickBaseTypeDef sTickBaseUS;</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> uint8_t sTickBasePrescaler;</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">float</span> sTimAHBFreqMHz;</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="keywordtype">float</span> sTimFreqHz;</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>}<a class="code hl_struct" href="struct_t_i_m___settings_type_def.html">TIM_SettingsTypeDef</a>;</div>
</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div>
<div class="foldopen" id="foldopen00093" data-start="{" data-end="};">
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"><a class="line" href="struct_t_i_m___encoder_type_def.html"> 93</a></span><span class="keyword">typedef</span> <span class="keyword">struct </span><span class="comment">// struct with variables for encoder</span></div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span>{</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> int16_t Encoder_Diff;</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> </div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> TIM_HandleTypeDef *htim;</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> TIM_Encoder_InitTypeDef sConfig;</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> </div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> GPIO_TypeDef *GPIOx;</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> uint32_t GPIO_PIN_TI1;</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> uint32_t GPIO_PIN_TI2;</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> uint32_t GPIO_PIN_SW;</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span>}<a class="code hl_struct" href="struct_t_i_m___encoder_type_def.html">TIM_EncoderTypeDef</a>;<span class="comment"></span></div>
</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span><span class="comment">///////////////////////---STRUCTURES &amp; ENUMS---//////////////////////</span></div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span><span class="comment"></span> </div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span><span class="comment">/////////////////////////////////////////////////////////////////////</span></div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span><span class="comment">///////////////////////////---FUNCTIONS---///////////////////////////</span></div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="comment">/* Initialize TIM with TIM_SettingsTypeDef structure */</span></div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span>HAL_StatusTypeDef TIM_Base_Init(<a class="code hl_struct" href="struct_t_i_m___settings_type_def.html">TIM_SettingsTypeDef</a>* stim);</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="comment">/* Initialize PWM Channel and GPIO for output */</span></div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span>HAL_StatusTypeDef TIM_Output_PWM_Init(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfigOC, uint32_t TIM_CHANNEL, GPIO_TypeDef *GPIOx, uint32_t PWM_PIN);</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="comment">/* Initialize TIM Encoder functional */</span></div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span>HAL_StatusTypeDef TIM_Encoder_Init(<a class="code hl_struct" href="struct_t_i_m___encoder_type_def.html">TIM_EncoderTypeDef</a> *henc1, TIM_HandleTypeDef *htim);</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="comment">/* Initialize OC Comparator */</span></div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span>HAL_StatusTypeDef TIM_OC_Comparator_Init(TIM_HandleTypeDef *htim, uint32_t TIM_CHANNEL);</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span><span class="comment">/* Start delay via TIM */</span></div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span>HAL_StatusTypeDef TIM_Delay_Start(TIM_HandleTypeDef *htim);</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span><span class="comment">/* Delay via TIM */</span></div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span>HAL_StatusTypeDef TIM_Delay(TIM_HandleTypeDef *htim, uint16_t delay);</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="comment">/* Wait Delay via TIM without blocking app */</span></div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span>HAL_StatusTypeDef TIM_Delay_NonBlocking(TIM_HandleTypeDef *htim, uint16_t delay);</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="comment">/* Initialize TIMs clock and interrupt */</span></div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span><span class="keywordtype">void</span> TIM_Base_MspInit(TIM_HandleTypeDef* htim, TIM_ITModeTypeDef it_mode);</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span><span class="comment">/* DeInitialize TIMs clock and interrupt */</span></div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span><span class="keywordtype">void</span> TIM_Base_MspDeInit(TIM_HandleTypeDef* htim);<span class="comment"></span></div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span><span class="comment">///////////////////////////---FUNCTIONS---///////////////////////////</span></div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> </div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span><span class="preprocessor">#endif </span><span class="comment">// __TIM_GENERAL_H_</span></div>
<div class="ttc" id="amylibs__defs_8h_html"><div class="ttname"><a href="mylibs__defs_8h.html">mylibs_defs.h</a></div><div class="ttdoc">Заголочный файл для дефайнов библиотеки MyLibsGeneral.</div></div>
<div class="ttc" id="astruct_t_i_m___encoder_type_def_html"><div class="ttname"><a href="struct_t_i_m___encoder_type_def.html">TIM_EncoderTypeDef</a></div><div class="ttdef"><b>Definition</b> <a href="#l00093">__general_tim.h:94</a></div></div>
<div class="ttc" id="astruct_t_i_m___settings_type_def_html"><div class="ttname"><a href="struct_t_i_m___settings_type_def.html">TIM_SettingsTypeDef</a></div><div class="ttdef"><b>Definition</b> <a href="#l00076">__general_tim.h:77</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_9e11e9a41112194af3eee6cc728f9515.html">MyLibsGeneral</a></li><li class="navelem"><a href="dir_eb423fea8a9c4b9b32b922020ec391e1.html">Inc</a></li><li class="navelem"><b>__general_tim.h</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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,498 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Src/__general_uart.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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('____general__uart_8c_source.html','',''); });
</script>
<div id="container">
<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_uart.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_uart.c</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * @brief Модуль для инициализации UART.</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"> * //-------------------Функции-------------------//</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * @verbatim</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * Functions: users</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> * - UART_Base_Init Инициализация UART </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: uart initialize</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * - UART_GPIO_Init Инициализация GPIO для UART</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * - UART_DMA_Init Инициализация DMA для UART</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * - UART_MspInit Аналог HAL_MspInit для UART</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * - UART_MspDeInit Аналог HAL_MspDeInit для UART</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * @endverbatim</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_uart.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">//------------------------UART 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 UART with UART_SettingsTypeDef structure.</span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="comment"> * @param suart - указатель на структуру с настройками UART.</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 Данная структура содержит хендл ЮАРТ и настройки перефирии (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 UART_Base_Init(<a class="code hl_struct" href="struct_u_a_r_t___settings_type_def.html">UART_SettingsTypeDef</a> *suart)</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_UART_Init_Struct(suart) != 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> suart-&gt;huart.Init.Mode = UART_MODE_TX_RX;</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> UART_MspInit(&amp;suart-&gt;huart);</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> </div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keywordflow">if</span> (HAL_UART_Init(&amp;suart-&gt;huart) != HAL_OK)</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> <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="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> }</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 gpio from UARTSettings structure</span></div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> UART_GPIO_Init(suart-&gt;GPIOx, suart-&gt;GPIO_PIN_RX, suart-&gt;GPIO_PIN_TX);</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> __HAL_UART_ENABLE_IT(&amp;suart-&gt;huart, UART_IT_IDLE);</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="comment">// init dma from UARTSettings structure if need</span></div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">if</span> (suart-&gt;DMAChannel != 0)</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> UART_DMA_Init(&amp;suart-&gt;huart, suart-&gt;huart.hdmarx, suart-&gt;DMAChannel, suart-&gt;DMA_CHANNEL_X);</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">return</span> HAL_OK;</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span>}</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="comment"></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="comment"> * @brief Initialize GPIO for UART.</span></div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment"> * @param GPIOx - порт для настройки.</span></div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="comment"> * @param GPIO_PIN_RX - пин для настройки на прием.</span></div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="comment"> * @param GPIO_PIN_TX - пин для настройки на передачу.</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="comment"> */</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="keywordtype">void</span> UART_GPIO_Init(GPIO_TypeDef *GPIOx, uint16_t GPIO_PIN_RX, uint16_t GPIO_PIN_TX)</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span>{ <span class="comment">// function takes port and pins (for rx and tx)</span></div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> GPIO_InitTypeDef GPIO_InitStruct = {0};</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="comment">// choose port for enable clock</span></div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <a class="code hl_function" href="group___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6">GPIO_Clock_Enable</a>(GPIOx);</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="comment">//USART3 GPIO Configuration</span></div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="comment">//GPIO_PIN_TX ------&gt; USART_TX</span></div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="comment">//GPIO_PIN_RX ------&gt; USART_RX </span></div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="preprocessor">#if defined(STM32F407xx) </span><span class="comment">// gpio init for 407</span></div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> GPIO_InitStruct.Pin = GPIO_PIN_TX|GPIO_PIN_RX;</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> GPIO_InitStruct.Pull = GPIO_NOPULL;</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> GPIO_InitStruct.Alternate = GPIO_AF7_USART3;</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> HAL_GPIO_Init(GPIOx, &amp;GPIO_InitStruct);</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="preprocessor">#elif defined(STM32F103xG) </span><span class="comment">// gpio init for atm403/stm103</span></div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="comment">//GPIO_PIN_TX ------&gt; USART_TX</span></div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> GPIO_InitStruct.Pin = GPIO_PIN_TX;</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> HAL_GPIO_Init(GPIOx, &amp;GPIO_InitStruct);</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="comment">// GPIO_PIN_RX ------&gt; USART_RX </span></div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> GPIO_InitStruct.Pin = GPIO_PIN_RX;</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> GPIO_InitStruct.Mode = GPIO_MODE_INPUT;</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> GPIO_InitStruct.Pull = GPIO_NOPULL;</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> HAL_GPIO_Init(GPIOx, &amp;GPIO_InitStruct);</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span>}</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span><span class="comment"></span> </div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="comment">/** </span></div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="comment"> * @brief Initialize DMA for UART.</span></div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="comment"> * @param huart - указатель на хендл UART для настройки DMA.</span></div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span><span class="comment"> * @param hdma_rx - указатель на хендл DMA для линии приема UART.</span></div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="comment"> * @param DMAChannel - указатель на канал DMA/поток DMA в STM32F407.</span></div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="comment"> * @param DMA_CHANNEL_X - канал DMA.</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="keywordtype">void</span> UART_DMA_Init(UART_HandleTypeDef *huart, DMA_HandleTypeDef *hdma_rx, DMA_Stream_TypeDef *DMAChannel, uint32_t DMA_CHANNEL_X)</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span>{ <span class="comment">// function takes uart and dma handlers and dmachannel for uart</span></div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="comment">// for now only dma rx is supported, tx maybe later if needed</span></div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="comment">// calc defines on boot_project_setup.h</span></div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="comment">/* USART3 DMA Init */</span></div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="comment">/* USART3_RX Init */</span></div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> hdma_rx-&gt;Instance = DMAChannel;</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="preprocessor">#if defined(STM32F407xx) </span><span class="comment">// dma channel choose for 407</span></div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> hdma_rx-&gt;Init.Channel = DMA_CHANNEL_X;</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> hdma_rx-&gt;Init.Direction = DMA_PERIPH_TO_MEMORY;</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> hdma_rx-&gt;Init.PeriphInc = DMA_PINC_DISABLE;</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> hdma_rx-&gt;Init.MemInc = DMA_MINC_ENABLE;</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> hdma_rx-&gt;Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> hdma_rx-&gt;Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> hdma_rx-&gt;Init.Mode = DMA_CIRCULAR;</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> hdma_rx-&gt;Init.Priority = DMA_PRIORITY_LOW;</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">if</span> (HAL_DMA_Init(hdma_rx) != HAL_OK)</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> {</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</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="l00128" name="l00128"></a><span class="lineno"> 128</span> }</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> __USER_LINKDMA(huart,hdmarx,hdma_rx); </div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> </div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</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="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="comment">// so you get error because hal uses . insted of -&gt;</span></div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span>}</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span><span class="comment"></span> </div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span><span class="comment">/** </span></div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span><span class="comment"> * @brief Initialize UART &amp; DMA clock and interrupt.</span></div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span><span class="comment"> * @param huart - указатель на хендл UART для инициализации.</span></div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span><span class="comment"> * @note Чтобы не генерировать функцию с иницилизацией неиспользуемых UART,</span></div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span><span class="comment"> дефайнами в rs_message.h определяются используемые UART.</span></div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span><span class="comment"> */</span></div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span><span class="keywordtype">void</span> UART_MspInit(UART_HandleTypeDef *huart) <span class="comment">// analog for hal function</span></div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span>{ </div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="comment">// __RCC_DMA_UART_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">// /* DMA1_Stream1_IRQn interrupt configuration */</span></div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span><span class="comment">// HAL_NVIC_SetPriority(DMA_UART_IRQn, 0, 0);</span></div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span><span class="comment">// HAL_NVIC_EnableIRQ(DMA_UART_IRQn);</span></div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="comment">// rcc, dma and interrupt init for USARTs</span></div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="comment">// GPIO init was moved to own functions UART_GPIO_Init </span></div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">if</span>(0);</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span><span class="preprocessor">#ifdef USE_USART1</span></div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(huart-&gt;Instance==USART1)</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> </div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="comment">/* DMA2 clock enable */</span></div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> __HAL_RCC_DMA2_CLK_ENABLE();</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="comment">/* DMA interrupt init */</span></div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 0, 0);</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> </div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="comment">/* USART1 clock enable */</span></div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> __HAL_RCC_USART1_CLK_ENABLE();</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">/* USART1 interrupt Init */</span></div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> HAL_NVIC_EnableIRQ(USART1_IRQn);</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> }</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span><span class="preprocessor">#endif </span><span class="comment">// USE_USART1</span></div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span><span class="preprocessor">#ifdef USE_USART2</span></div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(huart-&gt;Instance==USART2)</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> {</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="comment">/* DMA1 clock enable */</span></div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> __HAL_RCC_DMA1_CLK_ENABLE();</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="comment">/* DMA interrupt init */</span></div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 0, 0);</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn);</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="comment">/* USART2 clock enable */</span></div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> __HAL_RCC_USART2_CLK_ENABLE();</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">/* USART2 interrupt Init */</span></div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> HAL_NVIC_EnableIRQ(USART2_IRQn);</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> }</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span><span class="preprocessor">#endif </span><span class="comment">// USE_USART2</span></div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span><span class="preprocessor">#ifdef USE_USART3</span></div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(huart-&gt;Instance==USART3)</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">/* DMA1 clock enable */</span></div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> __HAL_RCC_DMA1_CLK_ENABLE();</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <span class="comment">/* DMA interrupt init */</span></div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 0, 0);</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> </div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="comment">/* USART3 clock enable */</span></div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> __HAL_RCC_USART3_CLK_ENABLE(); </div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="comment">/* USART3 interrupt Init */</span></div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> HAL_NVIC_SetPriority(USART3_IRQn, 0, 0);</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> HAL_NVIC_EnableIRQ(USART3_IRQn);</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> }</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span><span class="preprocessor">#endif </span><span class="comment">// USE_USART3</span></div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span><span class="preprocessor">#ifdef USE_UART4</span></div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(huart-&gt;Instance==UART4)</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">/* DMA1 clock enable */</span></div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> __HAL_RCC_DMA1_CLK_ENABLE();</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> HAL_NVIC_SetPriority(DMA1_Stream2_IRQn, 0, 0);</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> HAL_NVIC_EnableIRQ(DMA1_Stream2_IRQn);</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">/* UART4 clock enable */</span></div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> __HAL_RCC_UART4_CLK_ENABLE();</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> </div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="comment">/* UART4 interrupt Init */</span></div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> HAL_NVIC_SetPriority(UART4_IRQn, 0, 0);</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> HAL_NVIC_EnableIRQ(UART4_IRQn);</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> }</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span><span class="preprocessor">#endif </span><span class="comment">// USE_UART4</span></div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span><span class="preprocessor">#ifdef USE_UART5</span></div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(huart-&gt;Instance==UART5)</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> {</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="comment">/* DMA1 clock enable */</span></div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> __HAL_RCC_DMA1_CLK_ENABLE();</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="comment">/* DMA interrupt init */</span></div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 0, 0);</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> </div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <span class="comment">/* UART5 clock enable */</span></div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> __HAL_RCC_DMA1_CLK_ENABLE();</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> </div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> <span class="comment">/* UART5 interrupt Init */</span></div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> HAL_NVIC_SetPriority(UART5_IRQn, 0, 0);</div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> HAL_NVIC_EnableIRQ(UART5_IRQn);</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> }</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span><span class="preprocessor">#endif </span><span class="comment">// USE_UART5</span></div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span><span class="preprocessor">#ifdef USE_USART6</span></div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(huart-&gt;Instance==USART6)</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">/* DMA2 clock enable */</span></div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> __HAL_RCC_DMA2_CLK_ENABLE();</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <span class="comment">/* DMA interrupt init */</span></div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 0, 0);</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn);</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">/* USART6 clock enable */</span></div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> __HAL_RCC_USART6_CLK_ENABLE();</div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> </div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> <span class="comment">/* USART6 interrupt Init */</span></div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> HAL_NVIC_SetPriority(USART6_IRQn, 0, 0);</div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> HAL_NVIC_EnableIRQ(USART6_IRQn);</div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> }</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span><span class="preprocessor">#endif </span><span class="comment">// USE_USART6</span></div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span>}</div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span><span class="comment"></span> </div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span><span class="comment">/** </span></div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span><span class="comment"> * @brief Deinitialize UART &amp; DMA clock and interrupt.</span></div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span><span class="comment"> * @param huart - указатель на хендл UART для деинициализации.</span></div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span><span class="comment"> * @note Чтобы не генерировать функцию с деиницилизацией неиспользуемых UART,</span></div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span><span class="comment"> дефайнами определяются используемые UART.</span></div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span><span class="comment"> */</span></div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span><span class="keywordtype">void</span> UART_MspDeInit(UART_HandleTypeDef *huart) <span class="comment">// analog for hal function</span></div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span>{ </div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="comment">// rcc, dma and interrupt init for USARTs</span></div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="comment">// GPIO init was moved to own functions UART_GPIO_Init </span></div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">if</span>(0);</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span><span class="preprocessor">#ifdef USE_USART1</span></div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(huart-&gt;Instance==USART1)</div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> {</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> </div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span><span class="comment">// /* DMA2 clock enable */</span></div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span><span class="comment">// __HAL_RCC_DMA2_CLK_ENABLE();</span></div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span><span class="comment">// /* DMA interrupt init */</span></div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span><span class="comment">// HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 0, 0);</span></div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span><span class="comment">// HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);</span></div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> </div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="comment">/* USART1 clock reset */</span></div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> __HAL_RCC_USART1_FORCE_RESET();</div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> __HAL_RCC_USART1_RELEASE_RESET();</div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> }</div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span><span class="preprocessor">#endif </span><span class="comment">// USE_USART1</span></div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span><span class="preprocessor">#ifdef USE_USART2</span></div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(huart-&gt;Instance==USART2)</div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> {</div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span><span class="comment">// /* DMA1 clock enable */</span></div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span><span class="comment">// __HAL_RCC_DMA1_CLK_ENABLE();</span></div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span><span class="comment">// /* DMA interrupt init */</span></div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span><span class="comment">// HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 0, 0);</span></div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span><span class="comment">// HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn);</span></div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> </div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> <span class="comment">/* USART2 clock reset */</span></div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> __HAL_RCC_USART2_FORCE_RESET();</div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> __HAL_RCC_USART2_RELEASE_RESET();</div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> }</div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span><span class="preprocessor">#endif </span><span class="comment">// USE_USART2</span></div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span><span class="preprocessor">#ifdef USE_USART3</span></div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(huart-&gt;Instance==USART3)</div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> { </div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span><span class="comment">// /* DMA1 clock enable */</span></div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span><span class="comment">// __HAL_RCC_DMA1_CLK_ENABLE();</span></div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span><span class="comment">// /* DMA interrupt init */</span></div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span><span class="comment">// HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 0, 0);</span></div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span><span class="comment">// HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);</span></div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> </div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> <span class="comment">/* USART3 clock reset */</span></div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> __HAL_RCC_USART3_FORCE_RESET();</div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> __HAL_RCC_USART3_RELEASE_RESET();</div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> }</div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span><span class="preprocessor">#endif </span><span class="comment">// USE_USART3</span></div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span><span class="preprocessor">#ifdef USE_UART4</span></div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(huart-&gt;Instance==UART4)</div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> {</div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span><span class="comment">// /* DMA1 clock enable */</span></div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span><span class="comment">// __HAL_RCC_DMA1_CLK_ENABLE();</span></div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span><span class="comment">// /* DMA interrupt init */</span></div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span><span class="comment">// HAL_NVIC_SetPriority(DMA1_Stream2_IRQn, 0, 0);</span></div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span><span class="comment">// HAL_NVIC_EnableIRQ(DMA1_Stream2_IRQn);</span></div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> </div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> <span class="comment">/* UART4 clock reset */</span></div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> __HAL_RCC_UART4_FORCE_RESET();</div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> __HAL_RCC_UART4_RELEASE_RESET();</div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> }</div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span><span class="preprocessor">#endif </span><span class="comment">// USE_UART4</span></div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span><span class="preprocessor">#ifdef USE_UART5</span></div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(huart-&gt;Instance==UART5)</div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> {</div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span><span class="comment">// /* DMA1 clock enable */</span></div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span><span class="comment">// __HAL_RCC_DMA1_CLK_ENABLE();</span></div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span><span class="comment">// /* DMA interrupt init */</span></div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span><span class="comment">// HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 0, 0);</span></div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span><span class="comment">// HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);</span></div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> </div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> <span class="comment">/* UART5 clock reset */</span></div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> __HAL_RCC_UART5_FORCE_RESET();</div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> __HAL_RCC_UART5_RELEASE_RESET();</div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> }</div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span><span class="preprocessor">#endif </span><span class="comment">// USE_UART5</span></div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span><span class="preprocessor">#ifdef USE_USART6</span></div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(huart-&gt;Instance==USART6)</div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> {</div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span><span class="comment">// /* DMA2 clock enable */</span></div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span><span class="comment">// __HAL_RCC_DMA2_CLK_ENABLE();</span></div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span><span class="comment">// /* DMA interrupt init */</span></div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span><span class="comment">// HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 0, 0);</span></div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span><span class="comment">// HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn);</span></div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> </div>
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> <span class="comment">/* USART6 clock reset */</span></div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> __HAL_RCC_USART6_FORCE_RESET();</div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> __HAL_RCC_USART6_RELEASE_RESET();</div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> }</div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span><span class="preprocessor">#endif </span><span class="comment">// USE_USART6</span></div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span>}</div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span><span class="comment"></span> </div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span><span class="comment">/** </span></div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span><span class="comment"> * @brief Check that uart init structure have correct values.</span></div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span><span class="comment"> * @param suart - указатель на структуру с настройками UART.</span></div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span><span class="comment"> * @return HAL status.</span></div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span><span class="comment"> */</span></div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span>HAL_StatusTypeDef Check_UART_Init_Struct(<a class="code hl_struct" href="struct_u_a_r_t___settings_type_def.html">UART_SettingsTypeDef</a> *suart)</div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span>{</div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> <span class="comment">// check is settings are valid</span></div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">if</span> (!IS_UART_INSTANCE(suart-&gt;huart.Instance))</div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> </div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> <span class="keywordflow">if</span> (!IS_UART_BAUDRATE(suart-&gt;huart.Init.BaudRate) || (suart-&gt;huart.Init.BaudRate == NULL))</div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> </div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> <span class="keywordflow">if</span> (!IS_GPIO_ALL_INSTANCE(suart-&gt;GPIOx))</div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> </div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">if</span> (!IS_GPIO_PIN(suart-&gt;GPIO_PIN_RX) &amp;&amp; !IS_GPIO_PIN(suart-&gt;GPIO_PIN_TX)) <span class="comment">// if both pins arent set up</span></div>
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> </div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> <span class="keywordflow">return</span> HAL_OK;</div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span>}</div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> </div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span><span class="comment">//------------------------UART INIT FUNCTIONS------------------------</span></div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span><span class="comment">//-------------------------------------------------------------------</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___g_p_i_o___g_e_n_e_r_a_l_html_ga962f010f783b81fcdd27eb6b53db28e6"><div class="ttname"><a href="group___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#l00021">general_gpio.c:21</a></div></div>
<div class="ttc" id="astruct_u_a_r_t___settings_type_def_html"><div class="ttname"><a href="struct_u_a_r_t___settings_type_def.html">UART_SettingsTypeDef</a></div><div class="ttdef"><b>Definition</b> <a href="____general__uart_8h_source.html#l00045">__general_uart.h:46</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_9e11e9a41112194af3eee6cc728f9515.html">MyLibsGeneral</a></li><li class="navelem"><a href="dir_9c80311a018e1f8cfb6659b73d634be4.html">Src</a></li><li class="navelem"><b>__general_uart.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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,226 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Inc/__general_uart.h 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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('____general__uart_8h_source.html','',''); });
</script>
<div id="container">
<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_uart.h</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_uart.h</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * @brief Заголовочный файл для модуля инициализации UART.</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="preprocessor">#ifndef __UART_GENERAL_H_</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#define __UART_GENERAL_H_</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">//////////////////////////////////////////////////////////////////////</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment">/////////////////////////---USER SETTINGS---/////////////////////////</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#define HAL_UART_MODULE_ENABLED </span><span class="comment">// need to uncomment these defines in stm32f4xx_hal_conf.h</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment">//#define HAL_USART_MODULE_ENABLED // maybe also need to add hal_uart.h/.c (source code)</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">//#define USE_USART1</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment">//#define USE_USART2</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment">//#define USE_USART3</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment">//#define USE_UART4</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment">//#define USE_UART5</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment">//#define USE_USART6</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment">/* note: used uart defines in modbus.h */</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">/////////////////////////---USER SETTINGS---/////////////////////////</span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include &quot;interface_config.h&quot;</span> <span class="comment">/* used uart defines in modbus.h */</span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment"></span> </div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment">/////////////////////////////////////////////////////////////////////</span></div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment">////////////////////////////---DEFINES---////////////////////////////</span></div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="preprocessor">#include &quot;<a class="code" href="mylibs__defs_8h.html">mylibs_defs.h</a>&quot;</span><span class="comment"></span></div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment">/** </span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment"> * @brief Analog for HAL define. Remade with pointer to structure.</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment"> * @note @ref __HAL_LINKDMA.</span></div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment"> */</span></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="preprocessor">#define __USER_LINKDMA(__HANDLE__, __PPP_DMA_FIELD__, __DMA_HANDLE__) \</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="preprocessor">do{ \</span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="preprocessor">(__HANDLE__)-&gt;__PPP_DMA_FIELD__ = (__DMA_HANDLE__); \</span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="preprocessor">(__DMA_HANDLE__)-&gt;Parent = (__HANDLE__);} while(0U)</span></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="comment"></span></div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="comment">////////////////////////////---DEFINES---////////////////////////////</span></div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> </div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="comment"></span> </div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="comment">/////////////////////////////////////////////////////////////////////</span></div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="comment">///////////////////////---STRUCTURES &amp; ENUMS---//////////////////////</span></div>
<div class="foldopen" id="foldopen00045" data-start="{" data-end="};">
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="struct_u_a_r_t___settings_type_def.html"> 45</a></span><span class="keyword">typedef</span> <span class="keyword">struct </span><span class="comment">// struct with settings for custom function</span></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> UART_HandleTypeDef huart;</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> GPIO_TypeDef *GPIOx;</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> uint16_t GPIO_PIN_RX;</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> uint16_t GPIO_PIN_TX;</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> DMA_Stream_TypeDef *DMAChannel; <span class="comment">// DMAChannel = 0 if doesnt need</span></div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> uint32_t DMA_CHANNEL_X; <span class="comment">// DMAChannel = 0 if doesnt need</span></div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span>}<a class="code hl_struct" href="struct_u_a_r_t___settings_type_def.html">UART_SettingsTypeDef</a>;<span class="comment"></span></div>
</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="comment">///////////////////////---STRUCTURES &amp; ENUMS---//////////////////////</span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</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="comment">/////////////////////////////////////////////////////////////////////</span></div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment">///////////////////////////---FUNCTIONS---///////////////////////////</span></div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="comment">/** </span></div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="comment"> * @brief Initialize UART with UART_SettingsTypeDef structure.</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="comment"> * @param suart - указатель на структуру с настройками UART.</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="comment"> * @return HAL status.</span></div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="comment"> * @note Данная структура содержит хендл ЮАРТ и настройки перефирии (GPIO)</span></div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="comment"> */</span></div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span>HAL_StatusTypeDef UART_Base_Init(<a class="code hl_struct" href="struct_u_a_r_t___settings_type_def.html">UART_SettingsTypeDef</a> *suart);<span class="comment"></span></div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="comment">/** </span></div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="comment"> * @brief Initialize GPIO for UART.</span></div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="comment"> * @param GPIOx - порт для настройки.</span></div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="comment"> * @param GPIO_PIN_RX - пин для настройки на прием.</span></div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="comment"> * @param GPIO_PIN_TX - пин для настройки на передачу.</span></div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="comment"> */</span></div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span><span class="keywordtype">void</span> UART_GPIO_Init(GPIO_TypeDef *GPIOx, uint16_t GPIO_PIN_RX, uint16_t GPIO_PIN_TX);<span class="comment"></span></div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="comment">/** </span></div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="comment"> * @brief Initialize DMA for UART.</span></div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="comment"> * @param huart - указатель на хендл UART для настройки DMA.</span></div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="comment"> * @param hdma_rx - указатель на хендл DMA для линии приема UART.</span></div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="comment"> * @param DMAChannel - указатель на канал DMA/поток DMA в STM32F407.</span></div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="comment"> * @param DMA_CHANNEL_X - канал DMA.</span></div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="comment"> */</span></div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="keywordtype">void</span> UART_DMA_Init(UART_HandleTypeDef *huart, DMA_HandleTypeDef *hdma_rx, DMA_Stream_TypeDef *DMAChannel, uint32_t DMA_CHANNEL_X);<span class="comment"></span></div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="comment">/** </span></div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="comment"> * @brief Initialize UART &amp; DMA clock and interrupt.</span></div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="comment"> * @param huart - указатель на хендл UART для инициализации.</span></div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="comment"> * @note Чтобы не генерировать функцию с иницилизацией неиспользуемых UART,</span></div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="comment"> дефайнами определяются используемые UART.</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="keywordtype">void</span> UART_MspInit(UART_HandleTypeDef *huart);<span class="comment"></span></div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="comment">/** </span></div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="comment"> * @brief Deinitialize UART &amp; DMA clock and interrupt.</span></div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><span class="comment"> * @param huart - указатель на хендл UART для деинициализации.</span></div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="comment"> * @note Чтобы не генерировать функцию с деиницилизацией неиспользуемых UART,</span></div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="comment"> дефайнами в rs_message.h определяются используемые UART.</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> UART_MspDeInit(UART_HandleTypeDef *huart);</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="comment"></span> </div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="comment">/** </span></div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="comment"> * @brief Check that uart init structure have correct values.</span></div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span><span class="comment"> * @param suart - указатель на структуру с настройками UART.</span></div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="comment"> * @return HAL status.</span></div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="comment"> */</span> </div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span>HAL_StatusTypeDef Check_UART_Init_Struct(<a class="code hl_struct" href="struct_u_a_r_t___settings_type_def.html">UART_SettingsTypeDef</a> *suart);<span class="comment"></span></div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span><span class="comment">///////////////////////////---FUNCTIONS---///////////////////////////</span></div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> </div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span><span class="preprocessor">#endif </span><span class="comment">// __UART_GENERAL_H_</span></div>
<div class="ttc" id="amylibs__defs_8h_html"><div class="ttname"><a href="mylibs__defs_8h.html">mylibs_defs.h</a></div><div class="ttdoc">Заголочный файл для дефайнов библиотеки MyLibsGeneral.</div></div>
<div class="ttc" id="astruct_u_a_r_t___settings_type_def_html"><div class="ttname"><a href="struct_u_a_r_t___settings_type_def.html">UART_SettingsTypeDef</a></div><div class="ttdef"><b>Definition</b> <a href="#l00045">__general_uart.h:46</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_9e11e9a41112194af3eee6cc728f9515.html">MyLibsGeneral</a></li><li class="navelem"><a href="dir_eb423fea8a9c4b9b32b922020ec391e1.html">Inc</a></li><li class="navelem"><b>__general_uart.h</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.14.0 </li>
</ul>
</div>
</body>
</html>

136
Doc/html/annotated.html Normal file
View File

@ -0,0 +1,136 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: Class List</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('annotated.html','',''); });
</script>
<div id="container">
<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">Class List</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
<table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_a_d_c___tracker_type_def.html" target="_self">ADC_TrackerTypeDef</a></td><td class="desc">Struct for trackers for ADC </td></tr>
<tr id="row_1_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_a_d_c_channel___tracker_type_def.html" target="_self">ADCChannel_TrackerTypeDef</a></td><td class="desc">Struct for trackers for ADC Channel </td></tr>
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_g_p_i_o___l_e_d_type_def.html" target="_self">GPIO_LEDTypeDef</a></td><td class="desc">Структура светодиода </td></tr>
<tr id="row_3_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_g_p_i_o___switch_type_def.html" target="_self">GPIO_SwitchTypeDef</a></td><td class="desc">Структура кнопки </td></tr>
<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_h_f___stack_frame__t.html" target="_self">HF_StackFrame_t</a></td><td class="desc">Контекст стек-фрейма процессора при HardFault </td></tr>
<tr id="row_5_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_measure___tracker_type_def.html" target="_self">Measure_TrackerTypeDef</a></td><td class="desc">Struct for trackers for Measure </td></tr>
<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_measure_handle___tracker_type_def.html" target="_self">MeasureHandle_TrackerTypeDef</a></td><td class="desc">Struct for trackers for Measure </td></tr>
<tr id="row_7_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_m_z_k_t___discrete_inputs_type_def.html" target="_self">MZKT_DiscreteInputsTypeDef</a></td><td class="desc"></td></tr>
<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_m_z_k_t___l_e_ds_type_def.html" target="_self">MZKT_LEDsTypeDef</a></td><td class="desc"></td></tr>
<tr id="row_9_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_r_s___tracker_type_def.html" target="_self">RS_TrackerTypeDef</a></td><td class="desc">Struct for trackers for RS </td></tr>
<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_r_t_t___flash_header__t.html" target="_self">RTT_FlashHeader_t</a></td><td class="desc">Структура RTT, которая будет положена в Flash </td></tr>
<tr id="row_11_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_s_p_i___settings_type_def.html" target="_self">SPI_SettingsTypeDef</a></td><td class="desc"></td></tr>
<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_t_i_m___encoder_type_def.html" target="_self">TIM_EncoderTypeDef</a></td><td class="desc"></td></tr>
<tr id="row_13_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_t_i_m___settings_type_def.html" target="_self">TIM_SettingsTypeDef</a></td><td class="desc"></td></tr>
<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_u_a_r_t___settings_type_def.html" target="_self">UART_SettingsTypeDef</a></td><td class="desc"></td></tr>
<tr id="row_15_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="unionuint16___bit_type_def.html" target="_self">uint16_BitTypeDef</a></td><td class="desc"></td></tr>
<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="unionuint32___bit_type_def.html" target="_self">uint32_BitTypeDef</a></td><td class="desc"></td></tr>
<tr id="row_17_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="unionuint64___bit_type_def.html" target="_self">uint64_BitTypeDef</a></td><td class="desc"></td></tr>
<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="unionuint8___bit_type_def.html" target="_self">uint8_BitTypeDef</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

22
Doc/html/annotated_dup.js Normal file
View File

@ -0,0 +1,22 @@
var annotated_dup =
[
[ "ADC_TrackerTypeDef", "struct_a_d_c___tracker_type_def.html", null ],
[ "ADCChannel_TrackerTypeDef", "struct_a_d_c_channel___tracker_type_def.html", null ],
[ "GPIO_LEDTypeDef", "struct_g_p_i_o___l_e_d_type_def.html", "struct_g_p_i_o___l_e_d_type_def" ],
[ "GPIO_SwitchTypeDef", "struct_g_p_i_o___switch_type_def.html", "struct_g_p_i_o___switch_type_def" ],
[ "HF_StackFrame_t", "struct_h_f___stack_frame__t.html", "struct_h_f___stack_frame__t" ],
[ "Measure_TrackerTypeDef", "struct_measure___tracker_type_def.html", null ],
[ "MeasureHandle_TrackerTypeDef", "struct_measure_handle___tracker_type_def.html", null ],
[ "MZKT_DiscreteInputsTypeDef", "struct_m_z_k_t___discrete_inputs_type_def.html", null ],
[ "MZKT_LEDsTypeDef", "struct_m_z_k_t___l_e_ds_type_def.html", null ],
[ "RS_TrackerTypeDef", "struct_r_s___tracker_type_def.html", null ],
[ "RTT_FlashHeader_t", "struct_r_t_t___flash_header__t.html", "struct_r_t_t___flash_header__t" ],
[ "SPI_SettingsTypeDef", "struct_s_p_i___settings_type_def.html", null ],
[ "TIM_EncoderTypeDef", "struct_t_i_m___encoder_type_def.html", null ],
[ "TIM_SettingsTypeDef", "struct_t_i_m___settings_type_def.html", null ],
[ "UART_SettingsTypeDef", "struct_u_a_r_t___settings_type_def.html", null ],
[ "uint16_BitTypeDef", "unionuint16___bit_type_def.html", null ],
[ "uint32_BitTypeDef", "unionuint32___bit_type_def.html", null ],
[ "uint64_BitTypeDef", "unionuint64___bit_type_def.html", null ],
[ "uint8_BitTypeDef", "unionuint8___bit_type_def.html", null ]
];

View File

@ -0,0 +1,286 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Inc/bit_access.h 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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('bit__access_8h_source.html','',''); });
</script>
<div id="container">
<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">bit_access.h</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 mylibs_defs.h</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">* @brief Заголочный файл для дефайнов библиотеки MyLibsGeneral.</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">* @defgroup BIT_ACCESS_DEFINES Bit access defines</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">* @ingroup MYLIBS_DEFINES</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment">* @brief Макросы и typedef&#39;ы для работы с битами в unsigned типах.</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">* @details</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">* - @ref uint8_bit</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment">* - @ref uint16_bit</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment">* - @ref uint32_bit</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">* - @ref uint64_bit</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment">*</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="comment">* Пример верного использования:</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment">* @code</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment">* uint8_t val = 0x05;</span></div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">* uint8_t b2 = uint8_bit(val, 2); // Получить бит 2</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">* uint8_bit(val, 6) = 1; // Записать бит 6</span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment">* @endcode</span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">* - Нельзя использовать переменные в качестве индекса:</span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="comment">* @code</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment">* uint8_t i = 2;</span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment">* uint8_bit(val, i); // Не сработает!</span></div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment">* @endcode</span></div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment">* - Макросы возвращают 0 или 1.</span></div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment">* - Доступ реализован через приведение к `union` с битовыми полями, поэтому это</span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment">* безопасный способ работы с отдельными битами без ручного сдвига и маскирования.</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment">* @{</span></div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment">*************************************************************************/</span></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="preprocessor">#ifndef __BIT_ACCESS_H_</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="preprocessor">#define __BIT_ACCESS_H_</span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="preprocessor">#include &quot;<a class="code" href="mylibs__defs_8h.html">mylibs_defs.h</a>&quot;</span></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> </div>
<div class="foldopen" id="foldopen00039" data-start="{" data-end="};">
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="unionuint8___bit_type_def.html"> 39</a></span><span class="keyword">typedef</span> <span class="keyword">union</span></div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span>{</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> uint8_t all;</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">struct</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="keywordtype">unsigned</span> bit0:1;</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">unsigned</span> bit1:1;</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">unsigned</span> bit2:1;</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">unsigned</span> bit3:1;</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">unsigned</span> bit4:1;</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">unsigned</span> bit5:1;</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">unsigned</span> bit6:1;</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">unsigned</span> bit7:1;</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> }bit;</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span>}<a class="code hl_union" href="unionuint8___bit_type_def.html">uint8_BitTypeDef</a>;</div>
</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
<div class="foldopen" id="foldopen00055" data-start="{" data-end="};">
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="unionuint16___bit_type_def.html"> 55</a></span><span class="keyword">typedef</span> <span class="keyword">union</span></div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span>{</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> uint16_t all;</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">struct</span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> {</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">unsigned</span> bit0:1;</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keywordtype">unsigned</span> bit1:1;</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">unsigned</span> bit2:1;</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keywordtype">unsigned</span> bit3:1;</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">unsigned</span> bit4:1;</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keywordtype">unsigned</span> bit5:1;</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">unsigned</span> bit6:1;</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">unsigned</span> bit7:1;</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">unsigned</span> bit8:1;</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keywordtype">unsigned</span> bit9:1;</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keywordtype">unsigned</span> bit10:1;</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordtype">unsigned</span> bit11:1;</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordtype">unsigned</span> bit12:1;</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keywordtype">unsigned</span> bit13:1;</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">unsigned</span> bit14:1;</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">unsigned</span> bit15:1;</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> }bit;</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span>}<a class="code hl_union" href="unionuint16___bit_type_def.html">uint16_BitTypeDef</a>;</div>
</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
<div class="foldopen" id="foldopen00080" data-start="{" data-end="};">
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"><a class="line" href="unionuint32___bit_type_def.html"> 80</a></span><span class="keyword">typedef</span> <span class="keyword">union</span></div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span>{</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> uint32_t all;</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">struct</span></div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> {</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">unsigned</span> bit0:1; <span class="keywordtype">unsigned</span> bit1:1; <span class="keywordtype">unsigned</span> bit2:1; <span class="keywordtype">unsigned</span> bit3:1;</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">unsigned</span> bit4:1; <span class="keywordtype">unsigned</span> bit5:1; <span class="keywordtype">unsigned</span> bit6:1; <span class="keywordtype">unsigned</span> bit7:1;</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">unsigned</span> bit8:1; <span class="keywordtype">unsigned</span> bit9:1; <span class="keywordtype">unsigned</span> bit10:1; <span class="keywordtype">unsigned</span> bit11:1;</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="keywordtype">unsigned</span> bit12:1; <span class="keywordtype">unsigned</span> bit13:1; <span class="keywordtype">unsigned</span> bit14:1; <span class="keywordtype">unsigned</span> bit15:1;</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="keywordtype">unsigned</span> bit16:1; <span class="keywordtype">unsigned</span> bit17:1; <span class="keywordtype">unsigned</span> bit18:1; <span class="keywordtype">unsigned</span> bit19:1;</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">unsigned</span> bit20:1; <span class="keywordtype">unsigned</span> bit21:1; <span class="keywordtype">unsigned</span> bit22:1; <span class="keywordtype">unsigned</span> bit23:1;</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keywordtype">unsigned</span> bit24:1; <span class="keywordtype">unsigned</span> bit25:1; <span class="keywordtype">unsigned</span> bit26:1; <span class="keywordtype">unsigned</span> bit27:1;</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keywordtype">unsigned</span> bit28:1; <span class="keywordtype">unsigned</span> bit29:1; <span class="keywordtype">unsigned</span> bit30:1; <span class="keywordtype">unsigned</span> bit31:1;</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> }bit;</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span>}<a class="code hl_union" href="unionuint32___bit_type_def.html">uint32_BitTypeDef</a>;</div>
</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> </div>
<div class="foldopen" id="foldopen00097" data-start="{" data-end="};">
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"><a class="line" href="unionuint64___bit_type_def.html"> 97</a></span><span class="keyword">typedef</span> <span class="keyword">union</span></div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span>{</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> uint64_t all;</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keyword">struct</span></div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> {</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keywordtype">unsigned</span> bit0:1; <span class="keywordtype">unsigned</span> bit1:1; <span class="keywordtype">unsigned</span> bit2:1; <span class="keywordtype">unsigned</span> bit3:1;</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keywordtype">unsigned</span> bit4:1; <span class="keywordtype">unsigned</span> bit5:1; <span class="keywordtype">unsigned</span> bit6:1; <span class="keywordtype">unsigned</span> bit7:1;</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordtype">unsigned</span> bit8:1; <span class="keywordtype">unsigned</span> bit9:1; <span class="keywordtype">unsigned</span> bit10:1; <span class="keywordtype">unsigned</span> bit11:1;</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keywordtype">unsigned</span> bit12:1; <span class="keywordtype">unsigned</span> bit13:1; <span class="keywordtype">unsigned</span> bit14:1; <span class="keywordtype">unsigned</span> bit15:1;</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordtype">unsigned</span> bit16:1; <span class="keywordtype">unsigned</span> bit17:1; <span class="keywordtype">unsigned</span> bit18:1; <span class="keywordtype">unsigned</span> bit19:1;</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keywordtype">unsigned</span> bit20:1; <span class="keywordtype">unsigned</span> bit21:1; <span class="keywordtype">unsigned</span> bit22:1; <span class="keywordtype">unsigned</span> bit23:1;</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">unsigned</span> bit24:1; <span class="keywordtype">unsigned</span> bit25:1; <span class="keywordtype">unsigned</span> bit26:1; <span class="keywordtype">unsigned</span> bit27:1;</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keywordtype">unsigned</span> bit28:1; <span class="keywordtype">unsigned</span> bit29:1; <span class="keywordtype">unsigned</span> bit30:1; <span class="keywordtype">unsigned</span> bit31:1;</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordtype">unsigned</span> bit32:1; <span class="keywordtype">unsigned</span> bit33:1; <span class="keywordtype">unsigned</span> bit34:1; <span class="keywordtype">unsigned</span> bit35:1;</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">unsigned</span> bit36:1; <span class="keywordtype">unsigned</span> bit37:1; <span class="keywordtype">unsigned</span> bit38:1; <span class="keywordtype">unsigned</span> bit39:1;</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">unsigned</span> bit40:1; <span class="keywordtype">unsigned</span> bit41:1; <span class="keywordtype">unsigned</span> bit42:1; <span class="keywordtype">unsigned</span> bit43:1;</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordtype">unsigned</span> bit44:1; <span class="keywordtype">unsigned</span> bit45:1; <span class="keywordtype">unsigned</span> bit46:1; <span class="keywordtype">unsigned</span> bit47:1;</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keywordtype">unsigned</span> bit48:1; <span class="keywordtype">unsigned</span> bit49:1; <span class="keywordtype">unsigned</span> bit50:1; <span class="keywordtype">unsigned</span> bit51:1;</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keywordtype">unsigned</span> bit52:1; <span class="keywordtype">unsigned</span> bit53:1; <span class="keywordtype">unsigned</span> bit54:1; <span class="keywordtype">unsigned</span> bit55:1;</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordtype">unsigned</span> bit56:1; <span class="keywordtype">unsigned</span> bit57:1; <span class="keywordtype">unsigned</span> bit58:1; <span class="keywordtype">unsigned</span> bit59:1;</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">unsigned</span> bit60:1; <span class="keywordtype">unsigned</span> bit61:1; <span class="keywordtype">unsigned</span> bit62:1; <span class="keywordtype">unsigned</span> bit63:1;</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> }bit;</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span>}<a class="code hl_union" href="unionuint64___bit_type_def.html">uint64_BitTypeDef</a>;</div>
</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> </div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="comment"></span> </div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="comment">/**</span></div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="comment"> * @brief Получить n-й бит из uint8_t</span></div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span><span class="comment"> * @param _uint8_ Переменная типа uint8_t</span></div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span><span class="comment"> * @param _bit_ Константный номер бита (0..7)</span></div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span><span class="comment"> * @return Значение выбранного бита (0 или 1)</span></div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span><span class="comment"> * @note Индекс бита должен быть известен на этапе компиляции!</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"><a class="line" href="group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#ga57dc3bb3472a66fc92312f89d42d2396"> 129</a></span><span class="preprocessor">#define uint8_bit(_uint8_, _bit_) (*(uint8_BitTypeDef *)(&amp;(_uint8_))).bit.bit##_bit_</span><span class="comment"></span></div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span><span class="comment">/**</span></div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span><span class="comment"> * @brief Получить n-й бит из uint16_t</span></div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span><span class="comment"> * @param _uint16_ Переменная типа uint16_t</span></div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span><span class="comment"> * @param _bit_ Константный номер бита (0..15)</span></div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span><span class="comment"> * @return Значение выбранного бита (0 или 1)</span></div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span><span class="comment"> * @note Индекс бита должен быть известен на этапе компиляции!</span></div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span><span class="comment"> */</span><span class="preprocessor"></span></div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"><a class="line" href="group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#ga6a122b536ad99ae611c8cf01437af086"> 137</a></span><span class="preprocessor">#define uint16_bit(_uint8_, _bit_) (*(uint16_BitTypeDef *)(&amp;(_uint8_))).bit.bit##_bit_</span><span class="comment"></span></div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span><span class="comment">/**</span></div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span><span class="comment"> * @brief Получить n-й бит из uint32_t</span></div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span><span class="comment"> * @param _uint32_ Переменная типа uint32_t</span></div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span><span class="comment"> * @param _bit_ Константный номер бита (0..31)</span></div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span><span class="comment"> * @return Значение выбранного бита (0 или 1)</span></div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span><span class="comment"> * @note Индекс бита должен быть известен на этапе компиляции!</span></div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span><span class="comment"> */</span><span class="preprocessor"></span></div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"><a class="line" href="group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#gafaa2080168b1b6f7281e8bfabab022d1"> 145</a></span><span class="preprocessor">#define uint32_bit(_uint8_, _bit_) (*(uint32_BitTypeDef *)(&amp;(_uint8_))).bit.bit##_bit_</span><span class="comment"></span></div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span><span class="comment">/**</span></div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span><span class="comment"> * @brief Получить n-й бит из uint64_t</span></div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span><span class="comment"> * @param _uint64_ Переменная типа uint64_t</span></div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span><span class="comment"> * @param _bit_ Константный номер бита (0..63)</span></div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="comment"> * @return Значение выбранного бита (0 или 1)</span></div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span><span class="comment"> * @note Индекс бита должен быть известен на этапе компиляции!</span></div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span><span class="comment"> */</span><span class="preprocessor"></span></div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"><a class="line" href="group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#ga47eb69ce9330a1c73fe8031240f02f0a"> 153</a></span><span class="preprocessor">#define uint64_bit(_uint8_, _bit_) (*(uint64_BitTypeDef *)(&amp;(_uint8_))).bit.bit##_bit_</span></div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> </div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span><span class="preprocessor">#endif </span><span class="comment">//__BIT_ACCESS_H_ </span></div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span><span class="comment"></span> </div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span><span class="comment">/** BIT_ACCESS_DEFINES</span></div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span><span class="comment"> * @}</span></div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span><span class="comment"> */</span></div>
<div class="ttc" id="amylibs__defs_8h_html"><div class="ttname"><a href="mylibs__defs_8h.html">mylibs_defs.h</a></div><div class="ttdoc">Заголочный файл для дефайнов библиотеки MyLibsGeneral.</div></div>
<div class="ttc" id="aunionuint16___bit_type_def_html"><div class="ttname"><a href="unionuint16___bit_type_def.html">uint16_BitTypeDef</a></div><div class="ttdef"><b>Definition</b> <a href="#l00055">bit_access.h:56</a></div></div>
<div class="ttc" id="aunionuint32___bit_type_def_html"><div class="ttname"><a href="unionuint32___bit_type_def.html">uint32_BitTypeDef</a></div><div class="ttdef"><b>Definition</b> <a href="#l00080">bit_access.h:81</a></div></div>
<div class="ttc" id="aunionuint64___bit_type_def_html"><div class="ttname"><a href="unionuint64___bit_type_def.html">uint64_BitTypeDef</a></div><div class="ttdef"><b>Definition</b> <a href="#l00097">bit_access.h:98</a></div></div>
<div class="ttc" id="aunionuint8___bit_type_def_html"><div class="ttname"><a href="unionuint8___bit_type_def.html">uint8_BitTypeDef</a></div><div class="ttdef"><b>Definition</b> <a href="#l00039">bit_access.h:40</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_9e11e9a41112194af3eee6cc728f9515.html">MyLibsGeneral</a></li><li class="navelem"><a href="dir_eb423fea8a9c4b9b32b922020ec391e1.html">Inc</a></li><li class="navelem"><b>bit_access.h</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.14.0 </li>
</ul>
</div>
</body>
</html>

140
Doc/html/classes.html Normal file
View File

@ -0,0 +1,140 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: Class Index</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('classes.html','',''); });
</script>
<div id="container">
<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">Class Index</div></div>
</div><!--header-->
<div class="contents">
<div class="qindex"><a class="qindex" href="#letter_A">A</a>&#160;|&#160;<a class="qindex" href="#letter_G">G</a>&#160;|&#160;<a class="qindex" href="#letter_H">H</a>&#160;|&#160;<a class="qindex" href="#letter_M">M</a>&#160;|&#160;<a class="qindex" href="#letter_R">R</a>&#160;|&#160;<a class="qindex" href="#letter_S">S</a>&#160;|&#160;<a class="qindex" href="#letter_T">T</a>&#160;|&#160;<a class="qindex" href="#letter_U">U</a></div>
<div class="classindex">
<dl class="classindex even">
<dt class="alphachar"><a id="letter_A" name="letter_A">A</a></dt>
<dd><a class="el" href="struct_a_d_c___tracker_type_def.html">ADC_TrackerTypeDef</a></dd><dd><a class="el" href="struct_a_d_c_channel___tracker_type_def.html">ADCChannel_TrackerTypeDef</a></dd></dl>
<dl class="classindex odd">
<dt class="alphachar"><a id="letter_G" name="letter_G">G</a></dt>
<dd><a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a></dd><dd><a class="el" href="struct_g_p_i_o___switch_type_def.html">GPIO_SwitchTypeDef</a></dd></dl>
<dl class="classindex even">
<dt class="alphachar"><a id="letter_H" name="letter_H">H</a></dt>
<dd><a class="el" href="struct_h_f___stack_frame__t.html">HF_StackFrame_t</a></dd></dl>
<dl class="classindex odd">
<dt class="alphachar"><a id="letter_M" name="letter_M">M</a></dt>
<dd><a class="el" href="struct_measure___tracker_type_def.html">Measure_TrackerTypeDef</a></dd><dd><a class="el" href="struct_measure_handle___tracker_type_def.html">MeasureHandle_TrackerTypeDef</a></dd><dd><a class="el" href="struct_m_z_k_t___discrete_inputs_type_def.html">MZKT_DiscreteInputsTypeDef</a></dd><dd><a class="el" href="struct_m_z_k_t___l_e_ds_type_def.html">MZKT_LEDsTypeDef</a></dd></dl>
<dl class="classindex even">
<dt class="alphachar"><a id="letter_R" name="letter_R">R</a></dt>
<dd><a class="el" href="struct_r_s___tracker_type_def.html">RS_TrackerTypeDef</a></dd><dd><a class="el" href="struct_r_t_t___flash_header__t.html">RTT_FlashHeader_t</a></dd></dl>
<dl class="classindex odd">
<dt class="alphachar"><a id="letter_S" name="letter_S">S</a></dt>
<dd><a class="el" href="struct_s_p_i___settings_type_def.html">SPI_SettingsTypeDef</a></dd></dl>
<dl class="classindex even">
<dt class="alphachar"><a id="letter_T" name="letter_T">T</a></dt>
<dd><a class="el" href="struct_t_i_m___encoder_type_def.html">TIM_EncoderTypeDef</a></dd><dd><a class="el" href="struct_t_i_m___settings_type_def.html">TIM_SettingsTypeDef</a></dd></dl>
<dl class="classindex odd">
<dt class="alphachar"><a id="letter_U" name="letter_U">U</a></dt>
<dd><a class="el" href="struct_u_a_r_t___settings_type_def.html">UART_SettingsTypeDef</a></dd><dd><a class="el" href="unionuint16___bit_type_def.html">uint16_BitTypeDef</a></dd><dd><a class="el" href="unionuint32___bit_type_def.html">uint32_BitTypeDef</a></dd><dd><a class="el" href="unionuint64___bit_type_def.html">uint64_BitTypeDef</a></dd><dd><a class="el" href="unionuint8___bit_type_def.html">uint8_BitTypeDef</a></dd></dl>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

61
Doc/html/clipboard.js Normal file
View File

@ -0,0 +1,61 @@
/**
The code below is based on the Doxygen Awesome project, see
https://github.com/jothepro/doxygen-awesome-css
MIT License
Copyright (c) 2021 - 2022 jothepro
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
let clipboard_title = "Copy to clipboard"
let clipboard_icon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path fill="#888" d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/></svg>`
let clipboard_successIcon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z"/></svg>`
let clipboard_successDuration = 1000
$(function() {
if(navigator.clipboard) {
const fragments = document.getElementsByClassName("fragment")
for(const fragment of fragments) {
const clipboard_div = document.createElement("div")
clipboard_div.classList.add("clipboard")
clipboard_div.innerHTML = clipboard_icon
clipboard_div.title = clipboard_title
$(clipboard_div).click(function() {
const content = this.parentNode.cloneNode(true)
// filter out line number and folded fragments from file listings
content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() })
let text = content.textContent
// remove trailing newlines and trailing spaces from empty lines
text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'')
navigator.clipboard.writeText(text);
this.classList.add("success")
this.innerHTML = clipboard_successIcon
window.setTimeout(() => { // switch back to normal icon after timeout
this.classList.remove("success")
this.innerHTML = clipboard_icon
}, clipboard_successDuration);
})
fragment.insertBefore(clipboard_div, fragment.firstChild)
}
}
})

58
Doc/html/cookie.js Normal file
View File

@ -0,0 +1,58 @@
/*!
Cookie helper functions
Copyright (c) 2023 Dimitri van Heesch
Released under MIT license.
*/
let Cookie = {
cookie_namespace: 'doxygen_',
readSetting(cookie,defVal) {
if (window.chrome) {
const val = localStorage.getItem(this.cookie_namespace+cookie) ||
sessionStorage.getItem(this.cookie_namespace+cookie);
if (val) return val;
} else {
let myCookie = this.cookie_namespace+cookie+"=";
if (document.cookie) {
const index = document.cookie.indexOf(myCookie);
if (index != -1) {
const valStart = index + myCookie.length;
let valEnd = document.cookie.indexOf(";", valStart);
if (valEnd == -1) {
valEnd = document.cookie.length;
}
return document.cookie.substring(valStart, valEnd);
}
}
}
return defVal;
},
writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete
if (window.chrome) {
if (days==0) {
sessionStorage.setItem(this.cookie_namespace+cookie,val);
} else {
localStorage.setItem(this.cookie_namespace+cookie,val);
}
} else {
let date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
const expiration = days!=0 ? "expires="+date.toGMTString()+";" : "";
document.cookie = this.cookie_namespace + cookie + "=" +
val + "; SameSite=Lax;" + expiration + "path=/";
}
},
eraseSetting(cookie) {
if (window.chrome) {
if (localStorage.getItem(this.cookie_namespace+cookie)) {
localStorage.removeItem(this.cookie_namespace+cookie);
} else if (sessionStorage.getItem(this.cookie_namespace+cookie)) {
sessionStorage.removeItem(this.cookie_namespace+cookie);
}
} else {
this.writeSetting(cookie,'',-1);
}
},
}

228
Doc/html/darkmode_toggle.js Normal file
View File

@ -0,0 +1,228 @@
/**
The code below is based on the Doxygen Awesome project with some minor modifications
https://github.com/jothepro/doxygen-awesome-css
MIT License
Copyright (c) 2021 - 2022 jothepro
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
class DarkModeToggle extends HTMLElement {
static darkmode_cookie_name = ''+'prefers-dark';
static lightmode_cookie_name = ''+'prefers-light';
static icon = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" height="1em" width="1em"><g fill="none" fill-rule="evenodd"><path d="M0 0h24v24H0z"></path><rect width="1" height="3" x="12" fill="currentColor" rx=".5"></rect><rect width="1" height="3" x="12" y="21" fill="currentColor" rx=".5"></rect><rect width="1" height="3" x="22" y="10.5" fill="currentColor" rx=".5" transform="rotate(90 22.5 12)"></rect><rect width="1" height="3" x="1" y="10.5" fill="currentColor" rx=".5" transform="rotate(90 1.5 12)"></rect><rect width="1" height="3" x="19" y="3" fill="currentColor" rx=".5" transform="rotate(-135 19.5 4.5)"></rect><rect width="1" height="3" x="19" y="18" fill="currentColor" rx=".5" transform="rotate(135 19.5 19.5)"></rect><rect width="1" height="3" x="4" y="3" fill="currentColor" rx=".5" transform="scale(1 -1) rotate(45 15.37 0)"></rect><rect width="1" height="3" x="4" y="18" fill="currentColor" rx=".5" transform="scale(1 -1) rotate(-45 -42.57 0)"></rect><circle cx="12" cy="12" r="6.5" stroke="currentColor"></circle><path fill="currentColor" stroke="currentColor" d="M12.5 18.48V5.52a6.5 6.5 0 010 12.96z"></path></g></svg>';
static title = "Toggle Light/Dark Mode"
static prefersLightModeInDarkModeKey = "prefers-light-mode-in-dark-mode"
static prefersDarkModeInLightModeKey = "prefers-dark-mode-in-light-mode"
static _staticConstructor = function() {
DarkModeToggle.enableDarkMode(DarkModeToggle.userPreference)
// Update the color scheme when the browsers preference changes
// without user interaction on the website.
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => {
DarkModeToggle.onSystemPreferenceChanged()
})
// Update the color scheme when the tab is made visible again.
// It is possible that the appearance was changed in another tab
// while this tab was in the background.
document.addEventListener("visibilitychange", visibilityState => {
if (document.visibilityState === 'visible') {
DarkModeToggle.onSystemPreferenceChanged()
}
});
}()
static init() {
$(function() {
$(document).ready(function() {
const toggleButton = document.createElement('dark-mode-toggle')
toggleButton.title = DarkModeToggle.title
toggleButton.innerHTML = DarkModeToggle.icon
toggleButton.tabIndex = 0;
function addButton() {
const titleArea = document.getElementById("titlearea");
const searchBox = document.getElementById("MSearchBox");
const mainMenu = document.getElementById("main-menu");
const navRow1 = document.getElementById("navrow1");
let mainMenuVisible = false;
if (mainMenu) {
const menuStyle = window.getComputedStyle(mainMenu);
mainMenuVisible = menuStyle.display!=='none'
}
const searchBoxPos1 = document.getElementById("searchBoxPos1");
const buttonLi = document.getElementById('toggle-dark-mode');
if (buttonLi) {
buttonLi.parentNode.removeChild(buttonLi);
}
if (searchBox) { // (1) search box visible
searchBox.parentNode.appendChild(toggleButton)
} else if (navRow1) { // (2) no search box, static menu bar
const li = document.createElement('li');
li.id = 'toggle-dark-mode';
li.style = 'float: right;'
li.appendChild(toggleButton);
toggleButton.style = 'width: 24px; height: 25px; padding-top: 11px; float: right;';
const row = document.querySelector('#navrow1 > ul:first-of-type');
row.appendChild(li)
} else if (mainMenu && mainMenuVisible) { // (3) no search box + dynamic menu bar expanded
const li = document.createElement('li');
li.id = 'toggle-dark-mode';
li.style = 'float: right;'
li.appendChild(toggleButton);
toggleButton.style = 'width: 14px; height: 36px; padding-top: 10px; float: right;';
mainMenu.appendChild(li)
} else if (searchBoxPos1) { // (4) no search box + dynamic menu bar collapsed
toggleButton.style = 'width: 24px; height: 36px; padding-top: 10px; float: right;';
searchBoxPos1.style = 'top: 0px;'
searchBoxPos1.appendChild(toggleButton);
} else if (titleArea) { // (5) no search box and no navigation tabs
toggleButton.style = 'width: 24px; height: 24px; position: absolute; right: 0px; top: 34px;';
titleArea.append(toggleButton);
}
}
$(document).ready(() => addButton());
$(window).resize(() => addButton());
let inFocus = false;
$(document).focusin(() => inFocus = true);
$(document).focusout(() => inFocus = false);
$(document).keyup(function(e) {
if (e.keyCode==27 && !inFocus) { // escape key maps to keycode `27`
e.stopPropagation();
DarkModeToggle.userPreference = !DarkModeToggle.userPreference
}
})
DarkModeToggle.setDarkModeVisibility(DarkModeToggle.darkModeEnabled)
})
})
}
constructor() {
super();
this.onclick=this.toggleDarkMode
this.onkeypress=function(e){if (e.keyCode==13) { this.toggleDarkMode(); }};
}
/**
* @returns `true` for dark-mode, `false` for light-mode system preference
*/
static get systemPreference() {
return window.matchMedia('(prefers-color-scheme: dark)').matches
}
static get prefersDarkModeInLightMode() {
return Cookie.readSetting(DarkModeToggle.darkmode_cookie_name,'0')=='1';
}
static set prefersDarkModeInLightMode(preference) {
if (preference) {
Cookie.writeSetting(DarkModeToggle.darkmode_cookie_name,'1');
} else {
Cookie.eraseSetting(DarkModeToggle.darkmode_cookie_name);
}
}
static get prefersLightModeInDarkMode() {
return Cookie.readSetting(DarkModeToggle.lightmode_cookie_name,'0')=='1'
}
static set prefersLightModeInDarkMode(preference) {
if (preference) {
Cookie.writeSetting(DarkModeToggle.lightmode_cookie_name,'1');
} else {
Cookie.eraseSetting(DarkModeToggle.lightmode_cookie_name);
}
}
/**
* @returns `true` for dark-mode, `false` for light-mode user preference
*/
static get userPreference() {
return (!DarkModeToggle.systemPreference && DarkModeToggle.prefersDarkModeInLightMode) ||
(DarkModeToggle.systemPreference && !DarkModeToggle.prefersLightModeInDarkMode)
}
static set userPreference(userPreference) {
DarkModeToggle.darkModeEnabled = userPreference
if (!userPreference) {
if (DarkModeToggle.systemPreference) {
DarkModeToggle.prefersLightModeInDarkMode = true
} else {
DarkModeToggle.prefersDarkModeInLightMode = false
}
} else {
if (!DarkModeToggle.systemPreference) {
DarkModeToggle.prefersDarkModeInLightMode = true
} else {
DarkModeToggle.prefersLightModeInDarkMode = false
}
}
DarkModeToggle.onUserPreferenceChanged()
}
static setDarkModeVisibility(enable) {
let darkModeStyle, lightModeStyle;
if(enable) {
darkModeStyle = 'inline-block';
lightModeStyle = 'none'
} else {
darkModeStyle = 'none';
lightModeStyle = 'inline-block'
}
document.querySelectorAll('.dark-mode-visible' ).forEach(el => el.style.display = darkModeStyle);
document.querySelectorAll('.light-mode-visible').forEach(el => el.style.display = lightModeStyle);
}
static enableDarkMode(enable) {
if(enable) {
DarkModeToggle.darkModeEnabled = true
document.documentElement.classList.add("dark-mode")
document.documentElement.classList.remove("light-mode")
} else {
DarkModeToggle.darkModeEnabled = false
document.documentElement.classList.remove("dark-mode")
document.documentElement.classList.add("light-mode")
}
DarkModeToggle.setDarkModeVisibility(enable)
}
static onSystemPreferenceChanged() {
DarkModeToggle.darkModeEnabled = DarkModeToggle.userPreference
DarkModeToggle.enableDarkMode(DarkModeToggle.darkModeEnabled)
}
static onUserPreferenceChanged() {
DarkModeToggle.enableDarkMode(DarkModeToggle.darkModeEnabled)
}
toggleDarkMode() {
DarkModeToggle.userPreference = !DarkModeToggle.userPreference
}
}
customElements.define("dark-mode-toggle", DarkModeToggle);
DarkModeToggle.init();

View File

@ -0,0 +1,131 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Src Directory Reference</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('dir_9c80311a018e1f8cfb6659b73d634be4.html','',''); });
</script>
<div id="container">
<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">Src Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-files" class="groupheader"><a id="files" name="files"></a>
Files</h2></td></tr>
<tr class="memitem:_5F_5Fgeneral_5Fflash_2Ec" id="r__5F_5Fgeneral_5Fflash_2Ec"><td class="memItemLeft" align="right" valign="top"><a href="____general__flash_8c_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>__general_flash.c</b></td></tr>
<tr class="memitem:_5F_5Fgeneral_5Fspi_2Ec" id="r__5F_5Fgeneral_5Fspi_2Ec"><td class="memItemLeft" align="right" valign="top"><a href="____general__spi_8c_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>__general_spi.c</b></td></tr>
<tr class="memitem:_5F_5Fgeneral_5Ftim_2Ec" id="r__5F_5Fgeneral_5Ftim_2Ec"><td class="memItemLeft" align="right" valign="top"><a href="____general__tim_8c_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>__general_tim.c</b></td></tr>
<tr class="memitem:_5F_5Fgeneral_5Fuart_2Ec" id="r__5F_5Fgeneral_5Fuart_2Ec"><td class="memItemLeft" align="right" valign="top"><a href="____general__uart_8c_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>__general_uart.c</b></td></tr>
<tr class="memitem:general_5Fgpio_2Ec" id="r_general_5Fgpio_2Ec"><td class="memItemLeft" align="right" valign="top"><a href="general__gpio_8c_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="general__gpio_8c.html">general_gpio.c</a></td></tr>
<tr class="memdesc:general__gpio_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Модуль для инициализации портов. <br /></td></tr>
</table>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_9e11e9a41112194af3eee6cc728f9515.html">MyLibsGeneral</a></li><li class="navelem"><a href="dir_9c80311a018e1f8cfb6659b73d634be4.html">Src</a></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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,8 @@
var dir_9c80311a018e1f8cfb6659b73d634be4 =
[
[ "__general_flash.c", "____general__flash_8c_source.html", null ],
[ "__general_spi.c", "____general__spi_8c_source.html", null ],
[ "__general_tim.c", "____general__tim_8c_source.html", null ],
[ "__general_uart.c", "____general__uart_8c_source.html", null ],
[ "general_gpio.c", "general__gpio_8c.html", "general__gpio_8c" ]
];

View File

@ -0,0 +1,127 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral Directory Reference</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('dir_9e11e9a41112194af3eee6cc728f9515.html','',''); });
</script>
<div id="container">
<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">MyLibsGeneral Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-subdirs" class="groupheader"><a id="subdirs" name="subdirs"></a>
Directories</h2></td></tr>
<tr class="memitem:Inc" id="r_Inc"><td class="memItemLeft" align="right" valign="top"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_eb423fea8a9c4b9b32b922020ec391e1.html">Inc</a></td></tr>
<tr class="memitem:Src" id="r_Src"><td class="memItemLeft" align="right" valign="top"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_9c80311a018e1f8cfb6659b73d634be4.html">Src</a></td></tr>
</table>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_9e11e9a41112194af3eee6cc728f9515.html">MyLibsGeneral</a></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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,5 @@
var dir_9e11e9a41112194af3eee6cc728f9515 =
[
[ "Inc", "dir_eb423fea8a9c4b9b32b922020ec391e1.html", "dir_eb423fea8a9c4b9b32b922020ec391e1" ],
[ "Src", "dir_9c80311a018e1f8cfb6659b73d634be4.html", "dir_9c80311a018e1f8cfb6659b73d634be4" ]
];

View File

@ -0,0 +1,142 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Inc Directory Reference</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('dir_eb423fea8a9c4b9b32b922020ec391e1.html','',''); });
</script>
<div id="container">
<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">Inc Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-files" class="groupheader"><a id="files" name="files"></a>
Files</h2></td></tr>
<tr class="memitem:_5F_5Fgeneral_5Fflash_2Eh" id="r__5F_5Fgeneral_5Fflash_2Eh"><td class="memItemLeft" align="right" valign="top"><a href="____general__flash_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>__general_flash.h</b></td></tr>
<tr class="memitem:_5F_5Fgeneral_5Fspi_2Eh" id="r__5F_5Fgeneral_5Fspi_2Eh"><td class="memItemLeft" align="right" valign="top"><a href="____general__spi_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>__general_spi.h</b></td></tr>
<tr class="memitem:_5F_5Fgeneral_5Ftim_2Eh" id="r__5F_5Fgeneral_5Ftim_2Eh"><td class="memItemLeft" align="right" valign="top"><a href="____general__tim_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>__general_tim.h</b></td></tr>
<tr class="memitem:_5F_5Fgeneral_5Fuart_2Eh" id="r__5F_5Fgeneral_5Fuart_2Eh"><td class="memItemLeft" align="right" valign="top"><a href="____general__uart_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>__general_uart.h</b></td></tr>
<tr class="memitem:bit_5Faccess_2Eh" id="r_bit_5Faccess_2Eh"><td class="memItemLeft" align="right" valign="top"><a href="bit__access_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>bit_access.h</b></td></tr>
<tr class="memitem:general_5Fgpio_2Eh" id="r_general_5Fgpio_2Eh"><td class="memItemLeft" align="right" valign="top"><a href="general__gpio_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="general__gpio_8h.html">general_gpio.h</a></td></tr>
<tr class="memdesc:general__gpio_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Заголовочный файл для модуля инициализации портов. <br /></td></tr>
<tr class="memitem:mylibs_5Fconfig_2Eh" id="r_mylibs_5Fconfig_2Eh"><td class="memItemLeft" align="right" valign="top"><a href="mylibs__config_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mylibs__config_8h.html">mylibs_config.h</a></td></tr>
<tr class="memdesc:mylibs__config_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Конфигурации для библиотек MyLibs. <br /></td></tr>
<tr class="memitem:mylibs_5Fdefs_2Eh" id="r_mylibs_5Fdefs_2Eh"><td class="memItemLeft" align="right" valign="top"><a href="mylibs__defs_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mylibs__defs_8h.html">mylibs_defs.h</a></td></tr>
<tr class="memdesc:mylibs__defs_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Заголочный файл для дефайнов библиотеки MyLibsGeneral. <br /></td></tr>
<tr class="memitem:mylibs_5Finclude_2Eh" id="r_mylibs_5Finclude_2Eh"><td class="memItemLeft" align="right" valign="top"><a href="mylibs__include_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mylibs__include_8h.html">mylibs_include.h</a></td></tr>
<tr class="memdesc:mylibs__include_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Заголочный файл для всех библиотек <br /></td></tr>
<tr class="memitem:trace_2Eh" id="r_trace_2Eh"><td class="memItemLeft" align="right" valign="top"><a href="trace_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="trace_8h.html">trace.h</a></td></tr>
<tr class="memdesc:trace_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Заголочный файл для работы с трассировкой. <br /></td></tr>
<tr class="memitem:trackers_2Eh" id="r_trackers_2Eh"><td class="memItemLeft" align="right" valign="top"><a href="trackers_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="trackers_8h.html">trackers.h</a></td></tr>
<tr class="memdesc:trackers_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Заголочный файл для работы с трекерами <a class="el" href="group___t_r_a_c_k_e_r_s.html">Trackers defines</a>. <br /></td></tr>
</table>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_9e11e9a41112194af3eee6cc728f9515.html">MyLibsGeneral</a></li><li class="navelem"><a href="dir_eb423fea8a9c4b9b32b922020ec391e1.html">Inc</a></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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,14 @@
var dir_eb423fea8a9c4b9b32b922020ec391e1 =
[
[ "__general_flash.h", "____general__flash_8h_source.html", null ],
[ "__general_spi.h", "____general__spi_8h_source.html", null ],
[ "__general_tim.h", "____general__tim_8h_source.html", null ],
[ "__general_uart.h", "____general__uart_8h_source.html", null ],
[ "bit_access.h", "bit__access_8h_source.html", null ],
[ "general_gpio.h", "general__gpio_8h.html", "general__gpio_8h" ],
[ "mylibs_config.h", "mylibs__config_8h.html", "mylibs__config_8h" ],
[ "mylibs_defs.h", "mylibs__defs_8h.html", "mylibs__defs_8h" ],
[ "mylibs_include.h", "mylibs__include_8h.html", "mylibs__include_8h" ],
[ "trace.h", "trace_8h.html", "trace_8h" ],
[ "trackers.h", "trackers_8h.html", "trackers_8h" ]
];

2459
Doc/html/doxygen.css Normal file

File diff suppressed because it is too large Load Diff

28
Doc/html/doxygen.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

222
Doc/html/doxygen_crawl.html Normal file
View File

@ -0,0 +1,222 @@
<!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>
<title>Validator / crawler helper</title>
<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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
</head>
<body>
<a href="____general__flash_8c_source.html"/>
<a href="____general__flash_8h_source.html"/>
<a href="____general__spi_8c_source.html"/>
<a href="____general__spi_8h_source.html"/>
<a href="____general__tim_8c_source.html"/>
<a href="____general__tim_8h_source.html"/>
<a href="____general__uart_8c_source.html"/>
<a href="____general__uart_8h_source.html"/>
<a href="annotated.html"/>
<a href="bit__access_8h_source.html"/>
<a href="classes.html"/>
<a href="dir_9c80311a018e1f8cfb6659b73d634be4.html"/>
<a href="dir_9e11e9a41112194af3eee6cc728f9515.html"/>
<a href="dir_eb423fea8a9c4b9b32b922020ec391e1.html"/>
<a href="doxygen_crawl.html"/>
<a href="files.html"/>
<a href="functions.html"/>
<a href="functions_vars.html"/>
<a href="general__gpio_8c.html"/>
<a href="general__gpio_8c_source.html"/>
<a href="general__gpio_8h.html"/>
<a href="general__gpio_8h_source.html"/>
<a href="globals.html"/>
<a href="globals_defs.html"/>
<a href="globals_enum.html"/>
<a href="globals_eval.html"/>
<a href="globals_func.html"/>
<a href="group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html"/>
<a href="group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#ga47eb69ce9330a1c73fe8031240f02f0a"/>
<a href="group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#ga57dc3bb3472a66fc92312f89d42d2396"/>
<a href="group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#ga6a122b536ad99ae611c8cf01437af086"/>
<a href="group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#gafaa2080168b1b6f7281e8bfabab022d1"/>
<a href="group___d_e_l_a_y_s___d_e_f_i_n_e_s.html"/>
<a href="group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga0b97e172659a59ee4fa56f851643ae85"/>
<a href="group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga8a5051b1292d1019fe8dd3fc5521ab25"/>
<a href="group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gabeb97579daeb622c6651ed03c4a27479"/>
<a href="group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gaed082c07b9fc4d1894330d885b9b5518"/>
<a href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html"/>
<a href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga002f4a5f5d8bb37d88f607386bc6ba2e"/>
<a href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga0b75f0bcf066acdf797b8e6730c52f86"/>
<a href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga944edcd2c65519578d36730b94701f64"/>
<a href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gade91c09d89a5f69003dcfe506ed0327f"/>
<a href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gae110df81afd885a390bbeb152d7b709f"/>
<a href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gae7d1cbb9075ee4b830342fd564d96be0"/>
<a href="group___g_p_i_o___g_e_n_e_r_a_l.html"/>
<a href="group___g_p_i_o___g_e_n_e_r_a_l.html#ga34242874b455a72aa6e25841678ed105"/>
<a href="group___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6"/>
<a href="group___g_p_i_o___i_n_i_t.html"/>
<a href="group___g_p_i_o___i_n_i_t.html#ga19d9e3aced311179a2914e0c9b13d0f9"/>
<a href="group___g_p_i_o___i_n_i_t.html#ga1d42e219765ec526d99e306638ac0023"/>
<a href="group___g_p_i_o___i_n_i_t.html#ga80700bb63bd56ebabbb4728aa433fd29"/>
<a href="group___g_p_i_o___i_n_i_t.html#gacd8900c9ec0efde1da3253b718574067"/>
<a href="group___g_p_i_o___i_n_i_t.html#gaf2e697ac60e05813d45ea2c9c9e79c25"/>
<a href="group___g_p_i_o___l_e_d_s.html"/>
<a href="group___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c"/>
<a href="group___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a"/>
<a href="group___g_p_i_o___l_e_d_s.html#gaac2b90d8b8c9579b6aa5d3bbda9b1ff1"/>
<a href="group___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357"/>
<a href="group___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084"/>
<a href="group___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2"/>
<a href="group___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2"/>
<a href="group___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9"/>
<a href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a2445895bed5dcbedc82ea3ef02bec6fb"/>
<a href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a74276cd2464314e422e8a144483f74ae"/>
<a href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1aa610f6df44c939aa7d45e318036fa03b"/>
<a href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1af6abfb9c5b95abbdb239590f2cd245ea"/>
<a href="group___g_p_i_o___s_w_i_t_c_h.html"/>
<a href="group___g_p_i_o___s_w_i_t_c_h.html#ga4b6b8be19a9265bfee6b2bb8a68e988f"/>
<a href="group___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7"/>
<a href="group___l_i_b_s___c_o_n_f_i_g.html"/>
<a href="group___l_i_b_s___c_o_n_f_i_g.html#ga0a3ca94b616997069dd53e2c6c2687d7"/>
<a href="group___l_i_b_s___c_o_n_f_i_g.html#ga181a46326e46b60afb160190832c7281"/>
<a href="group___l_i_b_s___c_o_n_f_i_g.html#ga4403055986b70bb02b8d37073a122e32"/>
<a href="group___l_i_b_s___c_o_n_f_i_g.html#gaf4ddb2a71ec0d05c2480e197cd17c0be"/>
<a href="group___m_y___l_i_b_s___g_p_i_o.html"/>
<a href="group___m_y_l_i_b_s___a_l_l.html"/>
<a href="group___m_y_l_i_b_s___c_o_n_f_i_g.html"/>
<a href="group___m_y_l_i_b_s___d_e_f_i_n_e_s.html"/>
<a href="group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.html"/>
<a href="group___t_r_a_c_e.html"/>
<a href="group___t_r_a_c_e___c_o_n_f_i_g.html"/>
<a href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga00ff2175bdc1fb11c8ec970ea3010dd8"/>
<a href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga0b87e0d3bf5853bcbb0b66a7c48fdc05"/>
<a href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga0c602733a4a359bf8c095d71cd4d0f63"/>
<a href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga3bc1b76864e1d32cbdd174d4caae7724"/>
<a href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga4222e0e400ad81737cefcabeb03fd23b"/>
<a href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga47f454f804b4dbc26cae079e8d8641e6"/>
<a href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga501312b24e322de4dd6755ad442f0ba3"/>
<a href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga76936505ca200d2e61226b7ba68f27c6"/>
<a href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga8e56f75d3ab8a89ddde1404ae23c3297"/>
<a href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga92d0d14732edb7dfa21d483304bdb051"/>
<a href="group___t_r_a_c_e___c_o_n_f_i_g.html#gaa31234688b333a505aaa57b8ecdedf5b"/>
<a href="group___t_r_a_c_e___c_o_n_f_i_g.html#gab8db9704b5d11858aa879689b9d36336"/>
<a href="group___t_r_a_c_e___c_o_n_f_i_g.html#gac9eaedc31ab023ce7d6403999216e496"/>
<a href="group___t_r_a_c_e___c_o_n_f_i_g.html#gadc960255719c7eff4bdfaa850be9b313"/>
<a href="group___t_r_a_c_e___c_o_n_f_i_g.html#gafcc7ea03d4df8f1909e580b519a7f3ca"/>
<a href="group___t_r_a_c_e___c_o_n_f_i_g.html#gafeca0be3688dea07ff443f894668003d"/>
<a href="group___t_r_a_c_e___g_p_i_o.html"/>
<a href="group___t_r_a_c_e___g_p_i_o.html#ga02a6a7b273766121db8ad4a1371373eb"/>
<a href="group___t_r_a_c_e___g_p_i_o.html#ga69741d88c991112e99fe7a62e025108a"/>
<a href="group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html"/>
<a href="group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html#ga03f8b6f3b537ee1c8e91065c60db504f"/>
<a href="group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html#gadd8e10e7ec3b0204f7f92062ecd452f7"/>
<a href="group___t_r_a_c_e___r_t_t___f_l_a_s_h.html"/>
<a href="group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga21353cb4f5af666237739e62ce019cd6"/>
<a href="group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga734b2ebbf0c77699b739013878cfd146"/>
<a href="group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga79f222c8ab644de4d47f07528d1edd63"/>
<a href="group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga8d8c6850e32b42871faefce3352012d1"/>
<a href="group___t_r_a_c_e___s_e_r_i_a_l.html"/>
<a href="group___t_r_a_c_e___s_e_r_i_a_l.html#ga730fb7b8d0bbb348dca73c15bd0e0b26"/>
<a href="group___t_r_a_c_e___s_e_r_i_a_l.html#gae9b9b8a611e291a2f2aa5abf99f3ebaa"/>
<a href="group___t_r_a_c_k_e_r_s.html"/>
<a href="group___t_r_a_c_k_e_r_s.html#ga063dab1067005e1600ea32531fdf3f8d"/>
<a href="group___t_r_a_c_k_e_r_s.html#ga1b7549afc4a1760b54a9b93b0f6d105e"/>
<a href="group___t_r_a_c_k_e_r_s.html#ga23de0006aa08984cfeddb6aa5e512fa1"/>
<a href="group___t_r_a_c_k_e_r_s.html#ga365a8c60bd13b75154feda649dd21ead"/>
<a href="group___t_r_a_c_k_e_r_s.html#ga39b6ffbc561f8caac276415e1ad32c30"/>
<a href="group___t_r_a_c_k_e_r_s.html#ga47ac59a406ee74d4cd9fe0fbaf63a758"/>
<a href="group___t_r_a_c_k_e_r_s.html#ga49af29ab3927cad105c1d2b018a767e9"/>
<a href="group___t_r_a_c_k_e_r_s.html#ga4b08632669043dfdbd219dda03502bdb"/>
<a href="group___t_r_a_c_k_e_r_s.html#ga50ccb119acf302969b7fdcb58f2130e4"/>
<a href="group___t_r_a_c_k_e_r_s.html#ga5dd8bac8c7ab5832019d55d7a68371b9"/>
<a href="group___t_r_a_c_k_e_r_s.html#ga704f7b9f8c65c9bcec48ce7cb77a2d3b"/>
<a href="group___t_r_a_c_k_e_r_s.html#ga72be24629fedb8bf70e830373d151fbc"/>
<a href="group___t_r_a_c_k_e_r_s.html#ga8017fb05a56a1b667244f1f786fa9c57"/>
<a href="group___t_r_a_c_k_e_r_s.html#ga9dc91e6b798a081f95f2ccef2c288e5e"/>
<a href="group___t_r_a_c_k_e_r_s.html#gaaec7ec19977bb26fa1919dfe920b82d5"/>
<a href="group___t_r_a_c_k_e_r_s.html#gab880911066605602a966641682090169"/>
<a href="group___t_r_a_c_k_e_r_s.html#gad2f4062a9ac8c2ab062a364f640ebc51"/>
<a href="group___t_r_a_c_k_e_r_s.html#gad91d8ca89074270fc040c0449e57cf07"/>
<a href="group___t_r_a_c_k_e_r_s.html#gadd7fd2c6e3a4800f1d5ddab35fd4b43e"/>
<a href="group___t_r_a_c_k_e_r_s.html#gae860b6947c6e317e14d40bd7b4b8eb74"/>
<a href="group___u_t_i_l_s___d_e_f_i_n_e_s.html"/>
<a href="group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga0f22e895ac7781c3d1b68fee182c4291"/>
<a href="group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga996f7be338ccb40d1a2a5abc1ad61759"/>
<a href="group___u_t_i_l_s___d_e_f_i_n_e_s.html#gabf45f2b60eedf80cf9d1dbe4302a741e"/>
<a href="group___u_t_i_l_s___d_e_f_i_n_e_s.html#gaf5e598848326d48e86167e5099a029be"/>
<a href="index.html"/>
<a href="mylibs__config_8h.html"/>
<a href="mylibs__config_8h_source.html"/>
<a href="mylibs__defs_8h.html"/>
<a href="mylibs__defs_8h_source.html"/>
<a href="mylibs__include_8h.html"/>
<a href="mylibs__include_8h_source.html"/>
<a href="struct_a_d_c___tracker_type_def-members.html"/>
<a href="struct_a_d_c___tracker_type_def.html"/>
<a href="struct_a_d_c_channel___tracker_type_def-members.html"/>
<a href="struct_a_d_c_channel___tracker_type_def.html"/>
<a href="struct_g_p_i_o___l_e_d_type_def-members.html"/>
<a href="struct_g_p_i_o___l_e_d_type_def.html"/>
<a href="struct_g_p_i_o___l_e_d_type_def.html#a684ff60e4c94daf2221524cdc6fcc978"/>
<a href="struct_g_p_i_o___l_e_d_type_def.html#a6cc026931a4681732f9a329ae03098ec"/>
<a href="struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf"/>
<a href="struct_g_p_i_o___l_e_d_type_def.html#a8c43c12787f4a89f4a785f91a979ba68"/>
<a href="struct_g_p_i_o___l_e_d_type_def.html#abe9aadc0b28d042267f7155e187a1816"/>
<a href="struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435"/>
<a href="struct_g_p_i_o___switch_type_def-members.html"/>
<a href="struct_g_p_i_o___switch_type_def.html"/>
<a href="struct_g_p_i_o___switch_type_def.html#a13f97b867ff1a77ef182c9b13d964ca6"/>
<a href="struct_g_p_i_o___switch_type_def.html#a245f1dc811279ce5d4598582db979a89"/>
<a href="struct_g_p_i_o___switch_type_def.html#a2600e599a961af2e280c721894df4c06"/>
<a href="struct_g_p_i_o___switch_type_def.html#a4fadf5ead3ebccad521a52c064eeb405"/>
<a href="struct_g_p_i_o___switch_type_def.html#a63d58d9cba49a5823175585ef2996032"/>
<a href="struct_g_p_i_o___switch_type_def.html#afb369df75a6065fd89ac4ba97d98ab1a"/>
<a href="struct_h_f___stack_frame__t-members.html"/>
<a href="struct_h_f___stack_frame__t.html"/>
<a href="struct_h_f___stack_frame__t.html#a16563896004751c90e41c81ae4570732"/>
<a href="struct_h_f___stack_frame__t.html#a286104d19185714940645a9df814ddea"/>
<a href="struct_h_f___stack_frame__t.html#a4146ed28926b5f234132b7112119a413"/>
<a href="struct_h_f___stack_frame__t.html#a453c7af42b6928a693af422e17c981d3"/>
<a href="struct_h_f___stack_frame__t.html#a5a52e5006dabcf68c0fa4cfb0e03335b"/>
<a href="struct_h_f___stack_frame__t.html#a6e51904297f7725e96d5b5fb291ef577"/>
<a href="struct_h_f___stack_frame__t.html#a819ee3bc518c460ece1b7c4079f8f80b"/>
<a href="struct_h_f___stack_frame__t.html#ae47cb051ee3c94471bfd4fe7e49c55f9"/>
<a href="struct_m_z_k_t___discrete_inputs_type_def-members.html"/>
<a href="struct_m_z_k_t___discrete_inputs_type_def.html"/>
<a href="struct_m_z_k_t___l_e_ds_type_def-members.html"/>
<a href="struct_m_z_k_t___l_e_ds_type_def.html"/>
<a href="struct_measure___tracker_type_def-members.html"/>
<a href="struct_measure___tracker_type_def.html"/>
<a href="struct_measure_handle___tracker_type_def-members.html"/>
<a href="struct_measure_handle___tracker_type_def.html"/>
<a href="struct_r_s___tracker_type_def-members.html"/>
<a href="struct_r_s___tracker_type_def.html"/>
<a href="struct_r_t_t___flash_header__t-members.html"/>
<a href="struct_r_t_t___flash_header__t.html"/>
<a href="struct_r_t_t___flash_header__t.html#a844ee5470a323a749856cbb7a682dc57"/>
<a href="struct_r_t_t___flash_header__t.html#ae7276198385c8d6f6508f433d042d52a"/>
<a href="struct_r_t_t___flash_header__t.html#afd1a5c51af6f97d170c2ccbbe3e34699"/>
<a href="struct_s_p_i___settings_type_def-members.html"/>
<a href="struct_s_p_i___settings_type_def.html"/>
<a href="struct_t_i_m___encoder_type_def-members.html"/>
<a href="struct_t_i_m___encoder_type_def.html"/>
<a href="struct_t_i_m___settings_type_def-members.html"/>
<a href="struct_t_i_m___settings_type_def.html"/>
<a href="struct_u_a_r_t___settings_type_def-members.html"/>
<a href="struct_u_a_r_t___settings_type_def.html"/>
<a href="topics.html"/>
<a href="trace_8h.html"/>
<a href="trace_8h_source.html"/>
<a href="trackers_8h.html"/>
<a href="trackers_8h_source.html"/>
<a href="unionuint16___bit_type_def-members.html"/>
<a href="unionuint16___bit_type_def.html"/>
<a href="unionuint32___bit_type_def-members.html"/>
<a href="unionuint32___bit_type_def.html"/>
<a href="unionuint64___bit_type_def-members.html"/>
<a href="unionuint64___bit_type_def.html"/>
<a href="unionuint8___bit_type_def-members.html"/>
<a href="unionuint8___bit_type_def.html"/>
</body>
</html>

198
Doc/html/dynsections.js Normal file
View File

@ -0,0 +1,198 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@licend The above is the entire license notice for the JavaScript code in this file
*/
function toggleVisibility(linkObj) {
return dynsection.toggleVisibility(linkObj);
}
let dynsection = {
// helper function
updateStripes : function() {
$('table.directory tr').
removeClass('even').filter(':visible:even').addClass('even');
$('table.directory tr').
removeClass('odd').filter(':visible:odd').addClass('odd');
},
toggleVisibility : function(linkObj) {
const base = $(linkObj).attr('id');
const summary = $('#'+base+'-summary');
const content = $('#'+base+'-content');
const trigger = $('#'+base+'-trigger');
const src=$(trigger).attr('src');
if (content.is(':visible')===true) {
content.slideUp('fast');
summary.show();
$(linkObj).find('.arrowhead').addClass('closed').removeClass('opened');
} else {
content.slideDown('fast');
summary.hide();
$(linkObj).find('.arrowhead').removeClass('closed').addClass('opened');
}
return false;
},
toggleLevel : function(level) {
$('table.directory tr').each(function() {
const l = this.id.split('_').length-1;
const i = $('#img'+this.id.substring(3));
const a = $('#arr'+this.id.substring(3));
if (l<level+1) {
i.find('.folder-icon').addClass('open');
a.find('.arrowhead').removeClass('closed').addClass('opened');
$(this).show();
} else if (l==level+1) {
a.find('.arrowhead').removeClass('opened').addClass('closed');
i.find('.folder-icon').removeClass('open');
$(this).show();
} else {
$(this).hide();
}
});
this.updateStripes();
},
toggleFolder : function(id) {
// the clicked row
const currentRow = $('#row_'+id);
// all rows after the clicked row
const rows = currentRow.nextAll("tr");
const re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
// only match elements AFTER this one (can't hide elements before)
const childRows = rows.filter(function() { return this.id.match(re); });
// first row is visible we are HIDING
if (childRows.filter(':first').is(':visible')===true) {
// replace down arrow by right arrow for current row
const currentRowSpans = currentRow.find("span");
currentRowSpans.filter(".iconfolder").find('.folder-icon').removeClass("open");
currentRowSpans.filter(".opened").removeClass("opened").addClass("closed");
rows.filter("[id^=row_"+id+"]").hide(); // hide all children
} else { // we are SHOWING
// replace right arrow by down arrow for current row
const currentRowSpans = currentRow.find("span");
currentRowSpans.filter(".iconfolder").find('.folder-icon').addClass("open");
currentRowSpans.filter(".closed").removeClass("closed").addClass("opened");
// replace down arrows by right arrows for child rows
const childRowsSpans = childRows.find("span");
childRowsSpans.filter(".iconfolder").find('.folder-icon').removeClass("open");
childRowsSpans.filter(".opened").removeClass("opened").addClass("closed");
childRows.show(); //show all children
}
this.updateStripes();
},
toggleInherit : function(id) {
let rows = $('tr.inherit.'+id);
let header = $('tr.inherit_header.'+id);
if (rows.filter(':first').is(':visible')===true) {
rows.hide();
$(header).find('.arrowhead').addClass('closed').removeClass('opened');
} else {
rows.show();
$(header).find('.arrowhead').removeClass('closed').addClass('opened');
}
},
};
let codefold = {
opened : true,
// toggle all folding blocks
toggle_all : function() {
if (this.opened) {
$('#fold_all').addClass('plus').removeClass('minus');
$('div[id^=foldopen]').hide();
$('div[id^=foldclosed]').show();
$('div[id^=foldclosed] span.fold').removeClass('minus').addClass('plus');
} else {
$('#fold_all').addClass('minus').removeClass('plus');
$('div[id^=foldopen]').show();
$('div[id^=foldclosed]').hide();
}
this.opened=!this.opened;
},
// toggle single folding block
toggle : function(id) {
$('#foldopen'+id).toggle();
$('#foldclosed'+id).toggle();
$('#foldopen'+id).next().find('span.fold').addClass('plus').removeClass('minus');
},
init : function() {
$('span[class=lineno]').css({
'padding-right':'4px',
'margin-right':'2px',
'display':'inline-block',
'width':'54px',
'background':'linear-gradient(var(--fold-line-color),var(--fold-line-color)) no-repeat 46px/2px 100%'
});
// add global toggle to first line
$('span[class=lineno]:first').append('<span class="fold minus" id="fold_all" '+
'onclick="javascript:codefold.toggle_all();"></span>');
// add vertical lines to other rows
$('span[class=lineno]').not(':eq(0)').append('<span class="fold"></span>');
// add toggle controls to lines with fold divs
$('div[class=foldopen]').each(function() {
// extract specific id to use
const id = $(this).attr('id').replace('foldopen','');
// extract start and end foldable fragment attributes
const start = $(this).attr('data-start');
const end = $(this).attr('data-end');
// replace normal fold span with controls for the first line of a foldable fragment
$(this).find('span[class=fold]:first').replaceWith('<span class="fold minus" '+
'onclick="javascript:codefold.toggle(\''+id+'\');"></span>');
// append div for folded (closed) representation
$(this).after('<div id="foldclosed'+id+'" class="foldclosed" style="display:none;"></div>');
// extract the first line from the "open" section to represent closed content
const line = $(this).children().first().clone();
// remove any glow that might still be active on the original line
$(line).removeClass('glow');
if (start) {
// if line already ends with a start marker (e.g. trailing {), remove it
$(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),''));
}
// replace minus with plus symbol
$(line).find('span[class=fold]').addClass('plus').removeClass('minus');
// append ellipsis
$(line).append(' '+start+'<a href="javascript:codefold.toggle(\''+id+'\')">&#8230;</a>'+end);
// insert constructed line into closed div
$('#foldclosed'+id).html(line);
});
},
};
/* @license-end */
$(function() {
$('.code,.codeRef').each(function() {
$(this).data('powertip',$('#a'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html());
$.fn.powerTip.smartPlacementLists.s = [ 's', 'n', 'ne', 'se' ];
$(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true });
});
});

136
Doc/html/files.html Normal file
View File

@ -0,0 +1,136 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: File List</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('files.html','',''); });
</script>
<div id="container">
<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">File List</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory">
<div class="levels">[detail level <span onclick="javascript:dynsection.toggleLevel(1);">1</span><span onclick="javascript:dynsection.toggleLevel(2);">2</span><span onclick="javascript:dynsection.toggleLevel(3);">3</span>]</div><table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="dynsection.toggleFolder('0_')"><span class="arrowhead opened"></span></span><span id="img_0_" class="iconfolder" onclick="dynsection.toggleFolder('0_')"><div class="folder-icon open"></div></span><a class="el" href="dir_9e11e9a41112194af3eee6cc728f9515.html" target="_self">MyLibsGeneral</a></td><td class="desc"></td></tr>
<tr id="row_0_0_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_0_" class="arrow" onclick="dynsection.toggleFolder('0_0_')"><span class="arrowhead opened"></span></span><span id="img_0_0_" class="iconfolder" onclick="dynsection.toggleFolder('0_0_')"><div class="folder-icon open"></div></span><a class="el" href="dir_eb423fea8a9c4b9b32b922020ec391e1.html" target="_self">Inc</a></td><td class="desc"></td></tr>
<tr id="row_0_0_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="____general__flash_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a><b>__general_flash.h</b></td><td class="desc"></td></tr>
<tr id="row_0_0_1_" class="odd"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="____general__spi_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a><b>__general_spi.h</b></td><td class="desc"></td></tr>
<tr id="row_0_0_2_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="____general__tim_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a><b>__general_tim.h</b></td><td class="desc"></td></tr>
<tr id="row_0_0_3_" class="odd"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="____general__uart_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a><b>__general_uart.h</b></td><td class="desc"></td></tr>
<tr id="row_0_0_4_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="bit__access_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a><b>bit_access.h</b></td><td class="desc"></td></tr>
<tr id="row_0_0_5_" class="odd"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="general__gpio_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a><a class="el" href="general__gpio_8h.html" target="_self">general_gpio.h</a></td><td class="desc">Заголовочный файл для модуля инициализации портов </td></tr>
<tr id="row_0_0_6_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="mylibs__config_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a><a class="el" href="mylibs__config_8h.html" target="_self">mylibs_config.h</a></td><td class="desc">Конфигурации для библиотек MyLibs </td></tr>
<tr id="row_0_0_7_" class="odd"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="mylibs__defs_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a><a class="el" href="mylibs__defs_8h.html" target="_self">mylibs_defs.h</a></td><td class="desc">Заголочный файл для дефайнов библиотеки MyLibsGeneral </td></tr>
<tr id="row_0_0_8_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="mylibs__include_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a><a class="el" href="mylibs__include_8h.html" target="_self">mylibs_include.h</a></td><td class="desc">Заголочный файл для всех библиотек </td></tr>
<tr id="row_0_0_9_" class="odd"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="trace_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a><a class="el" href="trace_8h.html" target="_self">trace.h</a></td><td class="desc">Заголочный файл для работы с трассировкой </td></tr>
<tr id="row_0_0_10_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="trackers_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a><a class="el" href="trackers_8h.html" target="_self">trackers.h</a></td><td class="desc">Заголочный файл для работы с трекерами <a class="el" href="group___t_r_a_c_k_e_r_s.html">Trackers defines</a> </td></tr>
<tr id="row_0_1_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_1_" class="arrow" onclick="dynsection.toggleFolder('0_1_')"><span class="arrowhead opened"></span></span><span id="img_0_1_" class="iconfolder" onclick="dynsection.toggleFolder('0_1_')"><div class="folder-icon open"></div></span><a class="el" href="dir_9c80311a018e1f8cfb6659b73d634be4.html" target="_self">Src</a></td><td class="desc"></td></tr>
<tr id="row_0_1_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="____general__flash_8c_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a><b>__general_flash.c</b></td><td class="desc"></td></tr>
<tr id="row_0_1_1_" class="odd"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="____general__spi_8c_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a><b>__general_spi.c</b></td><td class="desc"></td></tr>
<tr id="row_0_1_2_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="____general__tim_8c_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a><b>__general_tim.c</b></td><td class="desc"></td></tr>
<tr id="row_0_1_3_" class="odd"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="____general__uart_8c_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a><b>__general_uart.c</b></td><td class="desc"></td></tr>
<tr id="row_0_1_4_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="general__gpio_8c_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a><a class="el" href="general__gpio_8c.html" target="_self">general_gpio.c</a></td><td class="desc">Модуль для инициализации портов </td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

4
Doc/html/files_dup.js Normal file
View File

@ -0,0 +1,4 @@
var files_dup =
[
[ "MyLibsGeneral", "dir_9e11e9a41112194af3eee6cc728f9515.html", "dir_9e11e9a41112194af3eee6cc728f9515" ]
];

134
Doc/html/functions.html Normal file
View File

@ -0,0 +1,134 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: Class Members</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('functions.html','',''); });
</script>
<div id="container">
<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="contents">
<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div><ul>
<li>data&#160;:&#160;<a class="el" href="struct_r_t_t___flash_header__t.html#ae7276198385c8d6f6508f433d042d52a">RTT_FlashHeader_t</a></li>
<li>LED_ActiveLvl&#160;:&#160;<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html#abe9aadc0b28d042267f7155e187a1816">GPIO_LEDTypeDef</a></li>
<li>LED_Period&#160;:&#160;<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html#a6cc026931a4681732f9a329ae03098ec">GPIO_LEDTypeDef</a></li>
<li>LED_Pin&#160;:&#160;<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html#a684ff60e4c94daf2221524cdc6fcc978">GPIO_LEDTypeDef</a></li>
<li>LED_Port&#160;:&#160;<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf">GPIO_LEDTypeDef</a></li>
<li>lr&#160;:&#160;<a class="el" href="struct_h_f___stack_frame__t.html#a6e51904297f7725e96d5b5fb291ef577">HF_StackFrame_t</a></li>
<li>pc&#160;:&#160;<a class="el" href="struct_h_f___stack_frame__t.html#a16563896004751c90e41c81ae4570732">HF_StackFrame_t</a></li>
<li>psr&#160;:&#160;<a class="el" href="struct_h_f___stack_frame__t.html#ae47cb051ee3c94471bfd4fe7e49c55f9">HF_StackFrame_t</a></li>
<li>r0&#160;:&#160;<a class="el" href="struct_h_f___stack_frame__t.html#a4146ed28926b5f234132b7112119a413">HF_StackFrame_t</a></li>
<li>r1&#160;:&#160;<a class="el" href="struct_h_f___stack_frame__t.html#a286104d19185714940645a9df814ddea">HF_StackFrame_t</a></li>
<li>r12&#160;:&#160;<a class="el" href="struct_h_f___stack_frame__t.html#a819ee3bc518c460ece1b7c4079f8f80b">HF_StackFrame_t</a></li>
<li>r2&#160;:&#160;<a class="el" href="struct_h_f___stack_frame__t.html#a5a52e5006dabcf68c0fa4cfb0e03335b">HF_StackFrame_t</a></li>
<li>r3&#160;:&#160;<a class="el" href="struct_h_f___stack_frame__t.html#a453c7af42b6928a693af422e17c981d3">HF_StackFrame_t</a></li>
<li>size&#160;:&#160;<a class="el" href="struct_r_t_t___flash_header__t.html#afd1a5c51af6f97d170c2ccbbe3e34699">RTT_FlashHeader_t</a></li>
<li>state&#160;:&#160;<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435">GPIO_LEDTypeDef</a></li>
<li>Sw_ActiveLvl&#160;:&#160;<a class="el" href="struct_g_p_i_o___switch_type_def.html#a4fadf5ead3ebccad521a52c064eeb405">GPIO_SwitchTypeDef</a></li>
<li>Sw_FilterDelay&#160;:&#160;<a class="el" href="struct_g_p_i_o___switch_type_def.html#a2600e599a961af2e280c721894df4c06">GPIO_SwitchTypeDef</a></li>
<li>Sw_Pin&#160;:&#160;<a class="el" href="struct_g_p_i_o___switch_type_def.html#a63d58d9cba49a5823175585ef2996032">GPIO_SwitchTypeDef</a></li>
<li>Sw_Port&#160;:&#160;<a class="el" href="struct_g_p_i_o___switch_type_def.html#afb369df75a6065fd89ac4ba97d98ab1a">GPIO_SwitchTypeDef</a></li>
<li>Sw_PrevState&#160;:&#160;<a class="el" href="struct_g_p_i_o___switch_type_def.html#a245f1dc811279ce5d4598582db979a89">GPIO_SwitchTypeDef</a></li>
<li>tag&#160;:&#160;<a class="el" href="struct_r_t_t___flash_header__t.html#a844ee5470a323a749856cbb7a682dc57">RTT_FlashHeader_t</a></li>
<li>tickprev&#160;:&#160;<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html#a8c43c12787f4a89f4a785f91a979ba68">GPIO_LEDTypeDef</a>, <a class="el" href="struct_g_p_i_o___switch_type_def.html#a13f97b867ff1a77ef182c9b13d964ca6">GPIO_SwitchTypeDef</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,134 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: Class Members - Variables</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('functions_vars.html','',''); });
</script>
<div id="container">
<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="contents">
<div class="textblock">Here is a list of all documented variables with links to the class documentation for each member:</div><ul>
<li>data&#160;:&#160;<a class="el" href="struct_r_t_t___flash_header__t.html#ae7276198385c8d6f6508f433d042d52a">RTT_FlashHeader_t</a></li>
<li>LED_ActiveLvl&#160;:&#160;<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html#abe9aadc0b28d042267f7155e187a1816">GPIO_LEDTypeDef</a></li>
<li>LED_Period&#160;:&#160;<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html#a6cc026931a4681732f9a329ae03098ec">GPIO_LEDTypeDef</a></li>
<li>LED_Pin&#160;:&#160;<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html#a684ff60e4c94daf2221524cdc6fcc978">GPIO_LEDTypeDef</a></li>
<li>LED_Port&#160;:&#160;<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf">GPIO_LEDTypeDef</a></li>
<li>lr&#160;:&#160;<a class="el" href="struct_h_f___stack_frame__t.html#a6e51904297f7725e96d5b5fb291ef577">HF_StackFrame_t</a></li>
<li>pc&#160;:&#160;<a class="el" href="struct_h_f___stack_frame__t.html#a16563896004751c90e41c81ae4570732">HF_StackFrame_t</a></li>
<li>psr&#160;:&#160;<a class="el" href="struct_h_f___stack_frame__t.html#ae47cb051ee3c94471bfd4fe7e49c55f9">HF_StackFrame_t</a></li>
<li>r0&#160;:&#160;<a class="el" href="struct_h_f___stack_frame__t.html#a4146ed28926b5f234132b7112119a413">HF_StackFrame_t</a></li>
<li>r1&#160;:&#160;<a class="el" href="struct_h_f___stack_frame__t.html#a286104d19185714940645a9df814ddea">HF_StackFrame_t</a></li>
<li>r12&#160;:&#160;<a class="el" href="struct_h_f___stack_frame__t.html#a819ee3bc518c460ece1b7c4079f8f80b">HF_StackFrame_t</a></li>
<li>r2&#160;:&#160;<a class="el" href="struct_h_f___stack_frame__t.html#a5a52e5006dabcf68c0fa4cfb0e03335b">HF_StackFrame_t</a></li>
<li>r3&#160;:&#160;<a class="el" href="struct_h_f___stack_frame__t.html#a453c7af42b6928a693af422e17c981d3">HF_StackFrame_t</a></li>
<li>size&#160;:&#160;<a class="el" href="struct_r_t_t___flash_header__t.html#afd1a5c51af6f97d170c2ccbbe3e34699">RTT_FlashHeader_t</a></li>
<li>state&#160;:&#160;<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435">GPIO_LEDTypeDef</a></li>
<li>Sw_ActiveLvl&#160;:&#160;<a class="el" href="struct_g_p_i_o___switch_type_def.html#a4fadf5ead3ebccad521a52c064eeb405">GPIO_SwitchTypeDef</a></li>
<li>Sw_FilterDelay&#160;:&#160;<a class="el" href="struct_g_p_i_o___switch_type_def.html#a2600e599a961af2e280c721894df4c06">GPIO_SwitchTypeDef</a></li>
<li>Sw_Pin&#160;:&#160;<a class="el" href="struct_g_p_i_o___switch_type_def.html#a63d58d9cba49a5823175585ef2996032">GPIO_SwitchTypeDef</a></li>
<li>Sw_Port&#160;:&#160;<a class="el" href="struct_g_p_i_o___switch_type_def.html#afb369df75a6065fd89ac4ba97d98ab1a">GPIO_SwitchTypeDef</a></li>
<li>Sw_PrevState&#160;:&#160;<a class="el" href="struct_g_p_i_o___switch_type_def.html#a245f1dc811279ce5d4598582db979a89">GPIO_SwitchTypeDef</a></li>
<li>tag&#160;:&#160;<a class="el" href="struct_r_t_t___flash_header__t.html#a844ee5470a323a749856cbb7a682dc57">RTT_FlashHeader_t</a></li>
<li>tickprev&#160;:&#160;<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html#a8c43c12787f4a89f4a785f91a979ba68">GPIO_LEDTypeDef</a>, <a class="el" href="struct_g_p_i_o___switch_type_def.html#a13f97b867ff1a77ef182c9b13d964ca6">GPIO_SwitchTypeDef</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,161 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Src/general_gpio.c File Reference</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('general__gpio_8c.html','',''); });
</script>
<div id="container">
<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_gpio.c File Reference</div></div>
</div><!--header-->
<div class="contents">
<p>Модуль для инициализации портов.
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &quot;<a class="el" href="general__gpio_8h_source.html">general_gpio.h</a>&quot;</code><br />
</div>
<p><a href="general__gpio_8c_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga962f010f783b81fcdd27eb6b53db28e6" id="r_ga962f010f783b81fcdd27eb6b53db28e6"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6">GPIO_Clock_Enable</a> (GPIO_TypeDef *GPIOx)</td></tr>
<tr class="memdesc:ga962f010f783b81fcdd27eb6b53db28e6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Включить тактирование порта GPIO. <br /></td></tr>
<tr class="memitem:gac936453c7a0841c0b17bcfdae4958084" id="r_gac936453c7a0841c0b17bcfdae4958084"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084">GPIO_LED_Init</a> (<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t LED_ActiveLevel)</td></tr>
<tr class="memdesc:gac936453c7a0841c0b17bcfdae4958084"><td class="mdescLeft">&#160;</td><td class="mdescRight">Инициализировать светодиод (структуру светодиода) <br /></td></tr>
<tr class="memitem:ga4b9572949326b050694cd55d0a7e5f6c" id="r_ga4b9572949326b050694cd55d0a7e5f6c"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c">GPIO_LED_On</a> (<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led)</td></tr>
<tr class="memdesc:ga4b9572949326b050694cd55d0a7e5f6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Включить светодиод <br /></td></tr>
<tr class="memitem:gaadda2d4f021390a4e392210a5ace5357" id="r_gaadda2d4f021390a4e392210a5ace5357"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357">GPIO_LED_Off</a> (<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led)</td></tr>
<tr class="memdesc:gaadda2d4f021390a4e392210a5ace5357"><td class="mdescLeft">&#160;</td><td class="mdescRight">Выключить светодиод <br /></td></tr>
<tr class="memitem:gae78b570447d55a462a679a89dbaa8ea2" id="r_gae78b570447d55a462a679a89dbaa8ea2"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2">GPIO_LED_Set</a> (<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led, uint8_t led_state)</td></tr>
<tr class="memdesc:gae78b570447d55a462a679a89dbaa8ea2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Выставить светодиод по переменной <br /></td></tr>
<tr class="memitem:gaf22f44ecaf6a1932b47edc5a845b03a9" id="r_gaf22f44ecaf6a1932b47edc5a845b03a9"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9">GPIO_LED_Blink_Start</a> (<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led, uint32_t period)</td></tr>
<tr class="memdesc:gaf22f44ecaf6a1932b47edc5a845b03a9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Активировать моргание светодиодом <br /></td></tr>
<tr class="memitem:gaa00f20021781464af3dfe74aa3e59a0a" id="r_gaa00f20021781464af3dfe74aa3e59a0a"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a">GPIO_LED_Fading_Start</a> (<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led, uint32_t period)</td></tr>
<tr class="memdesc:gaa00f20021781464af3dfe74aa3e59a0a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Активировать моргание светодиодом <br /></td></tr>
<tr class="memitem:gad6e6189824406c4d472b6340c7f19bb2" id="r_gad6e6189824406c4d472b6340c7f19bb2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2">GPIO_LED_Dynamic_Handle</a> (<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led)</td></tr>
<tr class="memdesc:gad6e6189824406c4d472b6340c7f19bb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Управление динамическими режимами свечения светодиода <br /></td></tr>
<tr class="memitem:gacafee0e68877f2b25df843356871d1f7" id="r_gacafee0e68877f2b25df843356871d1f7"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7">GPIO_Switch_Init</a> (<a class="el" href="struct_g_p_i_o___switch_type_def.html">GPIO_SwitchTypeDef</a> *sw, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t SW_ActiveLevel)</td></tr>
<tr class="memdesc:gacafee0e68877f2b25df843356871d1f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Инициализировать кнопку (структуру кнопки) <br /></td></tr>
<tr class="memitem:ga4b6b8be19a9265bfee6b2bb8a68e988f" id="r_ga4b6b8be19a9265bfee6b2bb8a68e988f"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___s_w_i_t_c_h.html#ga4b6b8be19a9265bfee6b2bb8a68e988f">GPIO_Read_Switch</a> (<a class="el" href="struct_g_p_i_o___switch_type_def.html">GPIO_SwitchTypeDef</a> *sw)</td></tr>
<tr class="memdesc:ga4b6b8be19a9265bfee6b2bb8a68e988f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Считать состоянии кнопки <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Модуль для инициализации портов. </p>
<p>Реализация функций для работы с GPIO:</p><ul>
<li>Включение тактирования портов</li>
<li>Инициализация светодиодов и кнопок</li>
<li>Управление светодиодами: включение, выключение, моргание, плавное затухание</li>
<li>Чтение состояния кнопок с фильтром от дребезга </li>
</ul>
<p class="definition">Definition in file <a class="el" href="general__gpio_8c_source.html">general_gpio.c</a>.</p>
</div></div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_9e11e9a41112194af3eee6cc728f9515.html">MyLibsGeneral</a></li><li class="navelem"><a href="dir_9c80311a018e1f8cfb6659b73d634be4.html">Src</a></li><li class="navelem"><a href="general__gpio_8c.html">general_gpio.c</a></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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,13 @@
var general__gpio_8c =
[
[ "GPIO_Clock_Enable", "group___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6", null ],
[ "GPIO_LED_Init", "group___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084", null ],
[ "GPIO_LED_On", "group___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c", null ],
[ "GPIO_LED_Off", "group___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357", null ],
[ "GPIO_LED_Set", "group___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2", null ],
[ "GPIO_LED_Blink_Start", "group___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9", null ],
[ "GPIO_LED_Fading_Start", "group___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a", null ],
[ "GPIO_LED_Dynamic_Handle", "group___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2", null ],
[ "GPIO_Switch_Init", "group___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7", null ],
[ "GPIO_Read_Switch", "group___g_p_i_o___s_w_i_t_c_h.html#ga4b6b8be19a9265bfee6b2bb8a68e988f", null ]
];

View File

@ -0,0 +1,489 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Src/general_gpio.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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('general__gpio_8c_source.html','',''); });
</script>
<div id="container">
<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_gpio.c</div></div>
</div><!--header-->
<div class="contents">
<a href="general__gpio_8c.html">Go to the documentation of this file.</a><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_gpio.c</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">* @brief Модуль для инициализации портов.</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 Реализация функций для работы с GPIO:</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">* - Управление светодиодами: включение, выключение, моргание, плавное затухание</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">***************************************************************************/</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</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="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">//-------------------------------------------------------------------</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment">//------------------------GPIO INIT FUNCTIONS------------------------</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</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="comment">/**</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment"> * @brief Включить тактирование порта GPIO</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00021" data-start="{" data-end="}">
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"><a class="line" href="group___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6"> 21</a></span>HAL_StatusTypeDef <a class="code hl_function" href="group___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6">GPIO_Clock_Enable</a>(GPIO_TypeDef *GPIOx)</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span>{ </div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> HAL_StatusTypeDef status = HAL_OK;</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <span class="comment">// choose port for enable clock</span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <span class="keywordflow">if</span> (GPIOx==GPIOA)</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> __HAL_RCC_GPIOA_CLK_ENABLE();</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (GPIOx==GPIOB)</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> __HAL_RCC_GPIOB_CLK_ENABLE();</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="preprocessor">#ifdef GPIOC</span></div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (GPIOx==GPIOC)</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> __HAL_RCC_GPIOC_CLK_ENABLE();</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="preprocessor">#ifdef GPIOD</span></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (GPIOx==GPIOD)</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> __HAL_RCC_GPIOD_CLK_ENABLE();</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="preprocessor">#ifdef GPIOE</span></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (GPIOx==GPIOE)</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> __HAL_RCC_GPIOE_CLK_ENABLE();</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="preprocessor">#ifdef GPIOF</span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (GPIOx==GPIOF)</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> __HAL_RCC_GPIOF_CLK_ENABLE();</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="preprocessor">#ifdef GPIOH</span></div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (GPIOx==GPIOF)</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> __HAL_RCC_GPIOH_CLK_ENABLE();</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> status = HAL_ERROR;</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">return</span> status;</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span>}</div>
</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="comment">//------------------------GPIO INIT FUNCTIONS------------------------</span></div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="comment">//-------------------------------------------------------------------</span></div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="comment">//-------------------------------------------------------------------</span></div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="comment">//------------------------GPIO LED FUNCTIONS-------------------------</span></div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment"></span> </div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment">/**</span></div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="comment"> * @brief Инициализировать светодиод (структуру светодиода)</span></div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="comment"> * @param led Указатель на структуру светодиода</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="comment"> * @param GPIOx Указатель на структуру порта для светодиода</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="comment"> * @param GPIO_PIN_X Пин для светодиода</span></div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="comment"> * @param LED_ActiveLevel Состояния пина, при котором светодиод будет включен</span></div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00069" data-start="{" data-end="}">
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"><a class="line" href="group___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084"> 69</a></span>HAL_StatusTypeDef <a class="code hl_function" href="group___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084">GPIO_LED_Init</a>(<a class="code hl_struct" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t LED_ActiveLevel)</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span>{</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">if</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#gae7d1cbb9075ee4b830342fd564d96be0">check_null_ptr_2</a>(led, GPIOx))</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf">LED_Port</a> = GPIOx;</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a684ff60e4c94daf2221524cdc6fcc978">LED_Pin</a> = GPIO_PIN_X;</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#abe9aadc0b28d042267f7155e187a1816">LED_ActiveLvl</a> = LED_ActiveLevel;</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> </div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <a class="code hl_function" href="group___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357">GPIO_LED_Off</a>(led);</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">return</span> HAL_OK;</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span>}</div>
</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="comment"></span> </div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="comment">/**</span></div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="comment"> * @brief Включить светодиод </span></div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="comment"> * @param led Указатель на структуру светодиода</span></div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="comment"> * @return HAL Status</span></div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00087" data-start="{" data-end="}">
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"><a class="line" href="group___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c"> 87</a></span>HAL_StatusTypeDef <a class="code hl_function" href="group___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c">GPIO_LED_On</a>(<a class="code hl_struct" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led)</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span>{</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">if</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#ga0b75f0bcf066acdf797b8e6730c52f86">check_null_ptr_1</a>(led))</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435">state</a> = <a class="code hl_enumvalue" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1af6abfb9c5b95abbdb239590f2cd245ea">LED_IS_ON</a>;</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">if</span>(led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf">LED_Port</a> != NULL)</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> HAL_GPIO_WritePin(led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf">LED_Port</a>, led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a684ff60e4c94daf2221524cdc6fcc978">LED_Pin</a>, led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#abe9aadc0b28d042267f7155e187a1816">LED_ActiveLvl</a>);</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> </div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">return</span> HAL_OK;</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span>}<span class="comment"></span></div>
</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="comment">/**</span></div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="comment"> * @brief Выключить светодиод </span></div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span><span class="comment"> * @param led Указатель на структуру светодиода</span></div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="comment"> * @return HAL Status</span></div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00105" data-start="{" data-end="}">
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"><a class="line" href="group___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357"> 105</a></span>HAL_StatusTypeDef <a class="code hl_function" href="group___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357">GPIO_LED_Off</a>(<a class="code hl_struct" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led)</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span>{</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">if</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#ga0b75f0bcf066acdf797b8e6730c52f86">check_null_ptr_1</a>(led))</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> </div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435">state</a> = <a class="code hl_enumvalue" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a74276cd2464314e422e8a144483f74ae">LED_IS_OFF</a>;</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">if</span>(led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf">LED_Port</a> != NULL)</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> HAL_GPIO_WritePin(led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf">LED_Port</a>, led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a684ff60e4c94daf2221524cdc6fcc978">LED_Pin</a>, !led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#abe9aadc0b28d042267f7155e187a1816">LED_ActiveLvl</a>);</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">return</span> HAL_OK;</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span>}<span class="comment"></span></div>
</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span><span class="comment">/**</span></div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span><span class="comment"> * @brief Выставить светодиод по переменной</span></div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="comment"> * @param led Указатель на структуру светодиода</span></div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="comment"> * @param led_state Состояние светодиода</span></div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="comment"> * @return HAL Status</span></div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00125" data-start="{" data-end="}">
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"><a class="line" href="group___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2"> 125</a></span>HAL_StatusTypeDef <a class="code hl_function" href="group___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2">GPIO_LED_Set</a>(<a class="code hl_struct" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led, uint8_t led_state)</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span>{</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">if</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#ga0b75f0bcf066acdf797b8e6730c52f86">check_null_ptr_1</a>(led))</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">if</span>(led_state)</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> {</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">return</span> <a class="code hl_function" href="group___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c">GPIO_LED_On</a>(led);</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> }</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> {</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">return</span> <a class="code hl_function" href="group___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357">GPIO_LED_Off</a>(led);</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> }</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span>}<span class="comment"></span></div>
</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span><span class="comment">/**</span></div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span><span class="comment"> * @brief Активировать моргание светодиодом</span></div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span><span class="comment"> * @param led Указатель на структуру светодиода</span></div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span><span class="comment"> * @param period Период плавного моргания светодиода</span></div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span><span class="comment"> * @return HAL Status</span></div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span><span class="comment"> * @details Функция ставит режим моргания, который после управляется в @ref GPIO_LED_Dynamic_Handle</span></div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00146" data-start="{" data-end="}">
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"><a class="line" href="group___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9"> 146</a></span>HAL_StatusTypeDef <a class="code hl_function" href="group___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9">GPIO_LED_Blink_Start</a>(<a class="code hl_struct" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led, uint32_t period)</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span>{</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">if</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#gae7d1cbb9075ee4b830342fd564d96be0">check_null_ptr_2</a>(led, led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf">LED_Port</a>))</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">return</span> HAL_ERROR; </div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435">state</a> = <a class="code hl_enumvalue" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a2445895bed5dcbedc82ea3ef02bec6fb">LED_IS_BLINKING</a>;</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a6cc026931a4681732f9a329ae03098ec">LED_Period</a> = period;</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">return</span> HAL_OK;</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span>}</div>
</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="comment"></span></div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span><span class="comment">/**</span></div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span><span class="comment"> * @brief Активировать моргание светодиодом</span></div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span><span class="comment"> * @param led Указатель на структуру светодиода</span></div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span><span class="comment"> * @param period Период плавного моргания светодиода</span></div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span><span class="comment"> * @return HAL Status</span></div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span><span class="comment"> * @details Функция ставит режим моргания, который после управляется в @ref GPIO_LED_Dynamic_Handle</span></div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00164" data-start="{" data-end="}">
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"><a class="line" href="group___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a"> 164</a></span>HAL_StatusTypeDef <a class="code hl_function" href="group___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a">GPIO_LED_Fading_Start</a>(<a class="code hl_struct" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led, uint32_t period)</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span>{</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">if</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#gae7d1cbb9075ee4b830342fd564d96be0">check_null_ptr_2</a>(led, led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf">LED_Port</a>))</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">return</span> HAL_ERROR; </div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435">state</a> = <a class="code hl_enumvalue" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1aa610f6df44c939aa7d45e318036fa03b">LED_IS_FADING</a>;</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a6cc026931a4681732f9a329ae03098ec">LED_Period</a> = period;</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> </div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">return</span> HAL_OK;</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span>}</div>
</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> </div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span><span class="comment">//uint8_t LED_PWM_FADING_DUTYS[LED_PWM_TICKS] = {0 1 2 3 4 5 6 7 8 9 10 11 12 }</span><span class="comment"></span></div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span><span class="comment">/**</span></div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span><span class="comment"> * @brief Управление динамическими режимами свечения светодиода</span></div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span><span class="comment"> * @param Указатель на структуру светодиода</span></div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span><span class="comment"> * @details Функция моргает/плавно моргает светодиодом в неблокирующем режиме</span></div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span><span class="comment"> * Т.е. функцию надо вызывать постоянно, чтобы она мониторила тики </span></div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span><span class="comment"> * и в нужный момент переключала светодиод</span></div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00184" data-start="{" data-end="}">
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"><a class="line" href="group___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2"> 184</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="group___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2">GPIO_LED_Dynamic_Handle</a>(<a class="code hl_struct" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led)</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span>{</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">if</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#gae7d1cbb9075ee4b830342fd564d96be0">check_null_ptr_2</a>(led, led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf">LED_Port</a>))</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="comment">/* Режим моргания светодиода */</span></div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">if</span>(led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435">state</a> == <a class="code hl_enumvalue" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a2445895bed5dcbedc82ea3ef02bec6fb">LED_IS_BLINKING</a>)</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> uint32_t tickcurrent = HAL_GetTick();</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="keywordflow">if</span>((tickcurrent - led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a8c43c12787f4a89f4a785f91a979ba68">tickprev</a>) &gt; led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a6cc026931a4681732f9a329ae03098ec">LED_Period</a>)</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> {</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="comment">/* Моргание */</span></div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> HAL_GPIO_TogglePin(led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf">LED_Port</a>, led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a684ff60e4c94daf2221524cdc6fcc978">LED_Pin</a>);</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> </div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a8c43c12787f4a89f4a785f91a979ba68">tickprev</a> = tickcurrent;</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> }</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="comment">/* Режим плавного моргания светодиода */</span></div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435">state</a> == <a class="code hl_enumvalue" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1aa610f6df44c939aa7d45e318036fa03b">LED_IS_FADING</a>)</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> {</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keyword">static</span> <span class="keywordtype">unsigned</span> direction = 0;</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keyword">static</span> <span class="keywordtype">int</span> duty = 0;</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> uint32_t tickcurrent = HAL_GetTick();</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="comment">/* Ожидание момента изменения яркости */</span></div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> <span class="comment">/* Период ШИМ 20 мс, поэтому менять яроксть надо 40 раз за период (туда обратно) */</span></div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">if</span>((tickcurrent - led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a8c43c12787f4a89f4a785f91a979ba68">tickprev</a>) &gt; led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a6cc026931a4681732f9a329ae03098ec">LED_Period</a>/(LED_PWM_TICKS*2))</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> {</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> <span class="comment">/* Формирование разтухания */</span></div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">if</span>(direction == 0)</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> {</div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="keywordflow">if</span>(++duty &gt;= LED_PWM_TICKS)</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> {</div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> direction = 1;</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> duty = LED_PWM_TICKS;</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> }</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> }</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="comment">/* Формирование затухания */</span></div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> {</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">if</span>(--duty &lt;= 0)</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> {</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> direction = 0;</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> duty = 0;</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> }</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> }</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a8c43c12787f4a89f4a785f91a979ba68">tickprev</a> = tickcurrent;</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="comment">/* Формирование ШИМ для изменения яркости */</span></div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="keywordtype">int</span> duty_crt = (duty*duty/LED_PWM_TICKS);</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">if</span>(tickcurrent%LED_PWM_TICKS &lt; duty_crt)</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> HAL_GPIO_WritePin(led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf">LED_Port</a>, led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a684ff60e4c94daf2221524cdc6fcc978">LED_Pin</a>, led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#abe9aadc0b28d042267f7155e187a1816">LED_ActiveLvl</a>);</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> }</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> {</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> HAL_GPIO_WritePin(led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf">LED_Port</a>, led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a684ff60e4c94daf2221524cdc6fcc978">LED_Pin</a>, !led-&gt;<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#abe9aadc0b28d042267f7155e187a1816">LED_ActiveLvl</a>);</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> }</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span>}</div>
</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span><span class="comment">//------------------------GPIO LED FUNCTIONS-------------------------</span></div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span><span class="comment">//-------------------------------------------------------------------</span></div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> </div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span><span class="comment">//-------------------------------------------------------------------</span></div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span><span class="comment">//------------------------GPIO SW FUNCTIONS-------------------------</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">/**</span></div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span><span class="comment">* @brief Инициализировать кнопку (структуру кнопки)</span></div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span><span class="comment"> * @param sw Указатель на структуру кнопки</span></div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span><span class="comment"> * @param GPIOx Указатель на структуру порта для кнопки</span></div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span><span class="comment"> * @param GPIO_PIN_X Пин для кнопки</span></div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span><span class="comment"> * @param SW_ActiveLevel Состояния пина, когда кнопка нажата</span></div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span><span class="comment"> * @return HAL Status</span></div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00258" data-start="{" data-end="}">
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"><a class="line" href="group___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7"> 258</a></span>HAL_StatusTypeDef <a class="code hl_function" href="group___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7">GPIO_Switch_Init</a>(<a class="code hl_struct" href="struct_g_p_i_o___switch_type_def.html">GPIO_SwitchTypeDef</a> *sw, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t SW_ActiveLevel)</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="keywordflow">if</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#gae7d1cbb9075ee4b830342fd564d96be0">check_null_ptr_2</a>(sw, GPIOx))</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">return</span> HAL_ERROR;</div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> </div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> sw-&gt;<a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#afb369df75a6065fd89ac4ba97d98ab1a">Sw_Port</a> = GPIOx;</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> sw-&gt;<a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#a63d58d9cba49a5823175585ef2996032">Sw_Pin</a> = GPIO_PIN_X;</div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> sw-&gt;<a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#a4fadf5ead3ebccad521a52c064eeb405">Sw_ActiveLvl</a> = SW_ActiveLevel;</div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">return</span> HAL_OK;</div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span>}</div>
</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span><span class="comment"></span> </div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span><span class="comment">/**</span></div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span><span class="comment"> * @brief Считать состоянии кнопки </span></div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span><span class="comment"> * @param sw Указатель на структуру кнопки</span></div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span><span class="comment"> * @return 1 - если кнопка нажата, 0 - если отжата</span></div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span><span class="comment"> * @details Функция включает в себя неблокирующую проверку на дребезг</span></div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span><span class="comment"> * Т.е. функцию надо вызывать постоянно, чтобы она мониторила состояние кнопки</span></div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00276" data-start="{" data-end="}">
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"><a class="line" href="group___g_p_i_o___s_w_i_t_c_h.html#ga4b6b8be19a9265bfee6b2bb8a68e988f"> 276</a></span>uint8_t <a class="code hl_function" href="group___g_p_i_o___s_w_i_t_c_h.html#ga4b6b8be19a9265bfee6b2bb8a68e988f">GPIO_Read_Switch</a>(<a class="code hl_struct" href="struct_g_p_i_o___switch_type_def.html">GPIO_SwitchTypeDef</a> *sw)</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span>{</div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">if</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#ga0b75f0bcf066acdf797b8e6730c52f86">check_null_ptr_1</a>(sw))</div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> </div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">if</span>(HAL_GPIO_ReadPin(sw-&gt;<a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#afb369df75a6065fd89ac4ba97d98ab1a">Sw_Port</a>, sw-&gt;<a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#a63d58d9cba49a5823175585ef2996032">Sw_Pin</a>) == sw-&gt;<a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#a4fadf5ead3ebccad521a52c064eeb405">Sw_ActiveLvl</a>)</div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> {</div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> sw-&gt;<a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#a245f1dc811279ce5d4598582db979a89">Sw_PrevState</a> = 1;</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> </div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">if</span>(sw-&gt;<a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#a2600e599a961af2e280c721894df4c06">Sw_FilterDelay</a>) <span class="comment">// если включена защита от дребезга</span></div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> {</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> <span class="keywordflow">if</span>(sw-&gt;<a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#a13f97b867ff1a77ef182c9b13d964ca6">tickprev</a> == 0)</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> sw-&gt;<a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#a13f97b867ff1a77ef182c9b13d964ca6">tickprev</a> = HAL_GetTick();</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">if</span>((HAL_GetTick() - sw-&gt;<a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#a13f97b867ff1a77ef182c9b13d964ca6">tickprev</a>) &gt;= sw-&gt;<a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#a2600e599a961af2e280c721894df4c06">Sw_FilterDelay</a>)</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> {</div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> <span class="keywordflow">if</span>(HAL_GPIO_ReadPin(sw-&gt;<a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#afb369df75a6065fd89ac4ba97d98ab1a">Sw_Port</a>, sw-&gt;<a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#a63d58d9cba49a5823175585ef2996032">Sw_Pin</a>) == sw-&gt;<a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#a4fadf5ead3ebccad521a52c064eeb405">Sw_ActiveLvl</a>)</div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> {</div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> <span class="keywordflow">return</span> 1;</div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> }</div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> {</div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> sw-&gt;<a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#a13f97b867ff1a77ef182c9b13d964ca6">tickprev</a> = 0;</div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> }</div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> }</div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> }</div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> <span class="keywordflow">else</span> <span class="comment">// если нет защиты от дребезга</span></div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> {</div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">if</span>(HAL_GPIO_ReadPin(sw-&gt;<a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#afb369df75a6065fd89ac4ba97d98ab1a">Sw_Port</a>, sw-&gt;<a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#a63d58d9cba49a5823175585ef2996032">Sw_Pin</a>) == sw-&gt;<a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#a4fadf5ead3ebccad521a52c064eeb405">Sw_ActiveLvl</a>)</div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> {</div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">return</span> 1;</div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> }</div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> {</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> sw-&gt;<a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#a13f97b867ff1a77ef182c9b13d964ca6">tickprev</a> = 0;</div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> }</div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> }</div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> }</div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> {</div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> sw-&gt;<a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#a245f1dc811279ce5d4598582db979a89">Sw_PrevState</a> = 0;</div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> }</div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span>}</div>
</div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span><span class="comment">//------------------------GPIO SW FUNCTIONS-------------------------</span></div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span><span class="comment">//-------------------------------------------------------------------</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_ga0b75f0bcf066acdf797b8e6730c52f86"><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#ga0b75f0bcf066acdf797b8e6730c52f86">check_null_ptr_1</a></div><div class="ttdeci">#define check_null_ptr_1(_p1_)</div><div class="ttdoc">Проверить указатель на NULL.</div><div class="ttdef"><b>Definition</b> <a href="mylibs__defs_8h_source.html#l00038">mylibs_defs.h:38</a></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_gae7d1cbb9075ee4b830342fd564d96be0"><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#gae7d1cbb9075ee4b830342fd564d96be0">check_null_ptr_2</a></div><div class="ttdeci">#define check_null_ptr_2(_p1_, _p2_)</div><div class="ttdoc">Проверить два указателя на NULL.</div><div class="ttdef"><b>Definition</b> <a href="mylibs__defs_8h_source.html#l00040">mylibs_defs.h:40</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___g_e_n_e_r_a_l_html_ga962f010f783b81fcdd27eb6b53db28e6"><div class="ttname"><a href="group___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="#l00021">general_gpio.c:21</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___l_e_d_s_html_ga4b9572949326b050694cd55d0a7e5f6c"><div class="ttname"><a href="group___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c">GPIO_LED_On</a></div><div class="ttdeci">HAL_StatusTypeDef GPIO_LED_On(GPIO_LEDTypeDef *led)</div><div class="ttdoc">Включить светодиод</div><div class="ttdef"><b>Definition</b> <a href="#l00087">general_gpio.c:87</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___l_e_d_s_html_gaa00f20021781464af3dfe74aa3e59a0a"><div class="ttname"><a href="group___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a">GPIO_LED_Fading_Start</a></div><div class="ttdeci">HAL_StatusTypeDef GPIO_LED_Fading_Start(GPIO_LEDTypeDef *led, uint32_t period)</div><div class="ttdoc">Активировать моргание светодиодом</div><div class="ttdef"><b>Definition</b> <a href="#l00164">general_gpio.c:164</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___l_e_d_s_html_gaadda2d4f021390a4e392210a5ace5357"><div class="ttname"><a href="group___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357">GPIO_LED_Off</a></div><div class="ttdeci">HAL_StatusTypeDef GPIO_LED_Off(GPIO_LEDTypeDef *led)</div><div class="ttdoc">Выключить светодиод</div><div class="ttdef"><b>Definition</b> <a href="#l00105">general_gpio.c:105</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___l_e_d_s_html_gac936453c7a0841c0b17bcfdae4958084"><div class="ttname"><a href="group___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084">GPIO_LED_Init</a></div><div class="ttdeci">HAL_StatusTypeDef GPIO_LED_Init(GPIO_LEDTypeDef *led, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t LED_ActiveLevel)</div><div class="ttdoc">Инициализировать светодиод (структуру светодиода)</div><div class="ttdef"><b>Definition</b> <a href="#l00069">general_gpio.c:69</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___l_e_d_s_html_gad6e6189824406c4d472b6340c7f19bb2"><div class="ttname"><a href="group___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2">GPIO_LED_Dynamic_Handle</a></div><div class="ttdeci">void GPIO_LED_Dynamic_Handle(GPIO_LEDTypeDef *led)</div><div class="ttdoc">Управление динамическими режимами свечения светодиода</div><div class="ttdef"><b>Definition</b> <a href="#l00184">general_gpio.c:184</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___l_e_d_s_html_gae78b570447d55a462a679a89dbaa8ea2"><div class="ttname"><a href="group___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2">GPIO_LED_Set</a></div><div class="ttdeci">HAL_StatusTypeDef GPIO_LED_Set(GPIO_LEDTypeDef *led, uint8_t led_state)</div><div class="ttdoc">Выставить светодиод по переменной</div><div class="ttdef"><b>Definition</b> <a href="#l00125">general_gpio.c:125</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___l_e_d_s_html_gaf22f44ecaf6a1932b47edc5a845b03a9"><div class="ttname"><a href="group___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9">GPIO_LED_Blink_Start</a></div><div class="ttdeci">HAL_StatusTypeDef GPIO_LED_Blink_Start(GPIO_LEDTypeDef *led, uint32_t period)</div><div class="ttdoc">Активировать моргание светодиодом</div><div class="ttdef"><b>Definition</b> <a href="#l00146">general_gpio.c:146</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___l_e_d_s_html_ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a2445895bed5dcbedc82ea3ef02bec6fb"><div class="ttname"><a href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a2445895bed5dcbedc82ea3ef02bec6fb">LED_IS_BLINKING</a></div><div class="ttdeci">@ LED_IS_BLINKING</div><div class="ttdoc">Моргание светодиодом</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8h_source.html#l00077">general_gpio.h:77</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___l_e_d_s_html_ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a74276cd2464314e422e8a144483f74ae"><div class="ttname"><a href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a74276cd2464314e422e8a144483f74ae">LED_IS_OFF</a></div><div class="ttdeci">@ LED_IS_OFF</div><div class="ttdoc">Светодиод выключен</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8h_source.html#l00075">general_gpio.h:75</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___l_e_d_s_html_ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1aa610f6df44c939aa7d45e318036fa03b"><div class="ttname"><a href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1aa610f6df44c939aa7d45e318036fa03b">LED_IS_FADING</a></div><div class="ttdeci">@ LED_IS_FADING</div><div class="ttdoc">Плавное моргание светодиодом</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8h_source.html#l00078">general_gpio.h:78</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___l_e_d_s_html_ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1af6abfb9c5b95abbdb239590f2cd245ea"><div class="ttname"><a href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1af6abfb9c5b95abbdb239590f2cd245ea">LED_IS_ON</a></div><div class="ttdeci">@ LED_IS_ON</div><div class="ttdoc">Светодиод включен</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8h_source.html#l00076">general_gpio.h:76</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___s_w_i_t_c_h_html_ga4b6b8be19a9265bfee6b2bb8a68e988f"><div class="ttname"><a href="group___g_p_i_o___s_w_i_t_c_h.html#ga4b6b8be19a9265bfee6b2bb8a68e988f">GPIO_Read_Switch</a></div><div class="ttdeci">uint8_t GPIO_Read_Switch(GPIO_SwitchTypeDef *sw)</div><div class="ttdoc">Считать состоянии кнопки</div><div class="ttdef"><b>Definition</b> <a href="#l00276">general_gpio.c:276</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___s_w_i_t_c_h_html_gacafee0e68877f2b25df843356871d1f7"><div class="ttname"><a href="group___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7">GPIO_Switch_Init</a></div><div class="ttdeci">HAL_StatusTypeDef GPIO_Switch_Init(GPIO_SwitchTypeDef *sw, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t SW_ActiveLevel)</div><div class="ttdoc">Инициализировать кнопку (структуру кнопки)</div><div class="ttdef"><b>Definition</b> <a href="#l00258">general_gpio.c:258</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___l_e_d_type_def_html"><div class="ttname"><a href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a></div><div class="ttdoc">Структура светодиода</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8h_source.html#l00085">general_gpio.h:86</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___l_e_d_type_def_html_a684ff60e4c94daf2221524cdc6fcc978"><div class="ttname"><a href="struct_g_p_i_o___l_e_d_type_def.html#a684ff60e4c94daf2221524cdc6fcc978">GPIO_LEDTypeDef::LED_Pin</a></div><div class="ttdeci">uint32_t LED_Pin</div><div class="ttdoc">GPIO пин ножки светодиода</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8h_source.html#l00090">general_gpio.h:90</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___l_e_d_type_def_html_a6cc026931a4681732f9a329ae03098ec"><div class="ttname"><a href="struct_g_p_i_o___l_e_d_type_def.html#a6cc026931a4681732f9a329ae03098ec">GPIO_LEDTypeDef::LED_Period</a></div><div class="ttdeci">uint32_t LED_Period</div><div class="ttdoc">Период моргания светодиода</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8h_source.html#l00093">general_gpio.h:93</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___l_e_d_type_def_html_a831923d4d157267ecc2f1add1c49adcf"><div class="ttname"><a href="struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf">GPIO_LEDTypeDef::LED_Port</a></div><div class="ttdeci">GPIO_TypeDef * LED_Port</div><div class="ttdoc">GPIO порт ножки светодиода</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8h_source.html#l00089">general_gpio.h:89</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___l_e_d_type_def_html_a8c43c12787f4a89f4a785f91a979ba68"><div class="ttname"><a href="struct_g_p_i_o___l_e_d_type_def.html#a8c43c12787f4a89f4a785f91a979ba68">GPIO_LEDTypeDef::tickprev</a></div><div class="ttdeci">uint32_t tickprev</div><div class="ttdoc">Период моргания светодиода</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8h_source.html#l00095">general_gpio.h:95</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___l_e_d_type_def_html_abe9aadc0b28d042267f7155e187a1816"><div class="ttname"><a href="struct_g_p_i_o___l_e_d_type_def.html#abe9aadc0b28d042267f7155e187a1816">GPIO_LEDTypeDef::LED_ActiveLvl</a></div><div class="ttdeci">uint8_t LED_ActiveLvl</div><div class="ttdoc">Активный уровень ножки (при котором светодиод горит)</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8h_source.html#l00092">general_gpio.h:92</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___l_e_d_type_def_html_ad28d93023a00e3c5669bd3deda122435"><div class="ttname"><a href="struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435">GPIO_LEDTypeDef::state</a></div><div class="ttdeci">GPIO_LEDStateTypeDef state</div><div class="ttdoc">Текущий режим работы светодиода</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8h_source.html#l00087">general_gpio.h:87</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___switch_type_def_html"><div class="ttname"><a href="struct_g_p_i_o___switch_type_def.html">GPIO_SwitchTypeDef</a></div><div class="ttdoc">Структура кнопки</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8h_source.html#l00102">general_gpio.h:103</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___switch_type_def_html_a13f97b867ff1a77ef182c9b13d964ca6"><div class="ttname"><a href="struct_g_p_i_o___switch_type_def.html#a13f97b867ff1a77ef182c9b13d964ca6">GPIO_SwitchTypeDef::tickprev</a></div><div class="ttdeci">uint32_t tickprev</div><div class="ttdoc">Период моргания светодиода</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8h_source.html#l00111">general_gpio.h:111</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___switch_type_def_html_a245f1dc811279ce5d4598582db979a89"><div class="ttname"><a href="struct_g_p_i_o___switch_type_def.html#a245f1dc811279ce5d4598582db979a89">GPIO_SwitchTypeDef::Sw_PrevState</a></div><div class="ttdeci">uint32_t Sw_PrevState</div><div class="ttdoc">Предыдущее состояние кнопки</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8h_source.html#l00108">general_gpio.h:108</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___switch_type_def_html_a2600e599a961af2e280c721894df4c06"><div class="ttname"><a href="struct_g_p_i_o___switch_type_def.html#a2600e599a961af2e280c721894df4c06">GPIO_SwitchTypeDef::Sw_FilterDelay</a></div><div class="ttdeci">uint32_t Sw_FilterDelay</div><div class="ttdoc">Фильтр от дребезга (в мс)</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8h_source.html#l00109">general_gpio.h:109</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___switch_type_def_html_a4fadf5ead3ebccad521a52c064eeb405"><div class="ttname"><a href="struct_g_p_i_o___switch_type_def.html#a4fadf5ead3ebccad521a52c064eeb405">GPIO_SwitchTypeDef::Sw_ActiveLvl</a></div><div class="ttdeci">uint8_t Sw_ActiveLvl</div><div class="ttdoc">Активный уровень ножки (при котором кнопка нажата)</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8h_source.html#l00107">general_gpio.h:107</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___switch_type_def_html_a63d58d9cba49a5823175585ef2996032"><div class="ttname"><a href="struct_g_p_i_o___switch_type_def.html#a63d58d9cba49a5823175585ef2996032">GPIO_SwitchTypeDef::Sw_Pin</a></div><div class="ttdeci">uint32_t Sw_Pin</div><div class="ttdoc">GPIO пин ножки кнопки</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8h_source.html#l00105">general_gpio.h:105</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___switch_type_def_html_afb369df75a6065fd89ac4ba97d98ab1a"><div class="ttname"><a href="struct_g_p_i_o___switch_type_def.html#afb369df75a6065fd89ac4ba97d98ab1a">GPIO_SwitchTypeDef::Sw_Port</a></div><div class="ttdeci">GPIO_TypeDef * Sw_Port</div><div class="ttdoc">GPIO порт ножки кнопки</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8h_source.html#l00104">general_gpio.h:104</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_9e11e9a41112194af3eee6cc728f9515.html">MyLibsGeneral</a></li><li class="navelem"><a href="dir_9c80311a018e1f8cfb6659b73d634be4.html">Src</a></li><li class="navelem"><a href="general__gpio_8c.html">general_gpio.c</a></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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,186 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Inc/general_gpio.h File Reference</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('general__gpio_8h.html','',''); });
</script>
<div id="container">
<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_gpio.h File Reference</div></div>
</div><!--header-->
<div class="contents">
<p>Заголовочный файл для модуля инициализации портов.
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &quot;<a class="el" href="mylibs__defs_8h_source.html">mylibs_defs.h</a>&quot;</code><br />
</div>
<p><a href="general__gpio_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-nested-classes" class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:GPIO_5FLEDTypeDef" id="r_GPIO_5FLEDTypeDef"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Структура светодиода <a href="struct_g_p_i_o___l_e_d_type_def.html#details">More...</a><br /></td></tr>
<tr class="memitem:GPIO_5FSwitchTypeDef" id="r_GPIO_5FSwitchTypeDef"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_g_p_i_o___switch_type_def.html">GPIO_SwitchTypeDef</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Структура кнопки <a href="struct_g_p_i_o___switch_type_def.html#details">More...</a><br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-define-members" class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ga1d42e219765ec526d99e306638ac0023" id="r_ga1d42e219765ec526d99e306638ac0023"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___i_n_i_t.html#ga1d42e219765ec526d99e306638ac0023">LED_PWM_TICKS</a>&#160;&#160;&#160;15</td></tr>
<tr class="memdesc:ga1d42e219765ec526d99e306638ac0023"><td class="mdescLeft">&#160;</td><td class="mdescRight">Количество тиков в периоде ШИМ <br /></td></tr>
<tr class="memitem:gaf2e697ac60e05813d45ea2c9c9e79c25" id="r_gaf2e697ac60e05813d45ea2c9c9e79c25"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___i_n_i_t.html#gaf2e697ac60e05813d45ea2c9c9e79c25">LED_ON</a>&#160;&#160;&#160;1</td></tr>
<tr class="memdesc:gaf2e697ac60e05813d45ea2c9c9e79c25"><td class="mdescLeft">&#160;</td><td class="mdescRight">Состояние пина для включения светодиода <br /></td></tr>
<tr class="memitem:ga80700bb63bd56ebabbb4728aa433fd29" id="r_ga80700bb63bd56ebabbb4728aa433fd29"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___i_n_i_t.html#ga80700bb63bd56ebabbb4728aa433fd29">LED_OFF</a>&#160;&#160;&#160;0</td></tr>
<tr class="memdesc:ga80700bb63bd56ebabbb4728aa433fd29"><td class="mdescLeft">&#160;</td><td class="mdescRight">Состояние пина для выключения светодиода <br /></td></tr>
<tr class="memitem:ga19d9e3aced311179a2914e0c9b13d0f9" id="r_ga19d9e3aced311179a2914e0c9b13d0f9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___i_n_i_t.html#ga19d9e3aced311179a2914e0c9b13d0f9">SW_ON</a>&#160;&#160;&#160;1</td></tr>
<tr class="memdesc:ga19d9e3aced311179a2914e0c9b13d0f9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Состояние пина при нажатой кнопке <br /></td></tr>
<tr class="memitem:gacd8900c9ec0efde1da3253b718574067" id="r_gacd8900c9ec0efde1da3253b718574067"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___i_n_i_t.html#gacd8900c9ec0efde1da3253b718574067">SW_OFF</a>&#160;&#160;&#160;0</td></tr>
<tr class="memdesc:gacd8900c9ec0efde1da3253b718574067"><td class="mdescLeft">&#160;</td><td class="mdescRight">Состояние пина при отжатой кнопке <br /></td></tr>
<tr class="memitem:ga34242874b455a72aa6e25841678ed105" id="r_ga34242874b455a72aa6e25841678ed105"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___g_e_n_e_r_a_l.html#ga34242874b455a72aa6e25841678ed105">TIM_Alternate_Mapping</a>(INSTANCE)</td></tr>
<tr class="memdesc:ga34242874b455a72aa6e25841678ed105"><td class="mdescLeft">&#160;</td><td class="mdescRight">Маппинг альтернативной функции SPI между GPIO. <br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-enum-members" class="groupheader"><a id="enum-members" name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:gaac2b90d8b8c9579b6aa5d3bbda9b1ff1" id="r_gaac2b90d8b8c9579b6aa5d3bbda9b1ff1"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___l_e_d_s.html#gaac2b90d8b8c9579b6aa5d3bbda9b1ff1">GPIO_LEDStateTypeDef</a> { <a class="el" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a74276cd2464314e422e8a144483f74ae">LED_IS_OFF</a> = 0
, <a class="el" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1af6abfb9c5b95abbdb239590f2cd245ea">LED_IS_ON</a> = 1
, <a class="el" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a2445895bed5dcbedc82ea3ef02bec6fb">LED_IS_BLINKING</a> = 2
, <a class="el" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1aa610f6df44c939aa7d45e318036fa03b">LED_IS_FADING</a> = 3
}</td></tr>
<tr class="memdesc:gaac2b90d8b8c9579b6aa5d3bbda9b1ff1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Режимы работы светодиода <a href="group___g_p_i_o___l_e_d_s.html#gaac2b90d8b8c9579b6aa5d3bbda9b1ff1">More...</a><br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga962f010f783b81fcdd27eb6b53db28e6" id="r_ga962f010f783b81fcdd27eb6b53db28e6"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6">GPIO_Clock_Enable</a> (GPIO_TypeDef *GPIOx)</td></tr>
<tr class="memdesc:ga962f010f783b81fcdd27eb6b53db28e6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Включить тактирование порта GPIO. <br /></td></tr>
<tr class="memitem:gacafee0e68877f2b25df843356871d1f7" id="r_gacafee0e68877f2b25df843356871d1f7"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7">GPIO_Switch_Init</a> (<a class="el" href="struct_g_p_i_o___switch_type_def.html">GPIO_SwitchTypeDef</a> *sw, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t SW_On_State)</td></tr>
<tr class="memdesc:gacafee0e68877f2b25df843356871d1f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Инициализировать кнопку (структуру кнопки) <br /></td></tr>
<tr class="memitem:ga4b6b8be19a9265bfee6b2bb8a68e988f" id="r_ga4b6b8be19a9265bfee6b2bb8a68e988f"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___s_w_i_t_c_h.html#ga4b6b8be19a9265bfee6b2bb8a68e988f">GPIO_Read_Switch</a> (<a class="el" href="struct_g_p_i_o___switch_type_def.html">GPIO_SwitchTypeDef</a> *swstart)</td></tr>
<tr class="memdesc:ga4b6b8be19a9265bfee6b2bb8a68e988f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Считать состоянии кнопки <br /></td></tr>
<tr class="memitem:gac936453c7a0841c0b17bcfdae4958084" id="r_gac936453c7a0841c0b17bcfdae4958084"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084">GPIO_LED_Init</a> (<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t LED_On_State)</td></tr>
<tr class="memdesc:gac936453c7a0841c0b17bcfdae4958084"><td class="mdescLeft">&#160;</td><td class="mdescRight">Инициализировать светодиод (структуру светодиода) <br /></td></tr>
<tr class="memitem:ga4b9572949326b050694cd55d0a7e5f6c" id="r_ga4b9572949326b050694cd55d0a7e5f6c"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c">GPIO_LED_On</a> (<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led)</td></tr>
<tr class="memdesc:ga4b9572949326b050694cd55d0a7e5f6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Включить светодиод <br /></td></tr>
<tr class="memitem:gaadda2d4f021390a4e392210a5ace5357" id="r_gaadda2d4f021390a4e392210a5ace5357"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357">GPIO_LED_Off</a> (<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led)</td></tr>
<tr class="memdesc:gaadda2d4f021390a4e392210a5ace5357"><td class="mdescLeft">&#160;</td><td class="mdescRight">Выключить светодиод <br /></td></tr>
<tr class="memitem:gae78b570447d55a462a679a89dbaa8ea2" id="r_gae78b570447d55a462a679a89dbaa8ea2"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2">GPIO_LED_Set</a> (<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led, uint8_t led_state)</td></tr>
<tr class="memdesc:gae78b570447d55a462a679a89dbaa8ea2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Выставить светодиод по переменной <br /></td></tr>
<tr class="memitem:gaf22f44ecaf6a1932b47edc5a845b03a9" id="r_gaf22f44ecaf6a1932b47edc5a845b03a9"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9">GPIO_LED_Blink_Start</a> (<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led, uint32_t period)</td></tr>
<tr class="memdesc:gaf22f44ecaf6a1932b47edc5a845b03a9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Активировать моргание светодиодом <br /></td></tr>
<tr class="memitem:gaa00f20021781464af3dfe74aa3e59a0a" id="r_gaa00f20021781464af3dfe74aa3e59a0a"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a">GPIO_LED_Fading_Start</a> (<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led, uint32_t period)</td></tr>
<tr class="memdesc:gaa00f20021781464af3dfe74aa3e59a0a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Активировать моргание светодиодом <br /></td></tr>
<tr class="memitem:gad6e6189824406c4d472b6340c7f19bb2" id="r_gad6e6189824406c4d472b6340c7f19bb2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2">GPIO_LED_Dynamic_Handle</a> (<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led)</td></tr>
<tr class="memdesc:gad6e6189824406c4d472b6340c7f19bb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Управление динамическими режимами свечения светодиода <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Заголовочный файл для модуля инициализации портов. </p>
<p class="definition">Definition in file <a class="el" href="general__gpio_8h_source.html">general_gpio.h</a>.</p>
</div></div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_9e11e9a41112194af3eee6cc728f9515.html">MyLibsGeneral</a></li><li class="navelem"><a href="dir_eb423fea8a9c4b9b32b922020ec391e1.html">Inc</a></li><li class="navelem"><a href="general__gpio_8h.html">general_gpio.h</a></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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,25 @@
var general__gpio_8h =
[
[ "LED_PWM_TICKS", "group___g_p_i_o___i_n_i_t.html#ga1d42e219765ec526d99e306638ac0023", null ],
[ "LED_ON", "group___g_p_i_o___i_n_i_t.html#gaf2e697ac60e05813d45ea2c9c9e79c25", null ],
[ "LED_OFF", "group___g_p_i_o___i_n_i_t.html#ga80700bb63bd56ebabbb4728aa433fd29", null ],
[ "SW_ON", "group___g_p_i_o___i_n_i_t.html#ga19d9e3aced311179a2914e0c9b13d0f9", null ],
[ "SW_OFF", "group___g_p_i_o___i_n_i_t.html#gacd8900c9ec0efde1da3253b718574067", null ],
[ "TIM_Alternate_Mapping", "group___g_p_i_o___g_e_n_e_r_a_l.html#ga34242874b455a72aa6e25841678ed105", null ],
[ "GPIO_LEDStateTypeDef", "group___g_p_i_o___l_e_d_s.html#gaac2b90d8b8c9579b6aa5d3bbda9b1ff1", [
[ "LED_IS_OFF", "group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a74276cd2464314e422e8a144483f74ae", null ],
[ "LED_IS_ON", "group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1af6abfb9c5b95abbdb239590f2cd245ea", null ],
[ "LED_IS_BLINKING", "group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a2445895bed5dcbedc82ea3ef02bec6fb", null ],
[ "LED_IS_FADING", "group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1aa610f6df44c939aa7d45e318036fa03b", null ]
] ],
[ "GPIO_Clock_Enable", "group___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6", null ],
[ "GPIO_Switch_Init", "group___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7", null ],
[ "GPIO_Read_Switch", "group___g_p_i_o___s_w_i_t_c_h.html#ga4b6b8be19a9265bfee6b2bb8a68e988f", null ],
[ "GPIO_LED_Init", "group___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084", null ],
[ "GPIO_LED_On", "group___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c", null ],
[ "GPIO_LED_Off", "group___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357", null ],
[ "GPIO_LED_Set", "group___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2", null ],
[ "GPIO_LED_Blink_Start", "group___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9", null ],
[ "GPIO_LED_Fading_Start", "group___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a", null ],
[ "GPIO_LED_Dynamic_Handle", "group___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2", null ]
];

View File

@ -0,0 +1,327 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Inc/general_gpio.h 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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('general__gpio_8h_source.html','',''); });
</script>
<div id="container">
<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_gpio.h</div></div>
</div><!--header-->
<div class="contents">
<a href="general__gpio_8h.html">Go to the documentation of this file.</a><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_gpio.h</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">* @brief Заголовочный файл для модуля инициализации портов.</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">* @defgroup MY_LIBS_GPIO GPIO Tools</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">* @ingroup MYLIBS_PERIPHERAL</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment">* @brief Функции и макросы для удобной работы с GPIO.</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">*************************************************************************/</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#ifndef __GPIO_GENERAL_H_</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#define __GPIO_GENERAL_H_</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> </div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#include &quot;<a class="code" href="mylibs__defs_8h.html">mylibs_defs.h</a>&quot;</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"></span> </div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment">/** </span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * @addtogroup GPIO_INIT Init defines</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * @ingroup GPIO_GENERAL</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> * @brief Настройка состояний кнопок и количества тиков в периоде ШИМ</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment"> * @{</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment"> */</span></div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#ifndef LED_PWM_TICKS</span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"><a class="line" href="group___g_p_i_o___i_n_i_t.html#ga1d42e219765ec526d99e306638ac0023"> 23</a></span><span class="preprocessor">#define LED_PWM_TICKS 15 </span><span class="comment">///&lt; Количество тиков в периоде ШИМ</span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#ifndef LED_ON</span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="group___g_p_i_o___i_n_i_t.html#gaf2e697ac60e05813d45ea2c9c9e79c25"> 27</a></span><span class="preprocessor">#define LED_ON 1 </span><span class="comment">///&lt; Состояние пина для включения светодиода</span></div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="preprocessor">#ifndef LED_OFF</span></div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="group___g_p_i_o___i_n_i_t.html#ga80700bb63bd56ebabbb4728aa433fd29"> 30</a></span><span class="preprocessor">#define LED_OFF 0 </span><span class="comment">///&lt; Состояние пина для выключения светодиода</span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="preprocessor">#ifndef SW_ON</span></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="group___g_p_i_o___i_n_i_t.html#ga19d9e3aced311179a2914e0c9b13d0f9"> 34</a></span><span class="preprocessor">#define SW_ON 1 </span><span class="comment">///&lt; Состояние пина при нажатой кнопке</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="preprocessor">#ifndef SW_OFF</span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="group___g_p_i_o___i_n_i_t.html#gacd8900c9ec0efde1da3253b718574067"> 37</a></span><span class="preprocessor">#define SW_OFF 0 </span><span class="comment">///&lt; Состояние пина при отжатой кнопке</span></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment"></span> </div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="comment">/** GPIO_INIT</span></div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="comment"> * @}</span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="comment"> */</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> </div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="comment">// /**</span></div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="comment">// * @brief Маппинг альтернативной функции SPI между GPIO</span></div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="comment">// * @ingroup GPIO_GENERAL</span></div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="comment">// */</span></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment">// #define SPI_Alternate_Mapping(INSTANCE) \</span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment">// ((((INSTANCE) == TIM1) || ((INSTANCE) == TIM2))? GPIO_AF1_TIM1: \</span></div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="comment">// (((INSTANCE) == TIM3) || ((INSTANCE) == TIM4) || ((INSTANCE) == TIM5))? GPIO_AF2_TIM3: \</span></div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="comment">// (((INSTANCE) == TIM8) || ((INSTANCE) == TIM9) || ((INSTANCE) == TIM10) || ((INSTANCE) == TIM11))? GPIO_AF3_TIM8: \</span></div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="comment">// (((INSTANCE) == TIM12) || ((INSTANCE) == TIM13) || ((INSTANCE) == TIM14))? GPIO_AF9_TIM12: \</span></div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="comment">// (0))</span></div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="comment"></span> </div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="comment">/**</span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="comment"> * @brief Маппинг альтернативной функции TIM между GPIO</span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="comment"> * @ingroup GPIO_GENERAL</span></div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00061" data-start="" data-end="">
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="group___g_p_i_o___g_e_n_e_r_a_l.html#ga34242874b455a72aa6e25841678ed105"> 61</a></span><span class="preprocessor">#define TIM_Alternate_Mapping(INSTANCE) \</span></div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="preprocessor">((((INSTANCE) == TIM1) || ((INSTANCE) == TIM2))? GPIO_AF1_TIM1: \</span></div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="preprocessor">(((INSTANCE) == TIM3) || ((INSTANCE) == TIM4) || ((INSTANCE) == TIM5))? GPIO_AF2_TIM3: \</span></div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="preprocessor">(((INSTANCE) == TIM8) || ((INSTANCE) == TIM9) || ((INSTANCE) == TIM10) || ((INSTANCE) == TIM11))? GPIO_AF3_TIM8: \</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="preprocessor">(((INSTANCE) == TIM12) || ((INSTANCE) == TIM13) || ((INSTANCE) == TIM14))? GPIO_AF9_TIM12: \</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="preprocessor">(0))</span></div>
</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="comment"></span> </div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="comment">/**</span></div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="comment"> * @brief Режимы работы светодиода</span></div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="comment"> * @ingroup GPIO_LEDS</span></div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00073" data-start="{" data-end="};">
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"><a class="line" href="group___g_p_i_o___l_e_d_s.html#gaac2b90d8b8c9579b6aa5d3bbda9b1ff1"> 73</a></span><span class="keyword">typedef</span> <span class="keyword">enum</span></div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span>{</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"><a class="line" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a74276cd2464314e422e8a144483f74ae"> 75</a></span> <a class="code hl_enumvalue" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a74276cd2464314e422e8a144483f74ae">LED_IS_OFF</a> = 0, <span class="comment">///&lt; Светодиод выключен</span></div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"><a class="line" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1af6abfb9c5b95abbdb239590f2cd245ea"> 76</a></span> <a class="code hl_enumvalue" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1af6abfb9c5b95abbdb239590f2cd245ea">LED_IS_ON</a> = 1, <span class="comment">///&lt; Светодиод включен</span></div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"><a class="line" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a2445895bed5dcbedc82ea3ef02bec6fb"> 77</a></span> <a class="code hl_enumvalue" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a2445895bed5dcbedc82ea3ef02bec6fb">LED_IS_BLINKING</a> = 2, <span class="comment">///&lt; Моргание светодиодом</span></div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"><a class="line" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1aa610f6df44c939aa7d45e318036fa03b"> 78</a></span> <a class="code hl_enumvalue" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1aa610f6df44c939aa7d45e318036fa03b">LED_IS_FADING</a> = 3, <span class="comment">///&lt; Плавное моргание светодиодом</span></div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span>}<a class="code hl_enumeration" href="group___g_p_i_o___l_e_d_s.html#gaac2b90d8b8c9579b6aa5d3bbda9b1ff1">GPIO_LEDStateTypeDef</a>;</div>
</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="comment"></span> </div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="comment">/**</span></div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="comment"> * @brief Структура светодиода</span></div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="comment"> * @ingroup GPIO_LEDS</span></div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00085" data-start="{" data-end="};">
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"><a class="line" href="struct_g_p_i_o___l_e_d_type_def.html"> 85</a></span><span class="keyword">typedef</span> <span class="keyword">struct</span></div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span>{</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"><a class="line" href="struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435"> 87</a></span> <a class="code hl_enumeration" href="group___g_p_i_o___l_e_d_s.html#gaac2b90d8b8c9579b6aa5d3bbda9b1ff1">GPIO_LEDStateTypeDef</a> <a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435">state</a>; <span class="comment">///&lt; Текущий режим работы светодиода</span></div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"><a class="line" href="struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf"> 89</a></span> GPIO_TypeDef *<a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf">LED_Port</a>; <span class="comment">///&lt; GPIO порт ножки светодиода</span></div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"><a class="line" href="struct_g_p_i_o___l_e_d_type_def.html#a684ff60e4c94daf2221524cdc6fcc978"> 90</a></span> uint32_t <a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a684ff60e4c94daf2221524cdc6fcc978">LED_Pin</a>; <span class="comment">///&lt; GPIO пин ножки светодиода</span></div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"><a class="line" href="struct_g_p_i_o___l_e_d_type_def.html#abe9aadc0b28d042267f7155e187a1816"> 92</a></span> uint8_t <a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#abe9aadc0b28d042267f7155e187a1816">LED_ActiveLvl</a>; <span class="comment">///&lt; Активный уровень ножки (при котором светодиод горит)</span></div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"><a class="line" href="struct_g_p_i_o___l_e_d_type_def.html#a6cc026931a4681732f9a329ae03098ec"> 93</a></span> uint32_t <a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a6cc026931a4681732f9a329ae03098ec">LED_Period</a>; <span class="comment">///&lt; Период моргания светодиода</span></div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> </div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"><a class="line" href="struct_g_p_i_o___l_e_d_type_def.html#a8c43c12787f4a89f4a785f91a979ba68"> 95</a></span> uint32_t <a class="code hl_variable" href="struct_g_p_i_o___l_e_d_type_def.html#a8c43c12787f4a89f4a785f91a979ba68">tickprev</a>;<span class="comment">///&lt; Период моргания светодиода</span></div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span>}<a class="code hl_struct" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a>;</div>
</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="comment">/**</span></div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="comment"> * @brief Структура кнопки</span></div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="comment"> * @ingroup GPIO_SWITCH</span></div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00102" data-start="{" data-end="};">
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"><a class="line" href="struct_g_p_i_o___switch_type_def.html"> 102</a></span><span class="keyword">typedef</span> <span class="keyword">struct</span></div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span>{</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"><a class="line" href="struct_g_p_i_o___switch_type_def.html#afb369df75a6065fd89ac4ba97d98ab1a"> 104</a></span> GPIO_TypeDef *<a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#afb369df75a6065fd89ac4ba97d98ab1a">Sw_Port</a>; <span class="comment">///&lt; GPIO порт ножки кнопки</span></div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"><a class="line" href="struct_g_p_i_o___switch_type_def.html#a63d58d9cba49a5823175585ef2996032"> 105</a></span> uint32_t <a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#a63d58d9cba49a5823175585ef2996032">Sw_Pin</a>; <span class="comment">///&lt; GPIO пин ножки кнопки</span></div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> </div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"><a class="line" href="struct_g_p_i_o___switch_type_def.html#a4fadf5ead3ebccad521a52c064eeb405"> 107</a></span> uint8_t <a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#a4fadf5ead3ebccad521a52c064eeb405">Sw_ActiveLvl</a>; <span class="comment">///&lt; Активный уровень ножки (при котором кнопка нажата)</span></div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"><a class="line" href="struct_g_p_i_o___switch_type_def.html#a245f1dc811279ce5d4598582db979a89"> 108</a></span> uint32_t <a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#a245f1dc811279ce5d4598582db979a89">Sw_PrevState</a>; <span class="comment">///&lt; Предыдущее состояние кнопки</span></div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"><a class="line" href="struct_g_p_i_o___switch_type_def.html#a2600e599a961af2e280c721894df4c06"> 109</a></span> uint32_t <a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#a2600e599a961af2e280c721894df4c06">Sw_FilterDelay</a>; <span class="comment">///&lt; Фильтр от дребезга (в мс)</span></div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"><a class="line" href="struct_g_p_i_o___switch_type_def.html#a13f97b867ff1a77ef182c9b13d964ca6"> 111</a></span> uint32_t <a class="code hl_variable" href="struct_g_p_i_o___switch_type_def.html#a13f97b867ff1a77ef182c9b13d964ca6">tickprev</a>;<span class="comment">///&lt; Период моргания светодиода </span></div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span>}<a class="code hl_struct" href="struct_g_p_i_o___switch_type_def.html">GPIO_SwitchTypeDef</a>;</div>
</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span><span class="comment"></span> </div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="comment">/////////////////////////////////////////////////////////////////////</span></div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span><span class="comment">///////////////////////////---FUNCTIONS---///////////////////////////</span></div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span><span class="comment">/** </span></div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span><span class="comment"> * @addtogroup GPIO_GENERAL General tools</span></div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span><span class="comment"> * @ingroup MY_LIBS_GPIO</span></div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span><span class="comment"> * @brief Общие функции/макросы для работы с GPIO</span></div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="comment"> * @{</span></div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="comment"> */</span></div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> </div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span>HAL_StatusTypeDef <a class="code hl_function" href="group___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6">GPIO_Clock_Enable</a>(GPIO_TypeDef *GPIOx);</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span><span class="comment"></span> </div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span><span class="comment">/** GPIO_GENERAL</span></div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span><span class="comment"> * @}</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">/** </span></div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span><span class="comment">* @addtogroup GPIO_SWITCH Switch tools</span></div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span><span class="comment">* @ingroup MY_LIBS_GPIO</span></div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span><span class="comment">* @brief Функции для работы с GPIO, как с кнопкой</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="comment">*/</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">/* Инициализировать кнопку (структуру кнопки) */</span></div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span>HAL_StatusTypeDef <a class="code hl_function" href="group___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7">GPIO_Switch_Init</a>(<a class="code hl_struct" href="struct_g_p_i_o___switch_type_def.html">GPIO_SwitchTypeDef</a> *sw, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t SW_On_State);</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span><span class="comment">/* Считать состоянии кнопки запуска */</span></div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span>uint8_t <a class="code hl_function" href="group___g_p_i_o___s_w_i_t_c_h.html#ga4b6b8be19a9265bfee6b2bb8a68e988f">GPIO_Read_Switch</a>(<a class="code hl_struct" href="struct_g_p_i_o___switch_type_def.html">GPIO_SwitchTypeDef</a> *swstart);</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span><span class="comment"></span> </div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span><span class="comment">/** GPIO_SWITCH</span></div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span><span class="comment"> * @}</span></div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span><span class="comment"> */</span></div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> </div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span><span class="comment"></span> </div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span><span class="comment">/** </span></div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span><span class="comment"> * @addtogroup GPIO_LEDS LED tools</span></div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span><span class="comment"> * @ingroup MY_LIBS_GPIO</span></div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="comment"> * @brief Функции для работы с GPIO, для управления светодиодом</span></div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span><span class="comment"> * @{</span></div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span><span class="comment"> */</span></div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span><span class="comment">/* Инициализировать светодиод (структуру светодиода) */</span></div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span>HAL_StatusTypeDef <a class="code hl_function" href="group___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084">GPIO_LED_Init</a>(<a class="code hl_struct" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t LED_On_State);</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span><span class="comment">/* Включить светодиод */</span></div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span>HAL_StatusTypeDef <a class="code hl_function" href="group___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c">GPIO_LED_On</a>(<a class="code hl_struct" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led);</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span><span class="comment">/* Выключить светодиод */</span></div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span>HAL_StatusTypeDef <a class="code hl_function" href="group___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357">GPIO_LED_Off</a>(<a class="code hl_struct" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led);</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span><span class="comment">/* Выставить светодиод по переменной */</span></div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span>HAL_StatusTypeDef <a class="code hl_function" href="group___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2">GPIO_LED_Set</a>(<a class="code hl_struct" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led, uint8_t led_state);</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span><span class="comment">/* Активировать моргание светодиодом */</span></div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span>HAL_StatusTypeDef <a class="code hl_function" href="group___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9">GPIO_LED_Blink_Start</a>(<a class="code hl_struct" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led, uint32_t period);</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span><span class="comment">/* Активировать моргание светодиодом */</span></div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span>HAL_StatusTypeDef <a class="code hl_function" href="group___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a">GPIO_LED_Fading_Start</a>(<a class="code hl_struct" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led, uint32_t period);</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span><span class="comment">/* Управление динамическими режимами свечения светодиода */</span></div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span><span class="keywordtype">void</span> <a class="code hl_function" href="group___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2">GPIO_LED_Dynamic_Handle</a>(<a class="code hl_struct" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led);</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span><span class="comment"></span> </div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span><span class="comment">/** GPIO_LEDS</span></div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span><span class="comment"> * @}</span></div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span><span class="comment"> */</span><span class="comment"></span></div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span><span class="comment">///////////////////////////---FUNCTIONS---///////////////////////////</span></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> </div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span><span class="preprocessor">#endif </span><span class="comment">// __GPIO_GENERAL_H_</span></div>
<div class="ttc" id="agroup___g_p_i_o___g_e_n_e_r_a_l_html_ga962f010f783b81fcdd27eb6b53db28e6"><div class="ttname"><a href="group___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#l00021">general_gpio.c:21</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___l_e_d_s_html_ga4b9572949326b050694cd55d0a7e5f6c"><div class="ttname"><a href="group___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c">GPIO_LED_On</a></div><div class="ttdeci">HAL_StatusTypeDef GPIO_LED_On(GPIO_LEDTypeDef *led)</div><div class="ttdoc">Включить светодиод</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8c_source.html#l00087">general_gpio.c:87</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___l_e_d_s_html_gaa00f20021781464af3dfe74aa3e59a0a"><div class="ttname"><a href="group___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a">GPIO_LED_Fading_Start</a></div><div class="ttdeci">HAL_StatusTypeDef GPIO_LED_Fading_Start(GPIO_LEDTypeDef *led, uint32_t period)</div><div class="ttdoc">Активировать моргание светодиодом</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8c_source.html#l00164">general_gpio.c:164</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___l_e_d_s_html_gaac2b90d8b8c9579b6aa5d3bbda9b1ff1"><div class="ttname"><a href="group___g_p_i_o___l_e_d_s.html#gaac2b90d8b8c9579b6aa5d3bbda9b1ff1">GPIO_LEDStateTypeDef</a></div><div class="ttdeci">GPIO_LEDStateTypeDef</div><div class="ttdoc">Режимы работы светодиода</div><div class="ttdef"><b>Definition</b> <a href="#l00073">general_gpio.h:74</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___l_e_d_s_html_gaadda2d4f021390a4e392210a5ace5357"><div class="ttname"><a href="group___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357">GPIO_LED_Off</a></div><div class="ttdeci">HAL_StatusTypeDef GPIO_LED_Off(GPIO_LEDTypeDef *led)</div><div class="ttdoc">Выключить светодиод</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8c_source.html#l00105">general_gpio.c:105</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___l_e_d_s_html_gac936453c7a0841c0b17bcfdae4958084"><div class="ttname"><a href="group___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084">GPIO_LED_Init</a></div><div class="ttdeci">HAL_StatusTypeDef GPIO_LED_Init(GPIO_LEDTypeDef *led, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t LED_On_State)</div><div class="ttdoc">Инициализировать светодиод (структуру светодиода)</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8c_source.html#l00069">general_gpio.c:69</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___l_e_d_s_html_gad6e6189824406c4d472b6340c7f19bb2"><div class="ttname"><a href="group___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2">GPIO_LED_Dynamic_Handle</a></div><div class="ttdeci">void GPIO_LED_Dynamic_Handle(GPIO_LEDTypeDef *led)</div><div class="ttdoc">Управление динамическими режимами свечения светодиода</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8c_source.html#l00184">general_gpio.c:184</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___l_e_d_s_html_gae78b570447d55a462a679a89dbaa8ea2"><div class="ttname"><a href="group___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2">GPIO_LED_Set</a></div><div class="ttdeci">HAL_StatusTypeDef GPIO_LED_Set(GPIO_LEDTypeDef *led, uint8_t led_state)</div><div class="ttdoc">Выставить светодиод по переменной</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8c_source.html#l00125">general_gpio.c:125</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___l_e_d_s_html_gaf22f44ecaf6a1932b47edc5a845b03a9"><div class="ttname"><a href="group___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9">GPIO_LED_Blink_Start</a></div><div class="ttdeci">HAL_StatusTypeDef GPIO_LED_Blink_Start(GPIO_LEDTypeDef *led, uint32_t period)</div><div class="ttdoc">Активировать моргание светодиодом</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8c_source.html#l00146">general_gpio.c:146</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___l_e_d_s_html_ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a2445895bed5dcbedc82ea3ef02bec6fb"><div class="ttname"><a href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a2445895bed5dcbedc82ea3ef02bec6fb">LED_IS_BLINKING</a></div><div class="ttdeci">@ LED_IS_BLINKING</div><div class="ttdoc">Моргание светодиодом</div><div class="ttdef"><b>Definition</b> <a href="#l00077">general_gpio.h:77</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___l_e_d_s_html_ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a74276cd2464314e422e8a144483f74ae"><div class="ttname"><a href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a74276cd2464314e422e8a144483f74ae">LED_IS_OFF</a></div><div class="ttdeci">@ LED_IS_OFF</div><div class="ttdoc">Светодиод выключен</div><div class="ttdef"><b>Definition</b> <a href="#l00075">general_gpio.h:75</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___l_e_d_s_html_ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1aa610f6df44c939aa7d45e318036fa03b"><div class="ttname"><a href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1aa610f6df44c939aa7d45e318036fa03b">LED_IS_FADING</a></div><div class="ttdeci">@ LED_IS_FADING</div><div class="ttdoc">Плавное моргание светодиодом</div><div class="ttdef"><b>Definition</b> <a href="#l00078">general_gpio.h:78</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___l_e_d_s_html_ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1af6abfb9c5b95abbdb239590f2cd245ea"><div class="ttname"><a href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1af6abfb9c5b95abbdb239590f2cd245ea">LED_IS_ON</a></div><div class="ttdeci">@ LED_IS_ON</div><div class="ttdoc">Светодиод включен</div><div class="ttdef"><b>Definition</b> <a href="#l00076">general_gpio.h:76</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___s_w_i_t_c_h_html_ga4b6b8be19a9265bfee6b2bb8a68e988f"><div class="ttname"><a href="group___g_p_i_o___s_w_i_t_c_h.html#ga4b6b8be19a9265bfee6b2bb8a68e988f">GPIO_Read_Switch</a></div><div class="ttdeci">uint8_t GPIO_Read_Switch(GPIO_SwitchTypeDef *swstart)</div><div class="ttdoc">Считать состоянии кнопки</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8c_source.html#l00276">general_gpio.c:276</a></div></div>
<div class="ttc" id="agroup___g_p_i_o___s_w_i_t_c_h_html_gacafee0e68877f2b25df843356871d1f7"><div class="ttname"><a href="group___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7">GPIO_Switch_Init</a></div><div class="ttdeci">HAL_StatusTypeDef GPIO_Switch_Init(GPIO_SwitchTypeDef *sw, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t SW_On_State)</div><div class="ttdoc">Инициализировать кнопку (структуру кнопки)</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8c_source.html#l00258">general_gpio.c:258</a></div></div>
<div class="ttc" id="amylibs__defs_8h_html"><div class="ttname"><a href="mylibs__defs_8h.html">mylibs_defs.h</a></div><div class="ttdoc">Заголочный файл для дефайнов библиотеки MyLibsGeneral.</div></div>
<div class="ttc" id="astruct_g_p_i_o___l_e_d_type_def_html"><div class="ttname"><a href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a></div><div class="ttdoc">Структура светодиода</div><div class="ttdef"><b>Definition</b> <a href="#l00085">general_gpio.h:86</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___l_e_d_type_def_html_a684ff60e4c94daf2221524cdc6fcc978"><div class="ttname"><a href="struct_g_p_i_o___l_e_d_type_def.html#a684ff60e4c94daf2221524cdc6fcc978">GPIO_LEDTypeDef::LED_Pin</a></div><div class="ttdeci">uint32_t LED_Pin</div><div class="ttdoc">GPIO пин ножки светодиода</div><div class="ttdef"><b>Definition</b> <a href="#l00090">general_gpio.h:90</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___l_e_d_type_def_html_a6cc026931a4681732f9a329ae03098ec"><div class="ttname"><a href="struct_g_p_i_o___l_e_d_type_def.html#a6cc026931a4681732f9a329ae03098ec">GPIO_LEDTypeDef::LED_Period</a></div><div class="ttdeci">uint32_t LED_Period</div><div class="ttdoc">Период моргания светодиода</div><div class="ttdef"><b>Definition</b> <a href="#l00093">general_gpio.h:93</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___l_e_d_type_def_html_a831923d4d157267ecc2f1add1c49adcf"><div class="ttname"><a href="struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf">GPIO_LEDTypeDef::LED_Port</a></div><div class="ttdeci">GPIO_TypeDef * LED_Port</div><div class="ttdoc">GPIO порт ножки светодиода</div><div class="ttdef"><b>Definition</b> <a href="#l00089">general_gpio.h:89</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___l_e_d_type_def_html_a8c43c12787f4a89f4a785f91a979ba68"><div class="ttname"><a href="struct_g_p_i_o___l_e_d_type_def.html#a8c43c12787f4a89f4a785f91a979ba68">GPIO_LEDTypeDef::tickprev</a></div><div class="ttdeci">uint32_t tickprev</div><div class="ttdoc">Период моргания светодиода</div><div class="ttdef"><b>Definition</b> <a href="#l00095">general_gpio.h:95</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___l_e_d_type_def_html_abe9aadc0b28d042267f7155e187a1816"><div class="ttname"><a href="struct_g_p_i_o___l_e_d_type_def.html#abe9aadc0b28d042267f7155e187a1816">GPIO_LEDTypeDef::LED_ActiveLvl</a></div><div class="ttdeci">uint8_t LED_ActiveLvl</div><div class="ttdoc">Активный уровень ножки (при котором светодиод горит)</div><div class="ttdef"><b>Definition</b> <a href="#l00092">general_gpio.h:92</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___l_e_d_type_def_html_ad28d93023a00e3c5669bd3deda122435"><div class="ttname"><a href="struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435">GPIO_LEDTypeDef::state</a></div><div class="ttdeci">GPIO_LEDStateTypeDef state</div><div class="ttdoc">Текущий режим работы светодиода</div><div class="ttdef"><b>Definition</b> <a href="#l00087">general_gpio.h:87</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___switch_type_def_html"><div class="ttname"><a href="struct_g_p_i_o___switch_type_def.html">GPIO_SwitchTypeDef</a></div><div class="ttdoc">Структура кнопки</div><div class="ttdef"><b>Definition</b> <a href="#l00102">general_gpio.h:103</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___switch_type_def_html_a13f97b867ff1a77ef182c9b13d964ca6"><div class="ttname"><a href="struct_g_p_i_o___switch_type_def.html#a13f97b867ff1a77ef182c9b13d964ca6">GPIO_SwitchTypeDef::tickprev</a></div><div class="ttdeci">uint32_t tickprev</div><div class="ttdoc">Период моргания светодиода</div><div class="ttdef"><b>Definition</b> <a href="#l00111">general_gpio.h:111</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___switch_type_def_html_a245f1dc811279ce5d4598582db979a89"><div class="ttname"><a href="struct_g_p_i_o___switch_type_def.html#a245f1dc811279ce5d4598582db979a89">GPIO_SwitchTypeDef::Sw_PrevState</a></div><div class="ttdeci">uint32_t Sw_PrevState</div><div class="ttdoc">Предыдущее состояние кнопки</div><div class="ttdef"><b>Definition</b> <a href="#l00108">general_gpio.h:108</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___switch_type_def_html_a2600e599a961af2e280c721894df4c06"><div class="ttname"><a href="struct_g_p_i_o___switch_type_def.html#a2600e599a961af2e280c721894df4c06">GPIO_SwitchTypeDef::Sw_FilterDelay</a></div><div class="ttdeci">uint32_t Sw_FilterDelay</div><div class="ttdoc">Фильтр от дребезга (в мс)</div><div class="ttdef"><b>Definition</b> <a href="#l00109">general_gpio.h:109</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___switch_type_def_html_a4fadf5ead3ebccad521a52c064eeb405"><div class="ttname"><a href="struct_g_p_i_o___switch_type_def.html#a4fadf5ead3ebccad521a52c064eeb405">GPIO_SwitchTypeDef::Sw_ActiveLvl</a></div><div class="ttdeci">uint8_t Sw_ActiveLvl</div><div class="ttdoc">Активный уровень ножки (при котором кнопка нажата)</div><div class="ttdef"><b>Definition</b> <a href="#l00107">general_gpio.h:107</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___switch_type_def_html_a63d58d9cba49a5823175585ef2996032"><div class="ttname"><a href="struct_g_p_i_o___switch_type_def.html#a63d58d9cba49a5823175585ef2996032">GPIO_SwitchTypeDef::Sw_Pin</a></div><div class="ttdeci">uint32_t Sw_Pin</div><div class="ttdoc">GPIO пин ножки кнопки</div><div class="ttdef"><b>Definition</b> <a href="#l00105">general_gpio.h:105</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___switch_type_def_html_afb369df75a6065fd89ac4ba97d98ab1a"><div class="ttname"><a href="struct_g_p_i_o___switch_type_def.html#afb369df75a6065fd89ac4ba97d98ab1a">GPIO_SwitchTypeDef::Sw_Port</a></div><div class="ttdeci">GPIO_TypeDef * Sw_Port</div><div class="ttdoc">GPIO порт ножки кнопки</div><div class="ttdef"><b>Definition</b> <a href="#l00104">general_gpio.h:104</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_9e11e9a41112194af3eee6cc728f9515.html">MyLibsGeneral</a></li><li class="navelem"><a href="dir_eb423fea8a9c4b9b32b922020ec391e1.html">Inc</a></li><li class="navelem"><a href="general__gpio_8h.html">general_gpio.h</a></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.14.0 </li>
</ul>
</div>
</body>
</html>

247
Doc/html/globals.html Normal file
View File

@ -0,0 +1,247 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: File Members</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('globals.html','',''); });
</script>
<div id="container">
<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="contents">
<div class="textblock">Here is a list of all documented file members with links to the documentation:</div>
<h3 class="doxsection"><a id="index_a" name="index_a"></a>- a -</h3><ul>
<li>ABS&#160;:&#160;<a class="el" href="group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga996f7be338ccb40d1a2a5abc1ad61759">mylibs_defs.h</a></li>
<li>assert_usertracker&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#gadd7fd2c6e3a4800f1d5ddab35fd4b43e">trackers.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_b" name="index_b"></a>- b -</h3><ul>
<li>ByteSwap16&#160;:&#160;<a class="el" href="group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga0f22e895ac7781c3d1b68fee182c4291">mylibs_defs.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_c" name="index_c"></a>- c -</h3><ul>
<li>check_null_ptr_1&#160;:&#160;<a class="el" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga0b75f0bcf066acdf797b8e6730c52f86">mylibs_defs.h</a></li>
<li>check_null_ptr_2&#160;:&#160;<a class="el" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gae7d1cbb9075ee4b830342fd564d96be0">mylibs_defs.h</a></li>
<li>check_null_ptr_3&#160;:&#160;<a class="el" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga002f4a5f5d8bb37d88f607386bc6ba2e">mylibs_defs.h</a></li>
<li>check_null_ptr_4&#160;:&#160;<a class="el" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gade91c09d89a5f69003dcfe506ed0327f">mylibs_defs.h</a></li>
<li>check_null_ptr_5&#160;:&#160;<a class="el" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga944edcd2c65519578d36730b94701f64">mylibs_defs.h</a></li>
<li>ClearStruct&#160;:&#160;<a class="el" href="group___u_t_i_l_s___d_e_f_i_n_e_s.html#gaf5e598848326d48e86167e5099a029be">mylibs_defs.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_d" name="index_d"></a>- d -</h3><ul>
<li>Divide_Up&#160;:&#160;<a class="el" href="group___u_t_i_l_s___d_e_f_i_n_e_s.html#gabf45f2b60eedf80cf9d1dbe4302a741e">mylibs_defs.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_g" name="index_g"></a>- g -</h3><ul>
<li>GPIO_Clock_Enable()&#160;:&#160;<a class="el" href="group___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6">general_gpio.h</a>, <a class="el" href="group___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6">general_gpio.c</a></li>
<li>GPIO_LED_Blink_Start()&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9">general_gpio.h</a>, <a class="el" href="group___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9">general_gpio.c</a></li>
<li>GPIO_LED_Dynamic_Handle()&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2">general_gpio.h</a>, <a class="el" href="group___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2">general_gpio.c</a></li>
<li>GPIO_LED_Fading_Start()&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a">general_gpio.h</a>, <a class="el" href="group___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a">general_gpio.c</a></li>
<li>GPIO_LED_Init()&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084">general_gpio.h</a>, <a class="el" href="group___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084">general_gpio.c</a></li>
<li>GPIO_LED_Off()&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357">general_gpio.h</a>, <a class="el" href="group___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357">general_gpio.c</a></li>
<li>GPIO_LED_On()&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c">general_gpio.h</a>, <a class="el" href="group___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c">general_gpio.c</a></li>
<li>GPIO_LED_Set()&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2">general_gpio.h</a>, <a class="el" href="group___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2">general_gpio.c</a></li>
<li>GPIO_LEDStateTypeDef&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#gaac2b90d8b8c9579b6aa5d3bbda9b1ff1">general_gpio.h</a></li>
<li>GPIO_Read_Switch()&#160;:&#160;<a class="el" href="group___g_p_i_o___s_w_i_t_c_h.html#ga4b6b8be19a9265bfee6b2bb8a68e988f">general_gpio.h</a>, <a class="el" href="group___g_p_i_o___s_w_i_t_c_h.html#ga4b6b8be19a9265bfee6b2bb8a68e988f">general_gpio.c</a></li>
<li>GPIO_Switch_Init()&#160;:&#160;<a class="el" href="group___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7">general_gpio.h</a>, <a class="el" href="group___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7">general_gpio.c</a></li>
<li>GPIO_TRACE_ENABLE&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga4222e0e400ad81737cefcabeb03fd23b">mylibs_config.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_h" name="index_h"></a>- h -</h3><ul>
<li>HARDFAULT_SERIAL_TRACE&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga47f454f804b4dbc26cae079e8d8641e6">mylibs_config.h</a></li>
<li>HF_CheckRecovered()&#160;:&#160;<a class="el" href="group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html#ga03f8b6f3b537ee1c8e91065c60db504f">trace.h</a></li>
<li>HF_FLASH_ADDR&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga0c602733a4a359bf8c095d71cd4d0f63">mylibs_config.h</a></li>
<li>HF_HandleFault()&#160;:&#160;<a class="el" href="group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html#gadd8e10e7ec3b0204f7f92062ecd452f7">trace.h</a></li>
<li>HF_RAM_END&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga92d0d14732edb7dfa21d483304bdb051">mylibs_config.h</a></li>
<li>HF_RTT_TAG_BASE&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gadc960255719c7eff4bdfaa850be9b313">mylibs_config.h</a></li>
<li>HF_RTT_TAIL_SIZE&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gafcc7ea03d4df8f1909e580b519a7f3ca">mylibs_config.h</a></li>
<li>HF_STACK_DUMP_WORDS&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gaa31234688b333a505aaa57b8ecdedf5b">mylibs_config.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_i" name="index_i"></a>- i -</h3><ul>
<li>if_assert_usertracker&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#gad91d8ca89074270fc040c0449e57cf07">trackers.h</a></li>
<li>INCLUDE_BIT_ACCESS_LIB&#160;:&#160;<a class="el" href="group___l_i_b_s___c_o_n_f_i_g.html#gaf4ddb2a71ec0d05c2480e197cd17c0be">mylibs_config.h</a></li>
<li>INCLUDE_GENERAL_PERIPH_LIBS&#160;:&#160;<a class="el" href="group___l_i_b_s___c_o_n_f_i_g.html#ga181a46326e46b60afb160190832c7281">mylibs_config.h</a></li>
<li>INCLUDE_TRACE_LIB&#160;:&#160;<a class="el" href="group___l_i_b_s___c_o_n_f_i_g.html#ga0a3ca94b616997069dd53e2c6c2687d7">mylibs_config.h</a></li>
<li>INCLUDE_TRACKERS_LIB&#160;:&#160;<a class="el" href="group___l_i_b_s___c_o_n_f_i_g.html#ga4403055986b70bb02b8d37073a122e32">mylibs_config.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_l" name="index_l"></a>- l -</h3><ul>
<li>LED_IS_BLINKING&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a2445895bed5dcbedc82ea3ef02bec6fb">general_gpio.h</a></li>
<li>LED_IS_FADING&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1aa610f6df44c939aa7d45e318036fa03b">general_gpio.h</a></li>
<li>LED_IS_OFF&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a74276cd2464314e422e8a144483f74ae">general_gpio.h</a></li>
<li>LED_IS_ON&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1af6abfb9c5b95abbdb239590f2cd245ea">general_gpio.h</a></li>
<li>LED_OFF&#160;:&#160;<a class="el" href="group___g_p_i_o___i_n_i_t.html#ga80700bb63bd56ebabbb4728aa433fd29">general_gpio.h</a></li>
<li>LED_ON&#160;:&#160;<a class="el" href="group___g_p_i_o___i_n_i_t.html#gaf2e697ac60e05813d45ea2c9c9e79c25">general_gpio.h</a></li>
<li>LED_PWM_TICKS&#160;:&#160;<a class="el" href="group___g_p_i_o___i_n_i_t.html#ga1d42e219765ec526d99e306638ac0023">general_gpio.h</a></li>
<li>LOG_LEVEL&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga0b87e0d3bf5853bcbb0b66a7c48fdc05">mylibs_config.h</a></li>
<li>log_printf&#160;:&#160;<a class="el" href="group___t_r_a_c_e___s_e_r_i_a_l.html#ga730fb7b8d0bbb348dca73c15bd0e0b26">trace.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_m" name="index_m"></a>- m -</h3><ul>
<li>msDelay&#160;:&#160;<a class="el" href="group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gabeb97579daeb622c6651ed03c4a27479">mylibs_defs.h</a></li>
<li>msDelayStart&#160;:&#160;<a class="el" href="group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga8a5051b1292d1019fe8dd3fc5521ab25">mylibs_defs.h</a></li>
<li>msDelayWaitDone&#160;:&#160;<a class="el" href="group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gaed082c07b9fc4d1894330d885b9b5518">mylibs_defs.h</a></li>
<li>msDelayWhileActive&#160;:&#160;<a class="el" href="group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga0b97e172659a59ee4fa56f851643ae85">mylibs_defs.h</a></li>
<li>my_printf&#160;:&#160;<a class="el" href="group___t_r_a_c_e___s_e_r_i_a_l.html#gae9b9b8a611e291a2f2aa5abf99f3ebaa">trace.h</a></li>
<li>MyLibs_Error_Handler&#160;:&#160;<a class="el" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gae110df81afd885a390bbeb152d7b709f">mylibs_defs.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_n" name="index_n"></a>- n -</h3><ul>
<li>num_of_usercnts&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga72be24629fedb8bf70e830373d151fbc">trackers.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_r" name="index_r"></a>- r -</h3><ul>
<li>RTT_EraseFlash()&#160;:&#160;<a class="el" href="group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga8d8c6850e32b42871faefce3352012d1">trace.h</a></li>
<li>RTT_FLASH_BUFFER_SIZE&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga501312b24e322de4dd6755ad442f0ba3">mylibs_config.h</a></li>
<li>RTT_FLASH_SECTOR&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga3bc1b76864e1d32cbdd174d4caae7724">mylibs_config.h</a></li>
<li>RTT_FLASH_SECTOR_END&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gafeca0be3688dea07ff443f894668003d">mylibs_config.h</a></li>
<li>RTT_FLASH_SECTOR_START&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga8e56f75d3ab8a89ddde1404ae23c3297">mylibs_config.h</a></li>
<li>RTT_FlashPrepare()&#160;:&#160;<a class="el" href="group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga21353cb4f5af666237739e62ce019cd6">trace.h</a></li>
<li>RTT_ReadFromFlash()&#160;:&#160;<a class="el" href="group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga734b2ebbf0c77699b739013878cfd146">trace.h</a></li>
<li>RTT_SaveToFlash()&#160;:&#160;<a class="el" href="group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga79f222c8ab644de4d47f07528d1edd63">trace.h</a></li>
<li>RTT_TRACE_ENABLE&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga00ff2175bdc1fb11c8ec970ea3010dd8">mylibs_config.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_s" name="index_s"></a>- s -</h3><ul>
<li>SERIAL_TRACE_ENABLE&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga76936505ca200d2e61226b7ba68f27c6">mylibs_config.h</a></li>
<li>SW_OFF&#160;:&#160;<a class="el" href="group___g_p_i_o___i_n_i_t.html#gacd8900c9ec0efde1da3253b718574067">general_gpio.h</a></li>
<li>SW_ON&#160;:&#160;<a class="el" href="group___g_p_i_o___i_n_i_t.html#ga19d9e3aced311179a2914e0c9b13d0f9">general_gpio.h</a></li>
<li>SWO_TRACE_ENABLE&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gab8db9704b5d11858aa879689b9d36336">mylibs_config.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_t" name="index_t"></a>- t -</h3><ul>
<li>tern_assert_usertracker&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga39b6ffbc561f8caac276415e1ad32c30">trackers.h</a></li>
<li>TIM_Alternate_Mapping&#160;:&#160;<a class="el" href="group___g_p_i_o___g_e_n_e_r_a_l.html#ga34242874b455a72aa6e25841678ed105">general_gpio.h</a></li>
<li>TRACE_GPIO_RESET&#160;:&#160;<a class="el" href="group___t_r_a_c_e___g_p_i_o.html#ga69741d88c991112e99fe7a62e025108a">trace.h</a></li>
<li>TRACE_GPIO_SET&#160;:&#160;<a class="el" href="group___t_r_a_c_e___g_p_i_o.html#ga02a6a7b273766121db8ad4a1371373eb">trace.h</a></li>
<li>TrackerClear_All&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga704f7b9f8c65c9bcec48ce7cb77a2d3b">trackers.h</a></li>
<li>TrackerClear_Err&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#gae860b6947c6e317e14d40bd7b4b8eb74">trackers.h</a></li>
<li>TrackerClear_Ok&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga5dd8bac8c7ab5832019d55d7a68371b9">trackers.h</a></li>
<li>TrackerClear_User&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga063dab1067005e1600ea32531fdf3f8d">trackers.h</a></li>
<li>TrackerClear_UserAll&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#gaaec7ec19977bb26fa1919dfe920b82d5">trackers.h</a></li>
<li>TrackerClear_Warn&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga365a8c60bd13b75154feda649dd21ead">trackers.h</a></li>
<li>TrackerCnt_Err&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga49af29ab3927cad105c1d2b018a767e9">trackers.h</a></li>
<li>TrackerCnt_Ok&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga23de0006aa08984cfeddb6aa5e512fa1">trackers.h</a></li>
<li>TrackerCnt_User&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga1b7549afc4a1760b54a9b93b0f6d105e">trackers.h</a></li>
<li>TrackerCnt_Warn&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga8017fb05a56a1b667244f1f786fa9c57">trackers.h</a></li>
<li>TrackerGet_Err&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga9dc91e6b798a081f95f2ccef2c288e5e">trackers.h</a></li>
<li>TrackerGet_Ok&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#gab880911066605602a966641682090169">trackers.h</a></li>
<li>TrackerGet_User&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga4b08632669043dfdbd219dda03502bdb">trackers.h</a></li>
<li>TrackerGet_Warn&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga47ac59a406ee74d4cd9fe0fbaf63a758">trackers.h</a></li>
<li>TRACKERS_ENABLE&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gac9eaedc31ab023ce7d6403999216e496">mylibs_config.h</a></li>
<li>TrackerTypeDef&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga50ccb119acf302969b7fdcb58f2130e4">trackers.h</a></li>
<li>TrackerWrite_User&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#gad2f4062a9ac8c2ab062a364f640ebc51">trackers.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

226
Doc/html/globals_defs.html Normal file
View File

@ -0,0 +1,226 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: File Members</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('globals_defs.html','',''); });
</script>
<div id="container">
<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="contents">
<div class="textblock">Here is a list of all documented macros with links to the documentation:</div>
<h3 class="doxsection"><a id="index_a" name="index_a"></a>- a -</h3><ul>
<li>ABS&#160;:&#160;<a class="el" href="group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga996f7be338ccb40d1a2a5abc1ad61759">mylibs_defs.h</a></li>
<li>assert_usertracker&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#gadd7fd2c6e3a4800f1d5ddab35fd4b43e">trackers.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_b" name="index_b"></a>- b -</h3><ul>
<li>ByteSwap16&#160;:&#160;<a class="el" href="group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga0f22e895ac7781c3d1b68fee182c4291">mylibs_defs.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_c" name="index_c"></a>- c -</h3><ul>
<li>check_null_ptr_1&#160;:&#160;<a class="el" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga0b75f0bcf066acdf797b8e6730c52f86">mylibs_defs.h</a></li>
<li>check_null_ptr_2&#160;:&#160;<a class="el" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gae7d1cbb9075ee4b830342fd564d96be0">mylibs_defs.h</a></li>
<li>check_null_ptr_3&#160;:&#160;<a class="el" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga002f4a5f5d8bb37d88f607386bc6ba2e">mylibs_defs.h</a></li>
<li>check_null_ptr_4&#160;:&#160;<a class="el" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gade91c09d89a5f69003dcfe506ed0327f">mylibs_defs.h</a></li>
<li>check_null_ptr_5&#160;:&#160;<a class="el" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga944edcd2c65519578d36730b94701f64">mylibs_defs.h</a></li>
<li>ClearStruct&#160;:&#160;<a class="el" href="group___u_t_i_l_s___d_e_f_i_n_e_s.html#gaf5e598848326d48e86167e5099a029be">mylibs_defs.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_d" name="index_d"></a>- d -</h3><ul>
<li>Divide_Up&#160;:&#160;<a class="el" href="group___u_t_i_l_s___d_e_f_i_n_e_s.html#gabf45f2b60eedf80cf9d1dbe4302a741e">mylibs_defs.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_g" name="index_g"></a>- g -</h3><ul>
<li>GPIO_TRACE_ENABLE&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga4222e0e400ad81737cefcabeb03fd23b">mylibs_config.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_h" name="index_h"></a>- h -</h3><ul>
<li>HARDFAULT_SERIAL_TRACE&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga47f454f804b4dbc26cae079e8d8641e6">mylibs_config.h</a></li>
<li>HF_FLASH_ADDR&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga0c602733a4a359bf8c095d71cd4d0f63">mylibs_config.h</a></li>
<li>HF_RAM_END&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga92d0d14732edb7dfa21d483304bdb051">mylibs_config.h</a></li>
<li>HF_RTT_TAG_BASE&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gadc960255719c7eff4bdfaa850be9b313">mylibs_config.h</a></li>
<li>HF_RTT_TAIL_SIZE&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gafcc7ea03d4df8f1909e580b519a7f3ca">mylibs_config.h</a></li>
<li>HF_STACK_DUMP_WORDS&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gaa31234688b333a505aaa57b8ecdedf5b">mylibs_config.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_i" name="index_i"></a>- i -</h3><ul>
<li>if_assert_usertracker&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#gad91d8ca89074270fc040c0449e57cf07">trackers.h</a></li>
<li>INCLUDE_BIT_ACCESS_LIB&#160;:&#160;<a class="el" href="group___l_i_b_s___c_o_n_f_i_g.html#gaf4ddb2a71ec0d05c2480e197cd17c0be">mylibs_config.h</a></li>
<li>INCLUDE_GENERAL_PERIPH_LIBS&#160;:&#160;<a class="el" href="group___l_i_b_s___c_o_n_f_i_g.html#ga181a46326e46b60afb160190832c7281">mylibs_config.h</a></li>
<li>INCLUDE_TRACE_LIB&#160;:&#160;<a class="el" href="group___l_i_b_s___c_o_n_f_i_g.html#ga0a3ca94b616997069dd53e2c6c2687d7">mylibs_config.h</a></li>
<li>INCLUDE_TRACKERS_LIB&#160;:&#160;<a class="el" href="group___l_i_b_s___c_o_n_f_i_g.html#ga4403055986b70bb02b8d37073a122e32">mylibs_config.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_l" name="index_l"></a>- l -</h3><ul>
<li>LED_OFF&#160;:&#160;<a class="el" href="group___g_p_i_o___i_n_i_t.html#ga80700bb63bd56ebabbb4728aa433fd29">general_gpio.h</a></li>
<li>LED_ON&#160;:&#160;<a class="el" href="group___g_p_i_o___i_n_i_t.html#gaf2e697ac60e05813d45ea2c9c9e79c25">general_gpio.h</a></li>
<li>LED_PWM_TICKS&#160;:&#160;<a class="el" href="group___g_p_i_o___i_n_i_t.html#ga1d42e219765ec526d99e306638ac0023">general_gpio.h</a></li>
<li>LOG_LEVEL&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga0b87e0d3bf5853bcbb0b66a7c48fdc05">mylibs_config.h</a></li>
<li>log_printf&#160;:&#160;<a class="el" href="group___t_r_a_c_e___s_e_r_i_a_l.html#ga730fb7b8d0bbb348dca73c15bd0e0b26">trace.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_m" name="index_m"></a>- m -</h3><ul>
<li>msDelay&#160;:&#160;<a class="el" href="group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gabeb97579daeb622c6651ed03c4a27479">mylibs_defs.h</a></li>
<li>msDelayStart&#160;:&#160;<a class="el" href="group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga8a5051b1292d1019fe8dd3fc5521ab25">mylibs_defs.h</a></li>
<li>msDelayWaitDone&#160;:&#160;<a class="el" href="group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gaed082c07b9fc4d1894330d885b9b5518">mylibs_defs.h</a></li>
<li>msDelayWhileActive&#160;:&#160;<a class="el" href="group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga0b97e172659a59ee4fa56f851643ae85">mylibs_defs.h</a></li>
<li>my_printf&#160;:&#160;<a class="el" href="group___t_r_a_c_e___s_e_r_i_a_l.html#gae9b9b8a611e291a2f2aa5abf99f3ebaa">trace.h</a></li>
<li>MyLibs_Error_Handler&#160;:&#160;<a class="el" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gae110df81afd885a390bbeb152d7b709f">mylibs_defs.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_n" name="index_n"></a>- n -</h3><ul>
<li>num_of_usercnts&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga72be24629fedb8bf70e830373d151fbc">trackers.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_r" name="index_r"></a>- r -</h3><ul>
<li>RTT_FLASH_BUFFER_SIZE&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga501312b24e322de4dd6755ad442f0ba3">mylibs_config.h</a></li>
<li>RTT_FLASH_SECTOR&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga3bc1b76864e1d32cbdd174d4caae7724">mylibs_config.h</a></li>
<li>RTT_FLASH_SECTOR_END&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gafeca0be3688dea07ff443f894668003d">mylibs_config.h</a></li>
<li>RTT_FLASH_SECTOR_START&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga8e56f75d3ab8a89ddde1404ae23c3297">mylibs_config.h</a></li>
<li>RTT_TRACE_ENABLE&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga00ff2175bdc1fb11c8ec970ea3010dd8">mylibs_config.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_s" name="index_s"></a>- s -</h3><ul>
<li>SERIAL_TRACE_ENABLE&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga76936505ca200d2e61226b7ba68f27c6">mylibs_config.h</a></li>
<li>SW_OFF&#160;:&#160;<a class="el" href="group___g_p_i_o___i_n_i_t.html#gacd8900c9ec0efde1da3253b718574067">general_gpio.h</a></li>
<li>SW_ON&#160;:&#160;<a class="el" href="group___g_p_i_o___i_n_i_t.html#ga19d9e3aced311179a2914e0c9b13d0f9">general_gpio.h</a></li>
<li>SWO_TRACE_ENABLE&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gab8db9704b5d11858aa879689b9d36336">mylibs_config.h</a></li>
</ul>
<h3 class="doxsection"><a id="index_t" name="index_t"></a>- t -</h3><ul>
<li>tern_assert_usertracker&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga39b6ffbc561f8caac276415e1ad32c30">trackers.h</a></li>
<li>TIM_Alternate_Mapping&#160;:&#160;<a class="el" href="group___g_p_i_o___g_e_n_e_r_a_l.html#ga34242874b455a72aa6e25841678ed105">general_gpio.h</a></li>
<li>TRACE_GPIO_RESET&#160;:&#160;<a class="el" href="group___t_r_a_c_e___g_p_i_o.html#ga69741d88c991112e99fe7a62e025108a">trace.h</a></li>
<li>TRACE_GPIO_SET&#160;:&#160;<a class="el" href="group___t_r_a_c_e___g_p_i_o.html#ga02a6a7b273766121db8ad4a1371373eb">trace.h</a></li>
<li>TrackerClear_All&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga704f7b9f8c65c9bcec48ce7cb77a2d3b">trackers.h</a></li>
<li>TrackerClear_Err&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#gae860b6947c6e317e14d40bd7b4b8eb74">trackers.h</a></li>
<li>TrackerClear_Ok&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga5dd8bac8c7ab5832019d55d7a68371b9">trackers.h</a></li>
<li>TrackerClear_User&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga063dab1067005e1600ea32531fdf3f8d">trackers.h</a></li>
<li>TrackerClear_UserAll&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#gaaec7ec19977bb26fa1919dfe920b82d5">trackers.h</a></li>
<li>TrackerClear_Warn&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga365a8c60bd13b75154feda649dd21ead">trackers.h</a></li>
<li>TrackerCnt_Err&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga49af29ab3927cad105c1d2b018a767e9">trackers.h</a></li>
<li>TrackerCnt_Ok&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga23de0006aa08984cfeddb6aa5e512fa1">trackers.h</a></li>
<li>TrackerCnt_User&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga1b7549afc4a1760b54a9b93b0f6d105e">trackers.h</a></li>
<li>TrackerCnt_Warn&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga8017fb05a56a1b667244f1f786fa9c57">trackers.h</a></li>
<li>TrackerGet_Err&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga9dc91e6b798a081f95f2ccef2c288e5e">trackers.h</a></li>
<li>TrackerGet_Ok&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#gab880911066605602a966641682090169">trackers.h</a></li>
<li>TrackerGet_User&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga4b08632669043dfdbd219dda03502bdb">trackers.h</a></li>
<li>TrackerGet_Warn&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga47ac59a406ee74d4cd9fe0fbaf63a758">trackers.h</a></li>
<li>TRACKERS_ENABLE&#160;:&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gac9eaedc31ab023ce7d6403999216e496">mylibs_config.h</a></li>
<li>TrackerTypeDef&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#ga50ccb119acf302969b7fdcb58f2130e4">trackers.h</a></li>
<li>TrackerWrite_User&#160;:&#160;<a class="el" href="group___t_r_a_c_k_e_r_s.html#gad2f4062a9ac8c2ab062a364f640ebc51">trackers.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

113
Doc/html/globals_enum.html Normal file
View File

@ -0,0 +1,113 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: File Members</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('globals_enum.html','',''); });
</script>
<div id="container">
<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="contents">
<div class="textblock">Here is a list of all documented enums with links to the documentation:</div><ul>
<li>GPIO_LEDStateTypeDef&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#gaac2b90d8b8c9579b6aa5d3bbda9b1ff1">general_gpio.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

116
Doc/html/globals_eval.html Normal file
View File

@ -0,0 +1,116 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: File Members</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('globals_eval.html','',''); });
</script>
<div id="container">
<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="contents">
<div class="textblock">Here is a list of all documented enum values with links to the documentation:</div><ul>
<li>LED_IS_BLINKING&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a2445895bed5dcbedc82ea3ef02bec6fb">general_gpio.h</a></li>
<li>LED_IS_FADING&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1aa610f6df44c939aa7d45e318036fa03b">general_gpio.h</a></li>
<li>LED_IS_OFF&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a74276cd2464314e422e8a144483f74ae">general_gpio.h</a></li>
<li>LED_IS_ON&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1af6abfb9c5b95abbdb239590f2cd245ea">general_gpio.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

128
Doc/html/globals_func.html Normal file
View File

@ -0,0 +1,128 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: File Members</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('globals_func.html','',''); });
</script>
<div id="container">
<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="contents">
<div class="textblock">Here is a list of all documented functions with links to the documentation:</div><ul>
<li>GPIO_Clock_Enable()&#160;:&#160;<a class="el" href="group___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6">general_gpio.h</a>, <a class="el" href="group___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6">general_gpio.c</a></li>
<li>GPIO_LED_Blink_Start()&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9">general_gpio.h</a>, <a class="el" href="group___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9">general_gpio.c</a></li>
<li>GPIO_LED_Dynamic_Handle()&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2">general_gpio.h</a>, <a class="el" href="group___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2">general_gpio.c</a></li>
<li>GPIO_LED_Fading_Start()&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a">general_gpio.h</a>, <a class="el" href="group___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a">general_gpio.c</a></li>
<li>GPIO_LED_Init()&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084">general_gpio.h</a>, <a class="el" href="group___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084">general_gpio.c</a></li>
<li>GPIO_LED_Off()&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357">general_gpio.h</a>, <a class="el" href="group___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357">general_gpio.c</a></li>
<li>GPIO_LED_On()&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c">general_gpio.h</a>, <a class="el" href="group___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c">general_gpio.c</a></li>
<li>GPIO_LED_Set()&#160;:&#160;<a class="el" href="group___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2">general_gpio.h</a>, <a class="el" href="group___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2">general_gpio.c</a></li>
<li>GPIO_Read_Switch()&#160;:&#160;<a class="el" href="group___g_p_i_o___s_w_i_t_c_h.html#ga4b6b8be19a9265bfee6b2bb8a68e988f">general_gpio.h</a>, <a class="el" href="group___g_p_i_o___s_w_i_t_c_h.html#ga4b6b8be19a9265bfee6b2bb8a68e988f">general_gpio.c</a></li>
<li>GPIO_Switch_Init()&#160;:&#160;<a class="el" href="group___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7">general_gpio.h</a>, <a class="el" href="group___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7">general_gpio.c</a></li>
<li>HF_CheckRecovered()&#160;:&#160;<a class="el" href="group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html#ga03f8b6f3b537ee1c8e91065c60db504f">trace.h</a></li>
<li>HF_HandleFault()&#160;:&#160;<a class="el" href="group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html#gadd8e10e7ec3b0204f7f92062ecd452f7">trace.h</a></li>
<li>RTT_EraseFlash()&#160;:&#160;<a class="el" href="group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga8d8c6850e32b42871faefce3352012d1">trace.h</a></li>
<li>RTT_FlashPrepare()&#160;:&#160;<a class="el" href="group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga21353cb4f5af666237739e62ce019cd6">trace.h</a></li>
<li>RTT_ReadFromFlash()&#160;:&#160;<a class="el" href="group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga734b2ebbf0c77699b739013878cfd146">trace.h</a></li>
<li>RTT_SaveToFlash()&#160;:&#160;<a class="el" href="group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga79f222c8ab644de4d47f07528d1edd63">trace.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,307 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: Bit access defines</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html','',''); });
</script>
<div id="container">
<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">Bit access defines <div class="ingroups"><a class="el" href="group___m_y_l_i_b_s___a_l_l.html">My Libs</a> &raquo; <a class="el" href="group___m_y_l_i_b_s___d_e_f_i_n_e_s.html">General Defines</a></div></div></div>
</div><!--header-->
<div class="contents">
<p>Макросы и typedef'ы для работы с битами в unsigned типах.
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-nested-classes" class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:uint8_5FBitTypeDef" id="r_uint8_5FBitTypeDef"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="unionuint8___bit_type_def.html">uint8_BitTypeDef</a></td></tr>
<tr class="memitem:uint16_5FBitTypeDef" id="r_uint16_5FBitTypeDef"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="unionuint16___bit_type_def.html">uint16_BitTypeDef</a></td></tr>
<tr class="memitem:uint32_5FBitTypeDef" id="r_uint32_5FBitTypeDef"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="unionuint32___bit_type_def.html">uint32_BitTypeDef</a></td></tr>
<tr class="memitem:uint64_5FBitTypeDef" id="r_uint64_5FBitTypeDef"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="unionuint64___bit_type_def.html">uint64_BitTypeDef</a></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-define-members" class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ga57dc3bb3472a66fc92312f89d42d2396" id="r_ga57dc3bb3472a66fc92312f89d42d2396"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga57dc3bb3472a66fc92312f89d42d2396">uint8_bit</a>(_uint8_, _bit_)</td></tr>
<tr class="memdesc:ga57dc3bb3472a66fc92312f89d42d2396"><td class="mdescLeft">&#160;</td><td class="mdescRight">Получить n-й бит из uint8_t. <br /></td></tr>
<tr class="memitem:ga6a122b536ad99ae611c8cf01437af086" id="r_ga6a122b536ad99ae611c8cf01437af086"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga6a122b536ad99ae611c8cf01437af086">uint16_bit</a>(_uint8_, _bit_)</td></tr>
<tr class="memdesc:ga6a122b536ad99ae611c8cf01437af086"><td class="mdescLeft">&#160;</td><td class="mdescRight">Получить n-й бит из uint16_t. <br /></td></tr>
<tr class="memitem:gafaa2080168b1b6f7281e8bfabab022d1" id="r_gafaa2080168b1b6f7281e8bfabab022d1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gafaa2080168b1b6f7281e8bfabab022d1">uint32_bit</a>(_uint8_, _bit_)</td></tr>
<tr class="memdesc:gafaa2080168b1b6f7281e8bfabab022d1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Получить n-й бит из uint32_t. <br /></td></tr>
<tr class="memitem:ga47eb69ce9330a1c73fe8031240f02f0a" id="r_ga47eb69ce9330a1c73fe8031240f02f0a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga47eb69ce9330a1c73fe8031240f02f0a">uint64_bit</a>(_uint8_, _bit_)</td></tr>
<tr class="memdesc:ga47eb69ce9330a1c73fe8031240f02f0a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Получить n-й бит из uint64_t. <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>Макросы и typedef'ы для работы с битами в unsigned типах. </p>
<p>В этом файле определены макросы для получения значения конкретного бита^</p><ul>
<li><a class="el" href="#ga57dc3bb3472a66fc92312f89d42d2396">uint8_bit</a></li>
<li><a class="el" href="#ga6a122b536ad99ae611c8cf01437af086">uint16_bit</a></li>
<li><a class="el" href="#gafaa2080168b1b6f7281e8bfabab022d1">uint32_bit</a></li>
<li><a class="el" href="#ga47eb69ce9330a1c73fe8031240f02f0a">uint64_bit</a></li>
</ul>
<p>Особенности использования:</p><ul>
<li>Индекс бита должен быть <b>константой на этапе компиляции</b>. Пример верного использования: <div class="fragment"><div class="line">uint8_t val = 0x05;</div>
<div class="line">uint8_t b2 = <a class="code hl_define" href="#ga57dc3bb3472a66fc92312f89d42d2396">uint8_bit</a>(val, 2); <span class="comment">// Получить бит 2</span></div>
<div class="line"><a class="code hl_define" href="#ga57dc3bb3472a66fc92312f89d42d2396">uint8_bit</a>(val, 6) = 1; <span class="comment">// Записать бит 6</span></div>
<div class="ttc" id="agroup___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s_html_ga57dc3bb3472a66fc92312f89d42d2396"><div class="ttname"><a href="#ga57dc3bb3472a66fc92312f89d42d2396">uint8_bit</a></div><div class="ttdeci">#define uint8_bit(_uint8_, _bit_)</div><div class="ttdoc">Получить n-й бит из uint8_t.</div><div class="ttdef"><b>Definition</b> <a href="bit__access_8h_source.html#l00129">bit_access.h:129</a></div></div>
</div><!-- fragment --></li>
<li>Нельзя использовать переменные в качестве индекса: <div class="fragment"><div class="line">uint8_t i = 2;</div>
<div class="line"><a class="code hl_define" href="#ga57dc3bb3472a66fc92312f89d42d2396">uint8_bit</a>(val, i); <span class="comment">// Не сработает!</span></div>
</div><!-- fragment --></li>
<li>Макросы возвращают 0 или 1.</li>
<li>Доступ реализован через приведение к <span class="tt">union</span> с битовыми полями, поэтому это безопасный способ работы с отдельными битами без ручного сдвига и маскирования. </li>
</ul>
<a name="doc-define-members" id="doc-define-members"></a><h2 id="header-doc-define-members" class="groupheader">Macro Definition Documentation</h2>
<a id="ga57dc3bb3472a66fc92312f89d42d2396" name="ga57dc3bb3472a66fc92312f89d42d2396"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga57dc3bb3472a66fc92312f89d42d2396">&#9670;&#160;</a></span>uint8_bit</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define uint8_bit</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_uint8_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_bit_</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(*(<a class="code hl_union" href="unionuint8___bit_type_def.html">uint8_BitTypeDef</a> *)(&amp;(_uint8_))).bit.bit##_bit_</div>
<div class="ttc" id="aunionuint8___bit_type_def_html"><div class="ttname"><a href="unionuint8___bit_type_def.html">uint8_BitTypeDef</a></div><div class="ttdef"><b>Definition</b> <a href="bit__access_8h_source.html#l00039">bit_access.h:40</a></div></div>
</div><!-- fragment -->
<p>Получить n-й бит из uint8_t. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">_uint8_</td><td>Переменная типа uint8_t </td></tr>
<tr><td class="paramname">_bit_</td><td>Константный номер бита (0..7) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Значение выбранного бита (0 или 1) </dd></dl>
<dl class="section note"><dt>Note</dt><dd>Индекс бита должен быть известен на этапе компиляции! </dd></dl>
<p class="definition">Definition at line <a class="el" href="bit__access_8h_source.html#l00129">129</a> of file <a class="el" href="bit__access_8h_source.html">bit_access.h</a>.</p>
</div>
</div>
<a id="ga6a122b536ad99ae611c8cf01437af086" name="ga6a122b536ad99ae611c8cf01437af086"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga6a122b536ad99ae611c8cf01437af086">&#9670;&#160;</a></span>uint16_bit</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define uint16_bit</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_uint8_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_bit_</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(*(<a class="code hl_union" href="unionuint16___bit_type_def.html">uint16_BitTypeDef</a> *)(&amp;(_uint8_))).bit.bit##_bit_</div>
<div class="ttc" id="aunionuint16___bit_type_def_html"><div class="ttname"><a href="unionuint16___bit_type_def.html">uint16_BitTypeDef</a></div><div class="ttdef"><b>Definition</b> <a href="bit__access_8h_source.html#l00055">bit_access.h:56</a></div></div>
</div><!-- fragment -->
<p>Получить n-й бит из uint16_t. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">_uint16_</td><td>Переменная типа uint16_t </td></tr>
<tr><td class="paramname">_bit_</td><td>Константный номер бита (0..15) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Значение выбранного бита (0 или 1) </dd></dl>
<dl class="section note"><dt>Note</dt><dd>Индекс бита должен быть известен на этапе компиляции! </dd></dl>
<p class="definition">Definition at line <a class="el" href="bit__access_8h_source.html#l00137">137</a> of file <a class="el" href="bit__access_8h_source.html">bit_access.h</a>.</p>
</div>
</div>
<a id="gafaa2080168b1b6f7281e8bfabab022d1" name="gafaa2080168b1b6f7281e8bfabab022d1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gafaa2080168b1b6f7281e8bfabab022d1">&#9670;&#160;</a></span>uint32_bit</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define uint32_bit</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_uint8_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_bit_</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(*(<a class="code hl_union" href="unionuint32___bit_type_def.html">uint32_BitTypeDef</a> *)(&amp;(_uint8_))).bit.bit##_bit_</div>
<div class="ttc" id="aunionuint32___bit_type_def_html"><div class="ttname"><a href="unionuint32___bit_type_def.html">uint32_BitTypeDef</a></div><div class="ttdef"><b>Definition</b> <a href="bit__access_8h_source.html#l00080">bit_access.h:81</a></div></div>
</div><!-- fragment -->
<p>Получить n-й бит из uint32_t. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">_uint32_</td><td>Переменная типа uint32_t </td></tr>
<tr><td class="paramname">_bit_</td><td>Константный номер бита (0..31) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Значение выбранного бита (0 или 1) </dd></dl>
<dl class="section note"><dt>Note</dt><dd>Индекс бита должен быть известен на этапе компиляции! </dd></dl>
<p class="definition">Definition at line <a class="el" href="bit__access_8h_source.html#l00145">145</a> of file <a class="el" href="bit__access_8h_source.html">bit_access.h</a>.</p>
</div>
</div>
<a id="ga47eb69ce9330a1c73fe8031240f02f0a" name="ga47eb69ce9330a1c73fe8031240f02f0a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga47eb69ce9330a1c73fe8031240f02f0a">&#9670;&#160;</a></span>uint64_bit</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define uint64_bit</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_uint8_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_bit_</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(*(<a class="code hl_union" href="unionuint64___bit_type_def.html">uint64_BitTypeDef</a> *)(&amp;(_uint8_))).bit.bit##_bit_</div>
<div class="ttc" id="aunionuint64___bit_type_def_html"><div class="ttname"><a href="unionuint64___bit_type_def.html">uint64_BitTypeDef</a></div><div class="ttdef"><b>Definition</b> <a href="bit__access_8h_source.html#l00097">bit_access.h:98</a></div></div>
</div><!-- fragment -->
<p>Получить n-й бит из uint64_t. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">_uint64_</td><td>Переменная типа uint64_t </td></tr>
<tr><td class="paramname">_bit_</td><td>Константный номер бита (0..63) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Значение выбранного бита (0 или 1) </dd></dl>
<dl class="section note"><dt>Note</dt><dd>Индекс бита должен быть известен на этапе компиляции! </dd></dl>
<p class="definition">Definition at line <a class="el" href="bit__access_8h_source.html#l00153">153</a> of file <a class="el" href="bit__access_8h_source.html">bit_access.h</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,11 @@
var group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s =
[
[ "uint8_BitTypeDef", "unionuint8___bit_type_def.html", null ],
[ "uint16_BitTypeDef", "unionuint16___bit_type_def.html", null ],
[ "uint32_BitTypeDef", "unionuint32___bit_type_def.html", null ],
[ "uint64_BitTypeDef", "unionuint64___bit_type_def.html", null ],
[ "uint8_bit", "group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#ga57dc3bb3472a66fc92312f89d42d2396", null ],
[ "uint16_bit", "group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#ga6a122b536ad99ae611c8cf01437af086", null ],
[ "uint32_bit", "group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#gafaa2080168b1b6f7281e8bfabab022d1", null ],
[ "uint64_bit", "group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#ga47eb69ce9330a1c73fe8031240f02f0a", null ]
];

View File

@ -0,0 +1,291 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: Delays defines</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('group___d_e_l_a_y_s___d_e_f_i_n_e_s.html','',''); });
</script>
<div id="container">
<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">Delays defines <div class="ingroups"><a class="el" href="group___m_y_l_i_b_s___a_l_l.html">My Libs</a> &raquo; <a class="el" href="group___m_y_l_i_b_s___d_e_f_i_n_e_s.html">General Defines</a></div></div></div>
</div><!--header-->
<div class="contents">
<p>Макросы и определения для работы с задержками в миллисекундах.
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-define-members" class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:gabeb97579daeb622c6651ed03c4a27479" id="r_gabeb97579daeb622c6651ed03c4a27479"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gabeb97579daeb622c6651ed03c4a27479">msDelay</a>(_ms_)</td></tr>
<tr class="memdesc:gabeb97579daeb622c6651ed03c4a27479"><td class="mdescLeft">&#160;</td><td class="mdescRight">Задержка на указанное количество миллисекунд. <br /></td></tr>
<tr class="memitem:ga8a5051b1292d1019fe8dd3fc5521ab25" id="r_ga8a5051b1292d1019fe8dd3fc5521ab25"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga8a5051b1292d1019fe8dd3fc5521ab25">msDelayStart</a>(_pvar_)</td></tr>
<tr class="memdesc:ga8a5051b1292d1019fe8dd3fc5521ab25"><td class="mdescLeft">&#160;</td><td class="mdescRight">Начать отсчет задержки. <br /></td></tr>
<tr class="memitem:ga0b97e172659a59ee4fa56f851643ae85" id="r_ga0b97e172659a59ee4fa56f851643ae85"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga0b97e172659a59ee4fa56f851643ae85">msDelayWhileActive</a>(_ms_, _pvar_)</td></tr>
<tr class="memdesc:ga0b97e172659a59ee4fa56f851643ae85"><td class="mdescLeft">&#160;</td><td class="mdescRight">Проверяет, активна ли задержка. <br /></td></tr>
<tr class="memitem:gaed082c07b9fc4d1894330d885b9b5518" id="r_gaed082c07b9fc4d1894330d885b9b5518"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gaed082c07b9fc4d1894330d885b9b5518">msDelayWaitDone</a>(_ms_, _pvar_)</td></tr>
<tr class="memdesc:gaed082c07b9fc4d1894330d885b9b5518"><td class="mdescLeft">&#160;</td><td class="mdescRight">Проверяет, завершилась ли задержка. <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>Макросы и определения для работы с задержками в миллисекундах. </p>
<p>Этот блок содержит макросы для реализации задержек с использованием HAL или FreeRTOS:</p><ul>
<li><a class="el" href="#gabeb97579daeb622c6651ed03c4a27479">msDelay</a> — простая задержка заданной длительности;</li>
<li><a class="el" href="#ga8a5051b1292d1019fe8dd3fc5521ab25">msDelayStart</a> — сохранение текущего времени начала задержки;</li>
<li><a class="el" href="#ga0b97e172659a59ee4fa56f851643ae85">msDelayWhileActive</a> — проверка, активна ли задержка;</li>
<li><a class="el" href="#gaed082c07b9fc4d1894330d885b9b5518">msDelayWaitDone</a> — проверка, завершена ли задержка. Эти макросы удобны для реализации неблокирующих задержек. </li>
</ul>
<a name="doc-define-members" id="doc-define-members"></a><h2 id="header-doc-define-members" class="groupheader">Macro Definition Documentation</h2>
<a id="gabeb97579daeb622c6651ed03c4a27479" name="gabeb97579daeb622c6651ed03c4a27479"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gabeb97579daeb622c6651ed03c4a27479">&#9670;&#160;</a></span>msDelay</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define msDelay</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_ms_</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">HAL_Delay(_ms_)</div>
</div><!-- fragment -->
<p>Задержка на указанное количество миллисекунд. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">_ms_</td><td>Время задержки в миллисекундах. </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>Использует HAL_Delay или osDelay в зависимости от FREERTOS_DELAY. </dd></dl>
<p class="definition">Definition at line <a class="el" href="mylibs__defs_8h_source.html#l00082">82</a> of file <a class="el" href="mylibs__defs_8h_source.html">mylibs_defs.h</a>.</p>
</div>
</div>
<a id="ga8a5051b1292d1019fe8dd3fc5521ab25" name="ga8a5051b1292d1019fe8dd3fc5521ab25"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga8a5051b1292d1019fe8dd3fc5521ab25">&#9670;&#160;</a></span>msDelayStart</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define msDelayStart</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_pvar_</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">*(_pvar_) = HAL_GetTick()</div>
</div><!-- fragment -->
<p>Начать отсчет задержки. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">_pvar_</td><td>Указатель на переменную типа uint32_t для хранения времени старта.</td></tr>
</table>
</dd>
</dl>
<p>После вызова этого макроса переменная <em>pvar</em> содержит текущее количество миллисекунд с момента запуска системы (HAL_GetTick).</p>
<p>Используется для реализации неблокирующих задержек. </p>
<p class="definition">Definition at line <a class="el" href="mylibs__defs_8h_source.html#l00094">94</a> of file <a class="el" href="mylibs__defs_8h_source.html">mylibs_defs.h</a>.</p>
</div>
</div>
<a id="ga0b97e172659a59ee4fa56f851643ae85" name="ga0b97e172659a59ee4fa56f851643ae85"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga0b97e172659a59ee4fa56f851643ae85">&#9670;&#160;</a></span>msDelayWhileActive</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define msDelayWhileActive</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_ms_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_pvar_</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(HAL_GetTick() - *(_pvar_) &lt; _ms_)</div>
</div><!-- fragment -->
<p>Проверяет, активна ли задержка. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">_ms_</td><td>Длительность задержки в миллисекундах. </td></tr>
<tr><td class="paramname">_pvar_</td><td>Указатель на переменную, в которой сохранено время начала (<a class="el" href="#ga8a5051b1292d1019fe8dd3fc5521ab25">msDelayStart</a>). </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">1</td><td>Задержка еще активна. </td></tr>
<tr><td class="paramname">0</td><td>Задержка завершена.</td></tr>
</table>
</dd>
</dl>
<p>Возвращает true, пока время задержки не истекло. Используется в проверках, когда нужно <b>действовать, пока задержка выполняется</b>. Пример: </p><div class="fragment"><div class="line"><span class="keywordflow">while</span>(<a class="code hl_define" href="#ga0b97e172659a59ee4fa56f851643ae85">msDelayWhileActive</a>(1000, &amp;tick)) {</div>
<div class="line"> <span class="comment">// выполняем другие задачи, задержка не блокирует поток</span></div>
<div class="line">}</div>
<div class="ttc" id="agroup___d_e_l_a_y_s___d_e_f_i_n_e_s_html_ga0b97e172659a59ee4fa56f851643ae85"><div class="ttname"><a href="#ga0b97e172659a59ee4fa56f851643ae85">msDelayWhileActive</a></div><div class="ttdeci">#define msDelayWhileActive(_ms_, _pvar_)</div><div class="ttdoc">Проверяет, активна ли задержка.</div><div class="ttdef"><b>Definition</b> <a href="mylibs__defs_8h_source.html#l00111">mylibs_defs.h:111</a></div></div>
</div><!-- fragment -->
<p class="definition">Definition at line <a class="el" href="mylibs__defs_8h_source.html#l00111">111</a> of file <a class="el" href="mylibs__defs_8h_source.html">mylibs_defs.h</a>.</p>
</div>
</div>
<a id="gaed082c07b9fc4d1894330d885b9b5518" name="gaed082c07b9fc4d1894330d885b9b5518"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaed082c07b9fc4d1894330d885b9b5518">&#9670;&#160;</a></span>msDelayWaitDone</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define msDelayWaitDone</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_ms_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_pvar_</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(HAL_GetTick() - *(_pvar_) &gt;= _ms_)</div>
</div><!-- fragment -->
<p>Проверяет, завершилась ли задержка. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">_ms_</td><td>Длительность задержки в миллисекундах. </td></tr>
<tr><td class="paramname">_pvar_</td><td>Указатель на переменную, в которой сохранено время начала (msDelayStart). </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">1</td><td>Задержка завершена. </td></tr>
<tr><td class="paramname">0</td><td>Задержка еще активна.</td></tr>
</table>
</dd>
</dl>
<p>Возвращает true, когда задержка уже завершена. Используется в проверках, когда нужно <b>выполнить действие только после окончания задержки</b>. Пример: </p><div class="fragment"><div class="line"><span class="keywordflow">if</span>(<a class="code hl_define" href="#gaed082c07b9fc4d1894330d885b9b5518">msDelayWaitDone</a>(1000, &amp;tick)) {</div>
<div class="line"> <span class="comment">// выполняем действие после завершения задержки</span></div>
<div class="line">}</div>
<div class="ttc" id="agroup___d_e_l_a_y_s___d_e_f_i_n_e_s_html_gaed082c07b9fc4d1894330d885b9b5518"><div class="ttname"><a href="#gaed082c07b9fc4d1894330d885b9b5518">msDelayWaitDone</a></div><div class="ttdeci">#define msDelayWaitDone(_ms_, _pvar_)</div><div class="ttdoc">Проверяет, завершилась ли задержка.</div><div class="ttdef"><b>Definition</b> <a href="mylibs__defs_8h_source.html#l00128">mylibs_defs.h:128</a></div></div>
</div><!-- fragment -->
<p class="definition">Definition at line <a class="el" href="mylibs__defs_8h_source.html#l00128">128</a> of file <a class="el" href="mylibs__defs_8h_source.html">mylibs_defs.h</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,7 @@
var group___d_e_l_a_y_s___d_e_f_i_n_e_s =
[
[ "msDelay", "group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gabeb97579daeb622c6651ed03c4a27479", null ],
[ "msDelayStart", "group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga8a5051b1292d1019fe8dd3fc5521ab25", null ],
[ "msDelayWhileActive", "group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga0b97e172659a59ee4fa56f851643ae85", null ],
[ "msDelayWaitDone", "group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gaed082c07b9fc4d1894330d885b9b5518", null ]
];

View File

@ -0,0 +1,325 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: Error Handler defines</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html','',''); });
</script>
<div id="container">
<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">Error Handler defines <div class="ingroups"><a class="el" href="group___m_y_l_i_b_s___a_l_l.html">My Libs</a> &raquo; <a class="el" href="group___m_y_l_i_b_s___d_e_f_i_n_e_s.html">General Defines</a></div></div></div>
</div><!--header-->
<div class="contents">
<p>Дефайны для обработки ошибок
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-define-members" class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:gae110df81afd885a390bbeb152d7b709f" id="r_gae110df81afd885a390bbeb152d7b709f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gae110df81afd885a390bbeb152d7b709f">MyLibs_Error_Handler</a>(params)</td></tr>
<tr class="memdesc:gae110df81afd885a390bbeb152d7b709f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Error_Handler который будет вызыватся в библиотеке <br /></td></tr>
<tr class="memitem:ga0b75f0bcf066acdf797b8e6730c52f86" id="r_ga0b75f0bcf066acdf797b8e6730c52f86"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga0b75f0bcf066acdf797b8e6730c52f86">check_null_ptr_1</a>(_p1_)</td></tr>
<tr class="memdesc:ga0b75f0bcf066acdf797b8e6730c52f86"><td class="mdescLeft">&#160;</td><td class="mdescRight">Проверить указатель на NULL. <br /></td></tr>
<tr class="memitem:gae7d1cbb9075ee4b830342fd564d96be0" id="r_gae7d1cbb9075ee4b830342fd564d96be0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gae7d1cbb9075ee4b830342fd564d96be0">check_null_ptr_2</a>(_p1_, _p2_)</td></tr>
<tr class="memdesc:gae7d1cbb9075ee4b830342fd564d96be0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Проверить два указателя на NULL. <br /></td></tr>
<tr class="memitem:ga002f4a5f5d8bb37d88f607386bc6ba2e" id="r_ga002f4a5f5d8bb37d88f607386bc6ba2e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga002f4a5f5d8bb37d88f607386bc6ba2e">check_null_ptr_3</a>(_p1_, _p2_, _p3_)</td></tr>
<tr class="memdesc:ga002f4a5f5d8bb37d88f607386bc6ba2e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Проверить три указателя на NULL. <br /></td></tr>
<tr class="memitem:gade91c09d89a5f69003dcfe506ed0327f" id="r_gade91c09d89a5f69003dcfe506ed0327f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gade91c09d89a5f69003dcfe506ed0327f">check_null_ptr_4</a>(_p1_, _p2_, _p3_, _p4_)</td></tr>
<tr class="memdesc:gade91c09d89a5f69003dcfe506ed0327f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Проверить четыре указателя на NULL. <br /></td></tr>
<tr class="memitem:ga944edcd2c65519578d36730b94701f64" id="r_ga944edcd2c65519578d36730b94701f64"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga944edcd2c65519578d36730b94701f64">check_null_ptr_5</a>(_p1_, _p2_, _p3_, _p4_, _p5_)</td></tr>
<tr class="memdesc:ga944edcd2c65519578d36730b94701f64"><td class="mdescLeft">&#160;</td><td class="mdescRight">Проверить пять указателей на NULL. <br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga1730ffe1e560465665eb47d9264826f9" id="r_ga1730ffe1e560465665eb47d9264826f9"><td class="memItemLeft" align="right" valign="top"><a id="ga1730ffe1e560465665eb47d9264826f9" name="ga1730ffe1e560465665eb47d9264826f9"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>Error_Handler</b> (void)</td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>Дефайны для обработки ошибок </p>
<a name="doc-define-members" id="doc-define-members"></a><h2 id="header-doc-define-members" class="groupheader">Macro Definition Documentation</h2>
<a id="gae110df81afd885a390bbeb152d7b709f" name="gae110df81afd885a390bbeb152d7b709f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gae110df81afd885a390bbeb152d7b709f">&#9670;&#160;</a></span>MyLibs_Error_Handler</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MyLibs_Error_Handler</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>params</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">Error_Handler(params)</div>
</div><!-- fragment -->
<p>Error_Handler который будет вызыватся в библиотеке </p>
<p class="definition">Definition at line <a class="el" href="mylibs__defs_8h_source.html#l00031">31</a> of file <a class="el" href="mylibs__defs_8h_source.html">mylibs_defs.h</a>.</p>
</div>
</div>
<a id="ga0b75f0bcf066acdf797b8e6730c52f86" name="ga0b75f0bcf066acdf797b8e6730c52f86"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga0b75f0bcf066acdf797b8e6730c52f86">&#9670;&#160;</a></span>check_null_ptr_1</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define check_null_ptr_1</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_p1_</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(_p1_ == NULL)</div>
</div><!-- fragment -->
<p>Проверить указатель на NULL. </p>
<p class="definition">Definition at line <a class="el" href="mylibs__defs_8h_source.html#l00038">38</a> of file <a class="el" href="mylibs__defs_8h_source.html">mylibs_defs.h</a>.</p>
</div>
</div>
<a id="gae7d1cbb9075ee4b830342fd564d96be0" name="gae7d1cbb9075ee4b830342fd564d96be0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gae7d1cbb9075ee4b830342fd564d96be0">&#9670;&#160;</a></span>check_null_ptr_2</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define check_null_ptr_2</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_p1_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_p2_</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">((_p1_ == NULL) || (_p2_ == NULL))</div>
</div><!-- fragment -->
<p>Проверить два указателя на NULL. </p>
<p class="definition">Definition at line <a class="el" href="mylibs__defs_8h_source.html#l00040">40</a> of file <a class="el" href="mylibs__defs_8h_source.html">mylibs_defs.h</a>.</p>
</div>
</div>
<a id="ga002f4a5f5d8bb37d88f607386bc6ba2e" name="ga002f4a5f5d8bb37d88f607386bc6ba2e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga002f4a5f5d8bb37d88f607386bc6ba2e">&#9670;&#160;</a></span>check_null_ptr_3</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define check_null_ptr_3</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_p1_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_p2_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_p3_</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">((_p1_ == NULL) || (_p2_ == NULL) || (_p3_ == NULL))</div>
</div><!-- fragment -->
<p>Проверить три указателя на NULL. </p>
<p class="definition">Definition at line <a class="el" href="mylibs__defs_8h_source.html#l00042">42</a> of file <a class="el" href="mylibs__defs_8h_source.html">mylibs_defs.h</a>.</p>
</div>
</div>
<a id="gade91c09d89a5f69003dcfe506ed0327f" name="gade91c09d89a5f69003dcfe506ed0327f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gade91c09d89a5f69003dcfe506ed0327f">&#9670;&#160;</a></span>check_null_ptr_4</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define check_null_ptr_4</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_p1_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_p2_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_p3_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_p4_</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">((_p1_ == NULL) || (_p2_ == NULL) || (_p3_ == NULL) || (_p4_ == NULL))</div>
</div><!-- fragment -->
<p>Проверить четыре указателя на NULL. </p>
<p class="definition">Definition at line <a class="el" href="mylibs__defs_8h_source.html#l00044">44</a> of file <a class="el" href="mylibs__defs_8h_source.html">mylibs_defs.h</a>.</p>
</div>
</div>
<a id="ga944edcd2c65519578d36730b94701f64" name="ga944edcd2c65519578d36730b94701f64"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga944edcd2c65519578d36730b94701f64">&#9670;&#160;</a></span>check_null_ptr_5</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define check_null_ptr_5</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_p1_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_p2_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_p3_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_p4_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_p5_</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">((_p1_ == NULL) || (_p2_ == NULL) || (_p3_ == NULL) || (_p4_ == NULL) || (_p5_ == NULL))</div>
</div><!-- fragment -->
<p>Проверить пять указателей на NULL. </p>
<p class="definition">Definition at line <a class="el" href="mylibs__defs_8h_source.html#l00046">46</a> of file <a class="el" href="mylibs__defs_8h_source.html">mylibs_defs.h</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,9 @@
var group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s =
[
[ "MyLibs_Error_Handler", "group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gae110df81afd885a390bbeb152d7b709f", null ],
[ "check_null_ptr_1", "group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga0b75f0bcf066acdf797b8e6730c52f86", null ],
[ "check_null_ptr_2", "group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gae7d1cbb9075ee4b830342fd564d96be0", null ],
[ "check_null_ptr_3", "group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga002f4a5f5d8bb37d88f607386bc6ba2e", null ],
[ "check_null_ptr_4", "group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gade91c09d89a5f69003dcfe506ed0327f", null ],
[ "check_null_ptr_5", "group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga944edcd2c65519578d36730b94701f64", null ]
];

View File

@ -0,0 +1,191 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: General tools</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('group___g_p_i_o___g_e_n_e_r_a_l.html','',''); });
</script>
<div id="container">
<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 tools <div class="ingroups"><a class="el" href="group___m_y_l_i_b_s___a_l_l.html">My Libs</a> &raquo; <a class="el" href="group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.html">Peripheral</a> &raquo; <a class="el" href="group___m_y___l_i_b_s___g_p_i_o.html">GPIO Tools</a></div></div></div>
</div><!--header-->
<div class="contents">
<p>Общие функции/макросы для работы с GPIO.
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-groups" class="groupheader"><a id="groups" name="groups"></a>
Topics</h2></td></tr>
<tr class="memitem:GPIO_5FINIT" id="r_GPIO_5FINIT"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___i_n_i_t.html">Init defines</a></td></tr>
<tr class="memdesc:group___g_p_i_o___i_n_i_t"><td class="mdescLeft">&#160;</td><td class="mdescRight">Настройка состояний кнопок и количества тиков в периоде ШИМ <br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-define-members" class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ga34242874b455a72aa6e25841678ed105" id="r_ga34242874b455a72aa6e25841678ed105"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga34242874b455a72aa6e25841678ed105">TIM_Alternate_Mapping</a>(INSTANCE)</td></tr>
<tr class="memdesc:ga34242874b455a72aa6e25841678ed105"><td class="mdescLeft">&#160;</td><td class="mdescRight">Маппинг альтернативной функции SPI между GPIO. <br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga962f010f783b81fcdd27eb6b53db28e6" id="r_ga962f010f783b81fcdd27eb6b53db28e6"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga962f010f783b81fcdd27eb6b53db28e6">GPIO_Clock_Enable</a> (GPIO_TypeDef *GPIOx)</td></tr>
<tr class="memdesc:ga962f010f783b81fcdd27eb6b53db28e6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Включить тактирование порта GPIO. <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>Общие функции/макросы для работы с GPIO. </p>
<a name="doc-define-members" id="doc-define-members"></a><h2 id="header-doc-define-members" class="groupheader">Macro Definition Documentation</h2>
<a id="ga34242874b455a72aa6e25841678ed105" name="ga34242874b455a72aa6e25841678ed105"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga34242874b455a72aa6e25841678ed105">&#9670;&#160;</a></span>TIM_Alternate_Mapping</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TIM_Alternate_Mapping</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>INSTANCE</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">((((INSTANCE) == TIM1) || ((INSTANCE) == TIM2))? GPIO_AF1_TIM1: \</div>
<div class="line">(((INSTANCE) == TIM3) || ((INSTANCE) == TIM4) || ((INSTANCE) == TIM5))? GPIO_AF2_TIM3: \</div>
<div class="line">(((INSTANCE) == TIM8) || ((INSTANCE) == TIM9) || ((INSTANCE) == TIM10) || ((INSTANCE) == TIM11))? GPIO_AF3_TIM8: \</div>
<div class="line">(((INSTANCE) == TIM12) || ((INSTANCE) == TIM13) || ((INSTANCE) == TIM14))? GPIO_AF9_TIM12: \</div>
<div class="line">(0))</div>
</div><!-- fragment -->
<p>Маппинг альтернативной функции SPI между GPIO. </p>
<p>Маппинг альтернативной функции TIM между GPIO </p>
<p class="definition">Definition at line <a class="el" href="general__gpio_8h_source.html#l00061">61</a> of file <a class="el" href="general__gpio_8h_source.html">general_gpio.h</a>.</p>
</div>
</div>
<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
<a id="ga962f010f783b81fcdd27eb6b53db28e6" name="ga962f010f783b81fcdd27eb6b53db28e6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga962f010f783b81fcdd27eb6b53db28e6">&#9670;&#160;</a></span>GPIO_Clock_Enable()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">HAL_StatusTypeDef GPIO_Clock_Enable </td>
<td>(</td>
<td class="paramtype">GPIO_TypeDef *</td> <td class="paramname"><span class="paramname"><em>GPIOx</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Включить тактирование порта GPIO. </p>
<p class="definition">Definition at line <a class="el" href="general__gpio_8c_source.html#l00021">21</a> of file <a class="el" href="general__gpio_8c_source.html">general_gpio.c</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,6 @@
var group___g_p_i_o___g_e_n_e_r_a_l =
[
[ "Init defines", "group___g_p_i_o___i_n_i_t.html", "group___g_p_i_o___i_n_i_t" ],
[ "TIM_Alternate_Mapping", "group___g_p_i_o___g_e_n_e_r_a_l.html#ga34242874b455a72aa6e25841678ed105", null ],
[ "GPIO_Clock_Enable", "group___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6", null ]
];

View File

@ -0,0 +1,230 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: Init defines</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('group___g_p_i_o___i_n_i_t.html','',''); });
</script>
<div id="container">
<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">Init defines <div class="ingroups"><a class="el" href="group___m_y_l_i_b_s___a_l_l.html">My Libs</a> &raquo; <a class="el" href="group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.html">Peripheral</a> &raquo; <a class="el" href="group___m_y___l_i_b_s___g_p_i_o.html">GPIO Tools</a> &raquo; <a class="el" href="group___g_p_i_o___g_e_n_e_r_a_l.html">General tools</a></div></div></div>
</div><!--header-->
<div class="contents">
<p>Настройка состояний кнопок и количества тиков в периоде ШИМ
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-define-members" class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ga1d42e219765ec526d99e306638ac0023" id="r_ga1d42e219765ec526d99e306638ac0023"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga1d42e219765ec526d99e306638ac0023">LED_PWM_TICKS</a>&#160;&#160;&#160;15</td></tr>
<tr class="memdesc:ga1d42e219765ec526d99e306638ac0023"><td class="mdescLeft">&#160;</td><td class="mdescRight">Количество тиков в периоде ШИМ <br /></td></tr>
<tr class="memitem:gaf2e697ac60e05813d45ea2c9c9e79c25" id="r_gaf2e697ac60e05813d45ea2c9c9e79c25"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gaf2e697ac60e05813d45ea2c9c9e79c25">LED_ON</a>&#160;&#160;&#160;1</td></tr>
<tr class="memdesc:gaf2e697ac60e05813d45ea2c9c9e79c25"><td class="mdescLeft">&#160;</td><td class="mdescRight">Состояние пина для включения светодиода <br /></td></tr>
<tr class="memitem:ga80700bb63bd56ebabbb4728aa433fd29" id="r_ga80700bb63bd56ebabbb4728aa433fd29"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga80700bb63bd56ebabbb4728aa433fd29">LED_OFF</a>&#160;&#160;&#160;0</td></tr>
<tr class="memdesc:ga80700bb63bd56ebabbb4728aa433fd29"><td class="mdescLeft">&#160;</td><td class="mdescRight">Состояние пина для выключения светодиода <br /></td></tr>
<tr class="memitem:ga19d9e3aced311179a2914e0c9b13d0f9" id="r_ga19d9e3aced311179a2914e0c9b13d0f9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga19d9e3aced311179a2914e0c9b13d0f9">SW_ON</a>&#160;&#160;&#160;1</td></tr>
<tr class="memdesc:ga19d9e3aced311179a2914e0c9b13d0f9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Состояние пина при нажатой кнопке <br /></td></tr>
<tr class="memitem:gacd8900c9ec0efde1da3253b718574067" id="r_gacd8900c9ec0efde1da3253b718574067"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gacd8900c9ec0efde1da3253b718574067">SW_OFF</a>&#160;&#160;&#160;0</td></tr>
<tr class="memdesc:gacd8900c9ec0efde1da3253b718574067"><td class="mdescLeft">&#160;</td><td class="mdescRight">Состояние пина при отжатой кнопке <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>Настройка состояний кнопок и количества тиков в периоде ШИМ </p>
<a name="doc-define-members" id="doc-define-members"></a><h2 id="header-doc-define-members" class="groupheader">Macro Definition Documentation</h2>
<a id="ga1d42e219765ec526d99e306638ac0023" name="ga1d42e219765ec526d99e306638ac0023"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga1d42e219765ec526d99e306638ac0023">&#9670;&#160;</a></span>LED_PWM_TICKS</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LED_PWM_TICKS&#160;&#160;&#160;15</td>
</tr>
</table>
</div><div class="memdoc">
<p>Количество тиков в периоде ШИМ </p>
<p class="definition">Definition at line <a class="el" href="general__gpio_8h_source.html#l00023">23</a> of file <a class="el" href="general__gpio_8h_source.html">general_gpio.h</a>.</p>
</div>
</div>
<a id="gaf2e697ac60e05813d45ea2c9c9e79c25" name="gaf2e697ac60e05813d45ea2c9c9e79c25"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf2e697ac60e05813d45ea2c9c9e79c25">&#9670;&#160;</a></span>LED_ON</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LED_ON&#160;&#160;&#160;1</td>
</tr>
</table>
</div><div class="memdoc">
<p>Состояние пина для включения светодиода </p>
<p class="definition">Definition at line <a class="el" href="general__gpio_8h_source.html#l00027">27</a> of file <a class="el" href="general__gpio_8h_source.html">general_gpio.h</a>.</p>
</div>
</div>
<a id="ga80700bb63bd56ebabbb4728aa433fd29" name="ga80700bb63bd56ebabbb4728aa433fd29"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga80700bb63bd56ebabbb4728aa433fd29">&#9670;&#160;</a></span>LED_OFF</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LED_OFF&#160;&#160;&#160;0</td>
</tr>
</table>
</div><div class="memdoc">
<p>Состояние пина для выключения светодиода </p>
<p class="definition">Definition at line <a class="el" href="general__gpio_8h_source.html#l00030">30</a> of file <a class="el" href="general__gpio_8h_source.html">general_gpio.h</a>.</p>
</div>
</div>
<a id="ga19d9e3aced311179a2914e0c9b13d0f9" name="ga19d9e3aced311179a2914e0c9b13d0f9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga19d9e3aced311179a2914e0c9b13d0f9">&#9670;&#160;</a></span>SW_ON</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define SW_ON&#160;&#160;&#160;1</td>
</tr>
</table>
</div><div class="memdoc">
<p>Состояние пина при нажатой кнопке </p>
<p class="definition">Definition at line <a class="el" href="general__gpio_8h_source.html#l00034">34</a> of file <a class="el" href="general__gpio_8h_source.html">general_gpio.h</a>.</p>
</div>
</div>
<a id="gacd8900c9ec0efde1da3253b718574067" name="gacd8900c9ec0efde1da3253b718574067"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gacd8900c9ec0efde1da3253b718574067">&#9670;&#160;</a></span>SW_OFF</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define SW_OFF&#160;&#160;&#160;0</td>
</tr>
</table>
</div><div class="memdoc">
<p>Состояние пина при отжатой кнопке </p>
<p class="definition">Definition at line <a class="el" href="general__gpio_8h_source.html#l00037">37</a> of file <a class="el" href="general__gpio_8h_source.html">general_gpio.h</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,8 @@
var group___g_p_i_o___i_n_i_t =
[
[ "LED_PWM_TICKS", "group___g_p_i_o___i_n_i_t.html#ga1d42e219765ec526d99e306638ac0023", null ],
[ "LED_ON", "group___g_p_i_o___i_n_i_t.html#gaf2e697ac60e05813d45ea2c9c9e79c25", null ],
[ "LED_OFF", "group___g_p_i_o___i_n_i_t.html#ga80700bb63bd56ebabbb4728aa433fd29", null ],
[ "SW_ON", "group___g_p_i_o___i_n_i_t.html#ga19d9e3aced311179a2914e0c9b13d0f9", null ],
[ "SW_OFF", "group___g_p_i_o___i_n_i_t.html#gacd8900c9ec0efde1da3253b718574067", null ]
];

View File

@ -0,0 +1,416 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: LED tools</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('group___g_p_i_o___l_e_d_s.html','',''); });
</script>
<div id="container">
<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">LED tools <div class="ingroups"><a class="el" href="group___m_y_l_i_b_s___a_l_l.html">My Libs</a> &raquo; <a class="el" href="group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.html">Peripheral</a> &raquo; <a class="el" href="group___m_y___l_i_b_s___g_p_i_o.html">GPIO Tools</a></div></div></div>
</div><!--header-->
<div class="contents">
<p>Функции для работы с GPIO, для управления светодиодом
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-nested-classes" class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:GPIO_5FLEDTypeDef" id="r_GPIO_5FLEDTypeDef"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Структура светодиода <a href="struct_g_p_i_o___l_e_d_type_def.html#details">More...</a><br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-enum-members" class="groupheader"><a id="enum-members" name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:gaac2b90d8b8c9579b6aa5d3bbda9b1ff1" id="r_gaac2b90d8b8c9579b6aa5d3bbda9b1ff1"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gaac2b90d8b8c9579b6aa5d3bbda9b1ff1">GPIO_LEDStateTypeDef</a> { <a class="el" href="#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a74276cd2464314e422e8a144483f74ae">LED_IS_OFF</a> = 0
, <a class="el" href="#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1af6abfb9c5b95abbdb239590f2cd245ea">LED_IS_ON</a> = 1
, <a class="el" href="#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a2445895bed5dcbedc82ea3ef02bec6fb">LED_IS_BLINKING</a> = 2
, <a class="el" href="#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1aa610f6df44c939aa7d45e318036fa03b">LED_IS_FADING</a> = 3
}</td></tr>
<tr class="memdesc:gaac2b90d8b8c9579b6aa5d3bbda9b1ff1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Режимы работы светодиода <a href="#gaac2b90d8b8c9579b6aa5d3bbda9b1ff1">More...</a><br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gac936453c7a0841c0b17bcfdae4958084" id="r_gac936453c7a0841c0b17bcfdae4958084"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gac936453c7a0841c0b17bcfdae4958084">GPIO_LED_Init</a> (<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t LED_On_State)</td></tr>
<tr class="memdesc:gac936453c7a0841c0b17bcfdae4958084"><td class="mdescLeft">&#160;</td><td class="mdescRight">Инициализировать светодиод (структуру светодиода) <br /></td></tr>
<tr class="memitem:ga4b9572949326b050694cd55d0a7e5f6c" id="r_ga4b9572949326b050694cd55d0a7e5f6c"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga4b9572949326b050694cd55d0a7e5f6c">GPIO_LED_On</a> (<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led)</td></tr>
<tr class="memdesc:ga4b9572949326b050694cd55d0a7e5f6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Включить светодиод <br /></td></tr>
<tr class="memitem:gaadda2d4f021390a4e392210a5ace5357" id="r_gaadda2d4f021390a4e392210a5ace5357"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gaadda2d4f021390a4e392210a5ace5357">GPIO_LED_Off</a> (<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led)</td></tr>
<tr class="memdesc:gaadda2d4f021390a4e392210a5ace5357"><td class="mdescLeft">&#160;</td><td class="mdescRight">Выключить светодиод <br /></td></tr>
<tr class="memitem:gae78b570447d55a462a679a89dbaa8ea2" id="r_gae78b570447d55a462a679a89dbaa8ea2"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gae78b570447d55a462a679a89dbaa8ea2">GPIO_LED_Set</a> (<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led, uint8_t led_state)</td></tr>
<tr class="memdesc:gae78b570447d55a462a679a89dbaa8ea2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Выставить светодиод по переменной <br /></td></tr>
<tr class="memitem:gaf22f44ecaf6a1932b47edc5a845b03a9" id="r_gaf22f44ecaf6a1932b47edc5a845b03a9"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gaf22f44ecaf6a1932b47edc5a845b03a9">GPIO_LED_Blink_Start</a> (<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led, uint32_t period)</td></tr>
<tr class="memdesc:gaf22f44ecaf6a1932b47edc5a845b03a9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Активировать моргание светодиодом <br /></td></tr>
<tr class="memitem:gaa00f20021781464af3dfe74aa3e59a0a" id="r_gaa00f20021781464af3dfe74aa3e59a0a"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gaa00f20021781464af3dfe74aa3e59a0a">GPIO_LED_Fading_Start</a> (<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led, uint32_t period)</td></tr>
<tr class="memdesc:gaa00f20021781464af3dfe74aa3e59a0a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Активировать моргание светодиодом <br /></td></tr>
<tr class="memitem:gad6e6189824406c4d472b6340c7f19bb2" id="r_gad6e6189824406c4d472b6340c7f19bb2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gad6e6189824406c4d472b6340c7f19bb2">GPIO_LED_Dynamic_Handle</a> (<a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *led)</td></tr>
<tr class="memdesc:gad6e6189824406c4d472b6340c7f19bb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Управление динамическими режимами свечения светодиода <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>Функции для работы с GPIO, для управления светодиодом </p>
<a name="doc-enum-members" id="doc-enum-members"></a><h2 id="header-doc-enum-members" class="groupheader">Enumeration Type Documentation</h2>
<a id="gaac2b90d8b8c9579b6aa5d3bbda9b1ff1" name="gaac2b90d8b8c9579b6aa5d3bbda9b1ff1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaac2b90d8b8c9579b6aa5d3bbda9b1ff1">&#9670;&#160;</a></span>GPIO_LEDStateTypeDef</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="#gaac2b90d8b8c9579b6aa5d3bbda9b1ff1">GPIO_LEDStateTypeDef</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Режимы работы светодиода </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a74276cd2464314e422e8a144483f74ae" name="ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a74276cd2464314e422e8a144483f74ae"></a>LED_IS_OFF&#160;</td><td class="fielddoc"><p>Светодиод выключен </p>
</td></tr>
<tr><td class="fieldname"><a id="ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1af6abfb9c5b95abbdb239590f2cd245ea" name="ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1af6abfb9c5b95abbdb239590f2cd245ea"></a>LED_IS_ON&#160;</td><td class="fielddoc"><p>Светодиод включен </p>
</td></tr>
<tr><td class="fieldname"><a id="ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a2445895bed5dcbedc82ea3ef02bec6fb" name="ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a2445895bed5dcbedc82ea3ef02bec6fb"></a>LED_IS_BLINKING&#160;</td><td class="fielddoc"><p>Моргание светодиодом </p>
</td></tr>
<tr><td class="fieldname"><a id="ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1aa610f6df44c939aa7d45e318036fa03b" name="ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1aa610f6df44c939aa7d45e318036fa03b"></a>LED_IS_FADING&#160;</td><td class="fielddoc"><p>Плавное моргание светодиодом </p>
</td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="general__gpio_8h_source.html#l00073">73</a> of file <a class="el" href="general__gpio_8h_source.html">general_gpio.h</a>.</p>
</div>
</div>
<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
<a id="gac936453c7a0841c0b17bcfdae4958084" name="gac936453c7a0841c0b17bcfdae4958084"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac936453c7a0841c0b17bcfdae4958084">&#9670;&#160;</a></span>GPIO_LED_Init()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">HAL_StatusTypeDef GPIO_LED_Init </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *</td> <td class="paramname"><span class="paramname"><em>led</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">GPIO_TypeDef *</td> <td class="paramname"><span class="paramname"><em>GPIOx</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>GPIO_PIN_X</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>LED_ActiveLevel</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Инициализировать светодиод (структуру светодиода) </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">led</td><td>Указатель на структуру светодиода </td></tr>
<tr><td class="paramname">GPIOx</td><td>Указатель на структуру порта для светодиода </td></tr>
<tr><td class="paramname">GPIO_PIN_X</td><td>Пин для светодиода </td></tr>
<tr><td class="paramname">LED_ActiveLevel</td><td>Состояния пина, при котором светодиод будет включен </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="general__gpio_8c_source.html#l00069">69</a> of file <a class="el" href="general__gpio_8c_source.html">general_gpio.c</a>.</p>
</div>
</div>
<a id="ga4b9572949326b050694cd55d0a7e5f6c" name="ga4b9572949326b050694cd55d0a7e5f6c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4b9572949326b050694cd55d0a7e5f6c">&#9670;&#160;</a></span>GPIO_LED_On()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">HAL_StatusTypeDef GPIO_LED_On </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *</td> <td class="paramname"><span class="paramname"><em>led</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Включить светодиод </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">led</td><td>Указатель на структуру светодиода </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>HAL Status </dd></dl>
<p class="definition">Definition at line <a class="el" href="general__gpio_8c_source.html#l00087">87</a> of file <a class="el" href="general__gpio_8c_source.html">general_gpio.c</a>.</p>
</div>
</div>
<a id="gaadda2d4f021390a4e392210a5ace5357" name="gaadda2d4f021390a4e392210a5ace5357"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaadda2d4f021390a4e392210a5ace5357">&#9670;&#160;</a></span>GPIO_LED_Off()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">HAL_StatusTypeDef GPIO_LED_Off </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *</td> <td class="paramname"><span class="paramname"><em>led</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Выключить светодиод </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">led</td><td>Указатель на структуру светодиода </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>HAL Status </dd></dl>
<p class="definition">Definition at line <a class="el" href="general__gpio_8c_source.html#l00105">105</a> of file <a class="el" href="general__gpio_8c_source.html">general_gpio.c</a>.</p>
</div>
</div>
<a id="gae78b570447d55a462a679a89dbaa8ea2" name="gae78b570447d55a462a679a89dbaa8ea2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gae78b570447d55a462a679a89dbaa8ea2">&#9670;&#160;</a></span>GPIO_LED_Set()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">HAL_StatusTypeDef GPIO_LED_Set </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *</td> <td class="paramname"><span class="paramname"><em>led</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>led_state</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Выставить светодиод по переменной </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">led</td><td>Указатель на структуру светодиода </td></tr>
<tr><td class="paramname">led_state</td><td>Состояние светодиода </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>HAL Status </dd></dl>
<p class="definition">Definition at line <a class="el" href="general__gpio_8c_source.html#l00125">125</a> of file <a class="el" href="general__gpio_8c_source.html">general_gpio.c</a>.</p>
</div>
</div>
<a id="gaf22f44ecaf6a1932b47edc5a845b03a9" name="gaf22f44ecaf6a1932b47edc5a845b03a9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf22f44ecaf6a1932b47edc5a845b03a9">&#9670;&#160;</a></span>GPIO_LED_Blink_Start()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">HAL_StatusTypeDef GPIO_LED_Blink_Start </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *</td> <td class="paramname"><span class="paramname"><em>led</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>period</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Активировать моргание светодиодом </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">led</td><td>Указатель на структуру светодиода </td></tr>
<tr><td class="paramname">period</td><td>Период плавного моргания светодиода </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>HAL Status</dd></dl>
<p>Функция ставит режим моргания, который после управляется в <a class="el" href="#gad6e6189824406c4d472b6340c7f19bb2">GPIO_LED_Dynamic_Handle</a> </p>
<p class="definition">Definition at line <a class="el" href="general__gpio_8c_source.html#l00146">146</a> of file <a class="el" href="general__gpio_8c_source.html">general_gpio.c</a>.</p>
</div>
</div>
<a id="gaa00f20021781464af3dfe74aa3e59a0a" name="gaa00f20021781464af3dfe74aa3e59a0a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa00f20021781464af3dfe74aa3e59a0a">&#9670;&#160;</a></span>GPIO_LED_Fading_Start()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">HAL_StatusTypeDef GPIO_LED_Fading_Start </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *</td> <td class="paramname"><span class="paramname"><em>led</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>period</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Активировать моргание светодиодом </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">led</td><td>Указатель на структуру светодиода </td></tr>
<tr><td class="paramname">period</td><td>Период плавного моргания светодиода </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>HAL Status</dd></dl>
<p>Функция ставит режим моргания, который после управляется в <a class="el" href="#gad6e6189824406c4d472b6340c7f19bb2">GPIO_LED_Dynamic_Handle</a> </p>
<p class="definition">Definition at line <a class="el" href="general__gpio_8c_source.html#l00164">164</a> of file <a class="el" href="general__gpio_8c_source.html">general_gpio.c</a>.</p>
</div>
</div>
<a id="gad6e6189824406c4d472b6340c7f19bb2" name="gad6e6189824406c4d472b6340c7f19bb2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gad6e6189824406c4d472b6340c7f19bb2">&#9670;&#160;</a></span>GPIO_LED_Dynamic_Handle()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void GPIO_LED_Dynamic_Handle </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> *</td> <td class="paramname"><span class="paramname"><em>led</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Управление динамическими режимами свечения светодиода </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">Указатель</td><td>на структуру светодиода</td></tr>
</table>
</dd>
</dl>
<p>Функция моргает/плавно моргает светодиодом в неблокирующем режиме Т.е. функцию надо вызывать постоянно, чтобы она мониторила тики и в нужный момент переключала светодиод </p>
<p class="definition">Definition at line <a class="el" href="general__gpio_8c_source.html#l00184">184</a> of file <a class="el" href="general__gpio_8c_source.html">general_gpio.c</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,24 @@
var group___g_p_i_o___l_e_d_s =
[
[ "GPIO_LEDTypeDef", "struct_g_p_i_o___l_e_d_type_def.html", [
[ "state", "struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435", null ],
[ "LED_Port", "struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf", null ],
[ "LED_Pin", "struct_g_p_i_o___l_e_d_type_def.html#a684ff60e4c94daf2221524cdc6fcc978", null ],
[ "LED_ActiveLvl", "struct_g_p_i_o___l_e_d_type_def.html#abe9aadc0b28d042267f7155e187a1816", null ],
[ "LED_Period", "struct_g_p_i_o___l_e_d_type_def.html#a6cc026931a4681732f9a329ae03098ec", null ],
[ "tickprev", "struct_g_p_i_o___l_e_d_type_def.html#a8c43c12787f4a89f4a785f91a979ba68", null ]
] ],
[ "GPIO_LEDStateTypeDef", "group___g_p_i_o___l_e_d_s.html#gaac2b90d8b8c9579b6aa5d3bbda9b1ff1", [
[ "LED_IS_OFF", "group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a74276cd2464314e422e8a144483f74ae", null ],
[ "LED_IS_ON", "group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1af6abfb9c5b95abbdb239590f2cd245ea", null ],
[ "LED_IS_BLINKING", "group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a2445895bed5dcbedc82ea3ef02bec6fb", null ],
[ "LED_IS_FADING", "group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1aa610f6df44c939aa7d45e318036fa03b", null ]
] ],
[ "GPIO_LED_Init", "group___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084", null ],
[ "GPIO_LED_On", "group___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c", null ],
[ "GPIO_LED_Off", "group___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357", null ],
[ "GPIO_LED_Set", "group___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2", null ],
[ "GPIO_LED_Blink_Start", "group___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9", null ],
[ "GPIO_LED_Fading_Start", "group___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a", null ],
[ "GPIO_LED_Dynamic_Handle", "group___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2", null ]
];

View File

@ -0,0 +1,213 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: Switch tools</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('group___g_p_i_o___s_w_i_t_c_h.html','',''); });
</script>
<div id="container">
<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">Switch tools <div class="ingroups"><a class="el" href="group___m_y_l_i_b_s___a_l_l.html">My Libs</a> &raquo; <a class="el" href="group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.html">Peripheral</a> &raquo; <a class="el" href="group___m_y___l_i_b_s___g_p_i_o.html">GPIO Tools</a></div></div></div>
</div><!--header-->
<div class="contents">
<p>Функции для работы с GPIO, как с кнопкой
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-nested-classes" class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:GPIO_5FSwitchTypeDef" id="r_GPIO_5FSwitchTypeDef"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_g_p_i_o___switch_type_def.html">GPIO_SwitchTypeDef</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Структура кнопки <a href="struct_g_p_i_o___switch_type_def.html#details">More...</a><br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gacafee0e68877f2b25df843356871d1f7" id="r_gacafee0e68877f2b25df843356871d1f7"><td class="memItemLeft" align="right" valign="top">HAL_StatusTypeDef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gacafee0e68877f2b25df843356871d1f7">GPIO_Switch_Init</a> (<a class="el" href="struct_g_p_i_o___switch_type_def.html">GPIO_SwitchTypeDef</a> *sw, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t SW_On_State)</td></tr>
<tr class="memdesc:gacafee0e68877f2b25df843356871d1f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Инициализировать кнопку (структуру кнопки) <br /></td></tr>
<tr class="memitem:ga4b6b8be19a9265bfee6b2bb8a68e988f" id="r_ga4b6b8be19a9265bfee6b2bb8a68e988f"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga4b6b8be19a9265bfee6b2bb8a68e988f">GPIO_Read_Switch</a> (<a class="el" href="struct_g_p_i_o___switch_type_def.html">GPIO_SwitchTypeDef</a> *swstart)</td></tr>
<tr class="memdesc:ga4b6b8be19a9265bfee6b2bb8a68e988f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Считать состоянии кнопки <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>Функции для работы с GPIO, как с кнопкой </p>
<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
<a id="gacafee0e68877f2b25df843356871d1f7" name="gacafee0e68877f2b25df843356871d1f7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gacafee0e68877f2b25df843356871d1f7">&#9670;&#160;</a></span>GPIO_Switch_Init()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">HAL_StatusTypeDef GPIO_Switch_Init </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_g_p_i_o___switch_type_def.html">GPIO_SwitchTypeDef</a> *</td> <td class="paramname"><span class="paramname"><em>sw</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">GPIO_TypeDef *</td> <td class="paramname"><span class="paramname"><em>GPIOx</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>GPIO_PIN_X</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>SW_ActiveLevel</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Инициализировать кнопку (структуру кнопки) </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">sw</td><td>Указатель на структуру кнопки </td></tr>
<tr><td class="paramname">GPIOx</td><td>Указатель на структуру порта для кнопки </td></tr>
<tr><td class="paramname">GPIO_PIN_X</td><td>Пин для кнопки </td></tr>
<tr><td class="paramname">SW_ActiveLevel</td><td>Состояния пина, когда кнопка нажата </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>HAL Status </dd></dl>
<p class="definition">Definition at line <a class="el" href="general__gpio_8c_source.html#l00258">258</a> of file <a class="el" href="general__gpio_8c_source.html">general_gpio.c</a>.</p>
</div>
</div>
<a id="ga4b6b8be19a9265bfee6b2bb8a68e988f" name="ga4b6b8be19a9265bfee6b2bb8a68e988f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4b6b8be19a9265bfee6b2bb8a68e988f">&#9670;&#160;</a></span>GPIO_Read_Switch()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint8_t GPIO_Read_Switch </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_g_p_i_o___switch_type_def.html">GPIO_SwitchTypeDef</a> *</td> <td class="paramname"><span class="paramname"><em>sw</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Считать состоянии кнопки </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">sw</td><td>Указатель на структуру кнопки </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>1 - если кнопка нажата, 0 - если отжата</dd></dl>
<p>Функция включает в себя неблокирующую проверку на дребезг Т.е. функцию надо вызывать постоянно, чтобы она мониторила состояние кнопки </p>
<p class="definition">Definition at line <a class="el" href="general__gpio_8c_source.html#l00276">276</a> of file <a class="el" href="general__gpio_8c_source.html">general_gpio.c</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,13 @@
var group___g_p_i_o___s_w_i_t_c_h =
[
[ "GPIO_SwitchTypeDef", "struct_g_p_i_o___switch_type_def.html", [
[ "Sw_Port", "struct_g_p_i_o___switch_type_def.html#afb369df75a6065fd89ac4ba97d98ab1a", null ],
[ "Sw_Pin", "struct_g_p_i_o___switch_type_def.html#a63d58d9cba49a5823175585ef2996032", null ],
[ "Sw_ActiveLvl", "struct_g_p_i_o___switch_type_def.html#a4fadf5ead3ebccad521a52c064eeb405", null ],
[ "Sw_PrevState", "struct_g_p_i_o___switch_type_def.html#a245f1dc811279ce5d4598582db979a89", null ],
[ "Sw_FilterDelay", "struct_g_p_i_o___switch_type_def.html#a2600e599a961af2e280c721894df4c06", null ],
[ "tickprev", "struct_g_p_i_o___switch_type_def.html#a13f97b867ff1a77ef182c9b13d964ca6", null ]
] ],
[ "GPIO_Switch_Init", "group___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7", null ],
[ "GPIO_Read_Switch", "group___g_p_i_o___s_w_i_t_c_h.html#ga4b6b8be19a9265bfee6b2bb8a68e988f", null ]
];

View File

@ -0,0 +1,210 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: Libraries configs</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('group___l_i_b_s___c_o_n_f_i_g.html','',''); });
</script>
<div id="container">
<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">Libraries configs <div class="ingroups"><a class="el" href="group___m_y_l_i_b_s___a_l_l.html">My Libs</a> &raquo; <a class="el" href="group___m_y_l_i_b_s___c_o_n_f_i_g.html">Configs</a></div></div></div>
</div><!--header-->
<div class="contents">
<p>Включенные трекеры и трассировки в МЗКТЭ
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-define-members" class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:gaf4ddb2a71ec0d05c2480e197cd17c0be" id="r_gaf4ddb2a71ec0d05c2480e197cd17c0be"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gaf4ddb2a71ec0d05c2480e197cd17c0be">INCLUDE_BIT_ACCESS_LIB</a></td></tr>
<tr class="memdesc:gaf4ddb2a71ec0d05c2480e197cd17c0be"><td class="mdescLeft">&#160;</td><td class="mdescRight">Подключить библиотеку с typedef с битовыми полями <br /></td></tr>
<tr class="memitem:ga4403055986b70bb02b8d37073a122e32" id="r_ga4403055986b70bb02b8d37073a122e32"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga4403055986b70bb02b8d37073a122e32">INCLUDE_TRACKERS_LIB</a></td></tr>
<tr class="memdesc:ga4403055986b70bb02b8d37073a122e32"><td class="mdescLeft">&#160;</td><td class="mdescRight">Подключить библиотеку с трекерами <br /></td></tr>
<tr class="memitem:ga0a3ca94b616997069dd53e2c6c2687d7" id="r_ga0a3ca94b616997069dd53e2c6c2687d7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga0a3ca94b616997069dd53e2c6c2687d7">INCLUDE_TRACE_LIB</a></td></tr>
<tr class="memdesc:ga0a3ca94b616997069dd53e2c6c2687d7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Подключить библиотеку с трейсами <br /></td></tr>
<tr class="memitem:ga181a46326e46b60afb160190832c7281" id="r_ga181a46326e46b60afb160190832c7281"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga181a46326e46b60afb160190832c7281">INCLUDE_GENERAL_PERIPH_LIBS</a></td></tr>
<tr class="memdesc:ga181a46326e46b60afb160190832c7281"><td class="mdescLeft">&#160;</td><td class="mdescRight">Подключить библиотеку с периферией <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>Включенные трекеры и трассировки в МЗКТЭ </p>
<a name="doc-define-members" id="doc-define-members"></a><h2 id="header-doc-define-members" class="groupheader">Macro Definition Documentation</h2>
<a id="gaf4ddb2a71ec0d05c2480e197cd17c0be" name="gaf4ddb2a71ec0d05c2480e197cd17c0be"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf4ddb2a71ec0d05c2480e197cd17c0be">&#9670;&#160;</a></span>INCLUDE_BIT_ACCESS_LIB</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define INCLUDE_BIT_ACCESS_LIB</td>
</tr>
</table>
</div><div class="memdoc">
<p>Подключить библиотеку с typedef с битовыми полями </p>
<p class="definition">Definition at line <a class="el" href="mylibs__config_8h_source.html#l00069">69</a> of file <a class="el" href="mylibs__config_8h_source.html">mylibs_config.h</a>.</p>
</div>
</div>
<a id="ga4403055986b70bb02b8d37073a122e32" name="ga4403055986b70bb02b8d37073a122e32"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4403055986b70bb02b8d37073a122e32">&#9670;&#160;</a></span>INCLUDE_TRACKERS_LIB</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define INCLUDE_TRACKERS_LIB</td>
</tr>
</table>
</div><div class="memdoc">
<p>Подключить библиотеку с трекерами </p>
<p class="definition">Definition at line <a class="el" href="mylibs__config_8h_source.html#l00070">70</a> of file <a class="el" href="mylibs__config_8h_source.html">mylibs_config.h</a>.</p>
</div>
</div>
<a id="ga0a3ca94b616997069dd53e2c6c2687d7" name="ga0a3ca94b616997069dd53e2c6c2687d7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga0a3ca94b616997069dd53e2c6c2687d7">&#9670;&#160;</a></span>INCLUDE_TRACE_LIB</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define INCLUDE_TRACE_LIB</td>
</tr>
</table>
</div><div class="memdoc">
<p>Подключить библиотеку с трейсами </p>
<p class="definition">Definition at line <a class="el" href="mylibs__config_8h_source.html#l00071">71</a> of file <a class="el" href="mylibs__config_8h_source.html">mylibs_config.h</a>.</p>
</div>
</div>
<a id="ga181a46326e46b60afb160190832c7281" name="ga181a46326e46b60afb160190832c7281"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga181a46326e46b60afb160190832c7281">&#9670;&#160;</a></span>INCLUDE_GENERAL_PERIPH_LIBS</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define INCLUDE_GENERAL_PERIPH_LIBS</td>
</tr>
</table>
</div><div class="memdoc">
<p>Подключить библиотеку с периферией </p>
<p class="definition">Definition at line <a class="el" href="mylibs__config_8h_source.html#l00072">72</a> of file <a class="el" href="mylibs__config_8h_source.html">mylibs_config.h</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,7 @@
var group___l_i_b_s___c_o_n_f_i_g =
[
[ "INCLUDE_BIT_ACCESS_LIB", "group___l_i_b_s___c_o_n_f_i_g.html#gaf4ddb2a71ec0d05c2480e197cd17c0be", null ],
[ "INCLUDE_TRACKERS_LIB", "group___l_i_b_s___c_o_n_f_i_g.html#ga4403055986b70bb02b8d37073a122e32", null ],
[ "INCLUDE_TRACE_LIB", "group___l_i_b_s___c_o_n_f_i_g.html#ga0a3ca94b616997069dd53e2c6c2687d7", null ],
[ "INCLUDE_GENERAL_PERIPH_LIBS", "group___l_i_b_s___c_o_n_f_i_g.html#ga181a46326e46b60afb160190832c7281", null ]
];

View File

@ -0,0 +1,135 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: GPIO Tools</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('group___m_y___l_i_b_s___g_p_i_o.html','',''); });
</script>
<div id="container">
<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">GPIO Tools <div class="ingroups"><a class="el" href="group___m_y_l_i_b_s___a_l_l.html">My Libs</a> &raquo; <a class="el" href="group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.html">Peripheral</a></div></div></div>
</div><!--header-->
<div class="contents">
<p>Функции и макросы для удобной работы с GPIO.
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-groups" class="groupheader"><a id="groups" name="groups"></a>
Topics</h2></td></tr>
<tr class="memitem:GPIO_5FGENERAL" id="r_GPIO_5FGENERAL"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___g_e_n_e_r_a_l.html">General tools</a></td></tr>
<tr class="memdesc:group___g_p_i_o___g_e_n_e_r_a_l"><td class="mdescLeft">&#160;</td><td class="mdescRight">Общие функции/макросы для работы с GPIO. <br /></td></tr>
<tr class="memitem:GPIO_5FSWITCH" id="r_GPIO_5FSWITCH"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___s_w_i_t_c_h.html">Switch tools</a></td></tr>
<tr class="memdesc:group___g_p_i_o___s_w_i_t_c_h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Функции для работы с GPIO, как с кнопкой <br /></td></tr>
<tr class="memitem:GPIO_5FLEDS" id="r_GPIO_5FLEDS"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___g_p_i_o___l_e_d_s.html">LED tools</a></td></tr>
<tr class="memdesc:group___g_p_i_o___l_e_d_s"><td class="mdescLeft">&#160;</td><td class="mdescRight">Функции для работы с GPIO, для управления светодиодом <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>Функции и макросы для удобной работы с GPIO. </p>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,6 @@
var group___m_y___l_i_b_s___g_p_i_o =
[
[ "General tools", "group___g_p_i_o___g_e_n_e_r_a_l.html", "group___g_p_i_o___g_e_n_e_r_a_l" ],
[ "Switch tools", "group___g_p_i_o___s_w_i_t_c_h.html", "group___g_p_i_o___s_w_i_t_c_h" ],
[ "LED tools", "group___g_p_i_o___l_e_d_s.html", "group___g_p_i_o___l_e_d_s" ]
];

View File

@ -0,0 +1,135 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: My Libs</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('group___m_y_l_i_b_s___a_l_l.html','',''); });
</script>
<div id="container">
<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">My Libs </div></div>
</div><!--header-->
<div class="contents">
<p>Все используемые MyLibs библиотеки
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-groups" class="groupheader"><a id="groups" name="groups"></a>
Topics</h2></td></tr>
<tr class="memitem:MYLIBS_5FCONFIG" id="r_MYLIBS_5FCONFIG"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___m_y_l_i_b_s___c_o_n_f_i_g.html">Configs</a></td></tr>
<tr class="memdesc:group___m_y_l_i_b_s___c_o_n_f_i_g"><td class="mdescLeft">&#160;</td><td class="mdescRight">Конфигурации для библиотек MyLibs. <br /></td></tr>
<tr class="memitem:MYLIBS_5FDEFINES" id="r_MYLIBS_5FDEFINES"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___m_y_l_i_b_s___d_e_f_i_n_e_s.html">General Defines</a></td></tr>
<tr class="memdesc:group___m_y_l_i_b_s___d_e_f_i_n_e_s"><td class="mdescLeft">&#160;</td><td class="mdescRight">Общие макросы и typedef'ы, используемые по всему проекту <br /></td></tr>
<tr class="memitem:MYLIBS_5FPERIPHERAL" id="r_MYLIBS_5FPERIPHERAL"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.html">Peripheral</a></td></tr>
<tr class="memdesc:group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l"><td class="mdescLeft">&#160;</td><td class="mdescRight">Модули для управления периферией <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>Все используемые MyLibs библиотеки </p>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,6 @@
var group___m_y_l_i_b_s___a_l_l =
[
[ "Configs", "group___m_y_l_i_b_s___c_o_n_f_i_g.html", "group___m_y_l_i_b_s___c_o_n_f_i_g" ],
[ "General Defines", "group___m_y_l_i_b_s___d_e_f_i_n_e_s.html", "group___m_y_l_i_b_s___d_e_f_i_n_e_s" ],
[ "Peripheral", "group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.html", "group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l" ]
];

View File

@ -0,0 +1,133 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: Configs</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('group___m_y_l_i_b_s___c_o_n_f_i_g.html','',''); });
</script>
<div id="container">
<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">Configs <div class="ingroups"><a class="el" href="group___m_y_l_i_b_s___a_l_l.html">My Libs</a></div></div></div>
</div><!--header-->
<div class="contents">
<p>Конфигурации для библиотек MyLibs.
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-groups" class="groupheader"><a id="groups" name="groups"></a>
Topics</h2></td></tr>
<tr class="memitem:TRACE_5FCONFIG" id="r_TRACE_5FCONFIG"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html">Trace configs</a></td></tr>
<tr class="memdesc:group___t_r_a_c_e___c_o_n_f_i_g"><td class="mdescLeft">&#160;</td><td class="mdescRight">Конфигурация трекеров и трассировки <br /></td></tr>
<tr class="memitem:LIBS_5FCONFIG" id="r_LIBS_5FCONFIG"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___l_i_b_s___c_o_n_f_i_g.html">Libraries configs</a></td></tr>
<tr class="memdesc:group___l_i_b_s___c_o_n_f_i_g"><td class="mdescLeft">&#160;</td><td class="mdescRight">Включенные трекеры и трассировки в МЗКТЭ <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>Конфигурации для библиотек MyLibs. </p>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,5 @@
var group___m_y_l_i_b_s___c_o_n_f_i_g =
[
[ "Trace configs", "group___t_r_a_c_e___c_o_n_f_i_g.html", "group___t_r_a_c_e___c_o_n_f_i_g" ],
[ "Libraries configs", "group___l_i_b_s___c_o_n_f_i_g.html", "group___l_i_b_s___c_o_n_f_i_g" ]
];

View File

@ -0,0 +1,141 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: General Defines</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('group___m_y_l_i_b_s___d_e_f_i_n_e_s.html','',''); });
</script>
<div id="container">
<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 Defines <div class="ingroups"><a class="el" href="group___m_y_l_i_b_s___a_l_l.html">My Libs</a></div></div></div>
</div><!--header-->
<div class="contents">
<p>Общие макросы и typedef'ы, используемые по всему проекту
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-groups" class="groupheader"><a id="groups" name="groups"></a>
Topics</h2></td></tr>
<tr class="memitem:BIT_5FACCESS_5FDEFINES" id="r_BIT_5FACCESS_5FDEFINES"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html">Bit access defines</a></td></tr>
<tr class="memdesc:group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s"><td class="mdescLeft">&#160;</td><td class="mdescRight">Макросы и typedef'ы для работы с битами в unsigned типах. <br /></td></tr>
<tr class="memitem:ERROR_5FHANDLER_5FDEFINES" id="r_ERROR_5FHANDLER_5FDEFINES"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html">Error Handler defines</a></td></tr>
<tr class="memdesc:group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s"><td class="mdescLeft">&#160;</td><td class="mdescRight">Дефайны для обработки ошибок <br /></td></tr>
<tr class="memitem:DELAYS_5FDEFINES" id="r_DELAYS_5FDEFINES"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___d_e_l_a_y_s___d_e_f_i_n_e_s.html">Delays defines</a></td></tr>
<tr class="memdesc:group___d_e_l_a_y_s___d_e_f_i_n_e_s"><td class="mdescLeft">&#160;</td><td class="mdescRight">Макросы и определения для работы с задержками в миллисекундах. <br /></td></tr>
<tr class="memitem:UTILS_5FDEFINES" id="r_UTILS_5FDEFINES"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___u_t_i_l_s___d_e_f_i_n_e_s.html">Utils defines</a></td></tr>
<tr class="memdesc:group___u_t_i_l_s___d_e_f_i_n_e_s"><td class="mdescLeft">&#160;</td><td class="mdescRight">Общие вспомогательные макросы <br /></td></tr>
<tr class="memitem:TRACE" id="r_TRACE"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___t_r_a_c_e.html">Trace defines</a></td></tr>
<tr class="memdesc:group___t_r_a_c_e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Дефайны для работы с трассировкой <br /></td></tr>
<tr class="memitem:TRACKERS" id="r_TRACKERS"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___t_r_a_c_k_e_r_s.html">Trackers defines</a></td></tr>
<tr class="memdesc:group___t_r_a_c_k_e_r_s"><td class="mdescLeft">&#160;</td><td class="mdescRight">Дефайны для работы с трекерами <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>Общие макросы и typedef'ы, используемые по всему проекту </p>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,9 @@
var group___m_y_l_i_b_s___d_e_f_i_n_e_s =
[
[ "Bit access defines", "group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html", "group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s" ],
[ "Error Handler defines", "group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html", "group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s" ],
[ "Delays defines", "group___d_e_l_a_y_s___d_e_f_i_n_e_s.html", "group___d_e_l_a_y_s___d_e_f_i_n_e_s" ],
[ "Utils defines", "group___u_t_i_l_s___d_e_f_i_n_e_s.html", "group___u_t_i_l_s___d_e_f_i_n_e_s" ],
[ "Trace defines", "group___t_r_a_c_e.html", "group___t_r_a_c_e" ],
[ "Trackers defines", "group___t_r_a_c_k_e_r_s.html", "group___t_r_a_c_k_e_r_s" ]
];

View File

@ -0,0 +1,131 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: Peripheral</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.html','',''); });
</script>
<div id="container">
<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">Peripheral <div class="ingroups"><a class="el" href="group___m_y_l_i_b_s___a_l_l.html">My Libs</a></div></div></div>
</div><!--header-->
<div class="contents">
<p>Модули для управления периферией
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-groups" class="groupheader"><a id="groups" name="groups"></a>
Topics</h2></td></tr>
<tr class="memitem:MY_5FLIBS_5FGPIO" id="r_MY_5FLIBS_5FGPIO"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___m_y___l_i_b_s___g_p_i_o.html">GPIO Tools</a></td></tr>
<tr class="memdesc:group___m_y___l_i_b_s___g_p_i_o"><td class="mdescLeft">&#160;</td><td class="mdescRight">Функции и макросы для удобной работы с GPIO. <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>Модули для управления периферией </p>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,4 @@
var group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l =
[
[ "GPIO Tools", "group___m_y___l_i_b_s___g_p_i_o.html", "group___m_y___l_i_b_s___g_p_i_o" ]
];

View File

@ -0,0 +1,137 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: Trace defines</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('group___t_r_a_c_e.html','',''); });
</script>
<div id="container">
<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">Trace defines <div class="ingroups"><a class="el" href="group___m_y_l_i_b_s___a_l_l.html">My Libs</a> &raquo; <a class="el" href="group___m_y_l_i_b_s___d_e_f_i_n_e_s.html">General Defines</a></div></div></div>
</div><!--header-->
<div class="contents">
<p>Дефайны для работы с трассировкой
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-groups" class="groupheader"><a id="groups" name="groups"></a>
Topics</h2></td></tr>
<tr class="memitem:TRACE_5FSERIAL" id="r_TRACE_5FSERIAL"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___t_r_a_c_e___s_e_r_i_a_l.html">Serial trace defines</a></td></tr>
<tr class="memdesc:group___t_r_a_c_e___s_e_r_i_a_l"><td class="mdescLeft">&#160;</td><td class="mdescRight">Дефайны для работы с serial трассировкой (SWO, RTT) <br /></td></tr>
<tr class="memitem:TRACE_5FGPIO" id="r_TRACE_5FGPIO"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___t_r_a_c_e___g_p_i_o.html">GPIO trace defines</a></td></tr>
<tr class="memdesc:group___t_r_a_c_e___g_p_i_o"><td class="mdescLeft">&#160;</td><td class="mdescRight">Дефайны для работы с GPIO трассировкой <br /></td></tr>
<tr class="memitem:TRACE_5FRTT_5FFLASH" id="r_TRACE_5FRTT_5FFLASH"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___t_r_a_c_e___r_t_t___f_l_a_s_h.html">Flash RTT Buffer</a></td></tr>
<tr class="memdesc:group___t_r_a_c_e___r_t_t___f_l_a_s_h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Макросы и функции для сохранения/чтения RTT буфера в Flash. <br /></td></tr>
<tr class="memitem:TRACE_5FHARDFAULT" id="r_TRACE_5FHARDFAULT"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html">Hardfault trace defines</a></td></tr>
<tr class="memdesc:group___t_r_a_c_e___h_a_r_d_f_a_u_l_t"><td class="mdescLeft">&#160;</td><td class="mdescRight">Модуль трассировки HardFault с возможностью сохранения RTT буфера во Flash. <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>Дефайны для работы с трассировкой </p>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,7 @@
var group___t_r_a_c_e =
[
[ "Serial trace defines", "group___t_r_a_c_e___s_e_r_i_a_l.html", "group___t_r_a_c_e___s_e_r_i_a_l" ],
[ "GPIO trace defines", "group___t_r_a_c_e___g_p_i_o.html", "group___t_r_a_c_e___g_p_i_o" ],
[ "Flash RTT Buffer", "group___t_r_a_c_e___r_t_t___f_l_a_s_h.html", "group___t_r_a_c_e___r_t_t___f_l_a_s_h" ],
[ "Hardfault trace defines", "group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html", "group___t_r_a_c_e___h_a_r_d_f_a_u_l_t" ]
];

View File

@ -0,0 +1,455 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: Trace configs</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('group___t_r_a_c_e___c_o_n_f_i_g.html','',''); });
</script>
<div id="container">
<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">Trace configs <div class="ingroups"><a class="el" href="group___m_y_l_i_b_s___a_l_l.html">My Libs</a> &raquo; <a class="el" href="group___m_y_l_i_b_s___c_o_n_f_i_g.html">Configs</a></div></div></div>
</div><!--header-->
<div class="contents">
<p>Конфигурация трекеров и трассировки
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-define-members" class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:gac9eaedc31ab023ce7d6403999216e496" id="r_gac9eaedc31ab023ce7d6403999216e496"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gac9eaedc31ab023ce7d6403999216e496">TRACKERS_ENABLE</a></td></tr>
<tr class="memdesc:gac9eaedc31ab023ce7d6403999216e496"><td class="mdescLeft">&#160;</td><td class="mdescRight">Включить трекеры <br /></td></tr>
<tr class="memitem:ga76936505ca200d2e61226b7ba68f27c6" id="r_ga76936505ca200d2e61226b7ba68f27c6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga76936505ca200d2e61226b7ba68f27c6">SERIAL_TRACE_ENABLE</a></td></tr>
<tr class="memdesc:ga76936505ca200d2e61226b7ba68f27c6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Включить serial трассировку <br /></td></tr>
<tr class="memitem:ga00ff2175bdc1fb11c8ec970ea3010dd8" id="r_ga00ff2175bdc1fb11c8ec970ea3010dd8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga00ff2175bdc1fb11c8ec970ea3010dd8">RTT_TRACE_ENABLE</a></td></tr>
<tr class="memdesc:ga00ff2175bdc1fb11c8ec970ea3010dd8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Включить serial трассировку через RTT. <br /></td></tr>
<tr class="memitem:gab8db9704b5d11858aa879689b9d36336" id="r_gab8db9704b5d11858aa879689b9d36336"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gab8db9704b5d11858aa879689b9d36336">SWO_TRACE_ENABLE</a></td></tr>
<tr class="memdesc:gab8db9704b5d11858aa879689b9d36336"><td class="mdescLeft">&#160;</td><td class="mdescRight">Включить serial трассировку через SWO. <br /></td></tr>
<tr class="memitem:ga0b87e0d3bf5853bcbb0b66a7c48fdc05" id="r_ga0b87e0d3bf5853bcbb0b66a7c48fdc05"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga0b87e0d3bf5853bcbb0b66a7c48fdc05">LOG_LEVEL</a>&#160;&#160;&#160;1</td></tr>
<tr class="memdesc:ga0b87e0d3bf5853bcbb0b66a7c48fdc05"><td class="mdescLeft">&#160;</td><td class="mdescRight">Уровень log serial трассировки <a class="el" href="group___t_r_a_c_e___s_e_r_i_a_l.html#ga730fb7b8d0bbb348dca73c15bd0e0b26">log_printf</a>. <br /></td></tr>
<tr class="memitem:ga501312b24e322de4dd6755ad442f0ba3" id="r_ga501312b24e322de4dd6755ad442f0ba3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga501312b24e322de4dd6755ad442f0ba3">RTT_FLASH_BUFFER_SIZE</a>&#160;&#160;&#160;1024</td></tr>
<tr class="memdesc:ga501312b24e322de4dd6755ad442f0ba3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Размер буфера RTT в Flash. <br /></td></tr>
<tr class="memitem:ga3bc1b76864e1d32cbdd174d4caae7724" id="r_ga3bc1b76864e1d32cbdd174d4caae7724"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga3bc1b76864e1d32cbdd174d4caae7724">RTT_FLASH_SECTOR</a>&#160;&#160;&#160;FLASH_SECTOR_11</td></tr>
<tr class="memdesc:ga3bc1b76864e1d32cbdd174d4caae7724"><td class="mdescLeft">&#160;</td><td class="mdescRight">Сектор FLASH куда положится RTT буфер <br /></td></tr>
<tr class="memitem:ga8e56f75d3ab8a89ddde1404ae23c3297" id="r_ga8e56f75d3ab8a89ddde1404ae23c3297"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga8e56f75d3ab8a89ddde1404ae23c3297">RTT_FLASH_SECTOR_START</a>&#160;&#160;&#160;0x080E0000</td></tr>
<tr class="memdesc:ga8e56f75d3ab8a89ddde1404ae23c3297"><td class="mdescLeft">&#160;</td><td class="mdescRight">Начало сектора RTT_FLASH_SECTOR. <br /></td></tr>
<tr class="memitem:gafeca0be3688dea07ff443f894668003d" id="r_gafeca0be3688dea07ff443f894668003d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gafeca0be3688dea07ff443f894668003d">RTT_FLASH_SECTOR_END</a>&#160;&#160;&#160;0x080FFFFF</td></tr>
<tr class="memdesc:gafeca0be3688dea07ff443f894668003d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Конец сектора RTT_FLASH_SECTOR. <br /></td></tr>
<tr class="memitem:ga47f454f804b4dbc26cae079e8d8641e6" id="r_ga47f454f804b4dbc26cae079e8d8641e6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga47f454f804b4dbc26cae079e8d8641e6">HARDFAULT_SERIAL_TRACE</a></td></tr>
<tr class="memdesc:ga47f454f804b4dbc26cae079e8d8641e6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Включить обработку и serial трассировку Hardfault. <br /></td></tr>
<tr class="memitem:gadc960255719c7eff4bdfaa850be9b313" id="r_gadc960255719c7eff4bdfaa850be9b313"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gadc960255719c7eff4bdfaa850be9b313">HF_RTT_TAG_BASE</a>&#160;&#160;&#160;0xDEAD0000</td></tr>
<tr class="memdesc:gadc960255719c7eff4bdfaa850be9b313"><td class="mdescLeft">&#160;</td><td class="mdescRight">базовый тег для HardFault <br /></td></tr>
<tr class="memitem:gafcc7ea03d4df8f1909e580b519a7f3ca" id="r_gafcc7ea03d4df8f1909e580b519a7f3ca"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gafcc7ea03d4df8f1909e580b519a7f3ca">HF_RTT_TAIL_SIZE</a>&#160;&#160;&#160;<a class="el" href="#ga501312b24e322de4dd6755ad442f0ba3">RTT_FLASH_BUFFER_SIZE</a></td></tr>
<tr class="memdesc:gafcc7ea03d4df8f1909e580b519a7f3ca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Размер буфера RTT, который сохранится при Hardfault. <br /></td></tr>
<tr class="memitem:gaa31234688b333a505aaa57b8ecdedf5b" id="r_gaa31234688b333a505aaa57b8ecdedf5b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gaa31234688b333a505aaa57b8ecdedf5b">HF_STACK_DUMP_WORDS</a>&#160;&#160;&#160;32</td></tr>
<tr class="memdesc:gaa31234688b333a505aaa57b8ecdedf5b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Сколько слов стека будет проанализировано во время Hardfault. <br /></td></tr>
<tr class="memitem:ga0c602733a4a359bf8c095d71cd4d0f63" id="r_ga0c602733a4a359bf8c095d71cd4d0f63"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga0c602733a4a359bf8c095d71cd4d0f63">HF_FLASH_ADDR</a>&#160;&#160;&#160;((uint32_t)0x080FF000)</td></tr>
<tr class="memdesc:ga0c602733a4a359bf8c095d71cd4d0f63"><td class="mdescLeft">&#160;</td><td class="mdescRight">Адрес FLASH куда положится RTT буфер <br /></td></tr>
<tr class="memitem:ga92d0d14732edb7dfa21d483304bdb051" id="r_ga92d0d14732edb7dfa21d483304bdb051"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga92d0d14732edb7dfa21d483304bdb051">HF_RAM_END</a>&#160;&#160;&#160;0x20030000</td></tr>
<tr class="memdesc:ga92d0d14732edb7dfa21d483304bdb051"><td class="mdescLeft">&#160;</td><td class="mdescRight">Конец RAM памяти (чтобы во время анализа стека не выйти за пределы) <br /></td></tr>
<tr class="memitem:ga4222e0e400ad81737cefcabeb03fd23b" id="r_ga4222e0e400ad81737cefcabeb03fd23b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga4222e0e400ad81737cefcabeb03fd23b">GPIO_TRACE_ENABLE</a></td></tr>
<tr class="memdesc:ga4222e0e400ad81737cefcabeb03fd23b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Включить GPIO трассировку <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>Конфигурация трекеров и трассировки </p>
<a name="doc-define-members" id="doc-define-members"></a><h2 id="header-doc-define-members" class="groupheader">Macro Definition Documentation</h2>
<a id="gac9eaedc31ab023ce7d6403999216e496" name="gac9eaedc31ab023ce7d6403999216e496"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac9eaedc31ab023ce7d6403999216e496">&#9670;&#160;</a></span>TRACKERS_ENABLE</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TRACKERS_ENABLE</td>
</tr>
</table>
</div><div class="memdoc">
<p>Включить трекеры </p>
<p class="definition">Definition at line <a class="el" href="mylibs__config_8h_source.html#l00029">29</a> of file <a class="el" href="mylibs__config_8h_source.html">mylibs_config.h</a>.</p>
</div>
</div>
<a id="ga76936505ca200d2e61226b7ba68f27c6" name="ga76936505ca200d2e61226b7ba68f27c6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga76936505ca200d2e61226b7ba68f27c6">&#9670;&#160;</a></span>SERIAL_TRACE_ENABLE</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define SERIAL_TRACE_ENABLE</td>
</tr>
</table>
</div><div class="memdoc">
<p>Включить serial трассировку </p>
<p class="definition">Definition at line <a class="el" href="mylibs__config_8h_source.html#l00030">30</a> of file <a class="el" href="mylibs__config_8h_source.html">mylibs_config.h</a>.</p>
</div>
</div>
<a id="ga00ff2175bdc1fb11c8ec970ea3010dd8" name="ga00ff2175bdc1fb11c8ec970ea3010dd8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga00ff2175bdc1fb11c8ec970ea3010dd8">&#9670;&#160;</a></span>RTT_TRACE_ENABLE</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define RTT_TRACE_ENABLE</td>
</tr>
</table>
</div><div class="memdoc">
<p>Включить serial трассировку через RTT. </p>
<p class="definition">Definition at line <a class="el" href="mylibs__config_8h_source.html#l00031">31</a> of file <a class="el" href="mylibs__config_8h_source.html">mylibs_config.h</a>.</p>
</div>
</div>
<a id="gab8db9704b5d11858aa879689b9d36336" name="gab8db9704b5d11858aa879689b9d36336"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab8db9704b5d11858aa879689b9d36336">&#9670;&#160;</a></span>SWO_TRACE_ENABLE</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define SWO_TRACE_ENABLE</td>
</tr>
</table>
</div><div class="memdoc">
<p>Включить serial трассировку через SWO. </p>
<p class="definition">Definition at line <a class="el" href="mylibs__config_8h_source.html#l00032">32</a> of file <a class="el" href="mylibs__config_8h_source.html">mylibs_config.h</a>.</p>
</div>
</div>
<a id="ga0b87e0d3bf5853bcbb0b66a7c48fdc05" name="ga0b87e0d3bf5853bcbb0b66a7c48fdc05"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga0b87e0d3bf5853bcbb0b66a7c48fdc05">&#9670;&#160;</a></span>LOG_LEVEL</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LOG_LEVEL&#160;&#160;&#160;1</td>
</tr>
</table>
</div><div class="memdoc">
<p>Уровень log serial трассировки <a class="el" href="group___t_r_a_c_e___s_e_r_i_a_l.html#ga730fb7b8d0bbb348dca73c15bd0e0b26">log_printf</a>. </p>
<ul>
<li>LOG_LEVEL == 0 - логирование отключено (макрос пустой)</li>
<li>LOG_LEVEL == 1 - выводится время и TAG</li>
<li>LOG_LEVEL &gt;= 2 - выводится время, TAG, имя файла и номер строки </li>
</ul>
<p class="definition">Definition at line <a class="el" href="mylibs__config_8h_source.html#l00039">39</a> of file <a class="el" href="mylibs__config_8h_source.html">mylibs_config.h</a>.</p>
</div>
</div>
<a id="ga501312b24e322de4dd6755ad442f0ba3" name="ga501312b24e322de4dd6755ad442f0ba3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga501312b24e322de4dd6755ad442f0ba3">&#9670;&#160;</a></span>RTT_FLASH_BUFFER_SIZE</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define RTT_FLASH_BUFFER_SIZE&#160;&#160;&#160;1024</td>
</tr>
</table>
</div><div class="memdoc">
<p>Размер буфера RTT в Flash. </p>
<p class="definition">Definition at line <a class="el" href="mylibs__config_8h_source.html#l00041">41</a> of file <a class="el" href="mylibs__config_8h_source.html">mylibs_config.h</a>.</p>
</div>
</div>
<a id="ga3bc1b76864e1d32cbdd174d4caae7724" name="ga3bc1b76864e1d32cbdd174d4caae7724"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga3bc1b76864e1d32cbdd174d4caae7724">&#9670;&#160;</a></span>RTT_FLASH_SECTOR</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define RTT_FLASH_SECTOR&#160;&#160;&#160;FLASH_SECTOR_11</td>
</tr>
</table>
</div><div class="memdoc">
<p>Сектор FLASH куда положится RTT буфер </p>
<p class="definition">Definition at line <a class="el" href="mylibs__config_8h_source.html#l00042">42</a> of file <a class="el" href="mylibs__config_8h_source.html">mylibs_config.h</a>.</p>
</div>
</div>
<a id="ga8e56f75d3ab8a89ddde1404ae23c3297" name="ga8e56f75d3ab8a89ddde1404ae23c3297"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga8e56f75d3ab8a89ddde1404ae23c3297">&#9670;&#160;</a></span>RTT_FLASH_SECTOR_START</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define RTT_FLASH_SECTOR_START&#160;&#160;&#160;0x080E0000</td>
</tr>
</table>
</div><div class="memdoc">
<p>Начало сектора RTT_FLASH_SECTOR. </p>
<p class="definition">Definition at line <a class="el" href="mylibs__config_8h_source.html#l00043">43</a> of file <a class="el" href="mylibs__config_8h_source.html">mylibs_config.h</a>.</p>
</div>
</div>
<a id="gafeca0be3688dea07ff443f894668003d" name="gafeca0be3688dea07ff443f894668003d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gafeca0be3688dea07ff443f894668003d">&#9670;&#160;</a></span>RTT_FLASH_SECTOR_END</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define RTT_FLASH_SECTOR_END&#160;&#160;&#160;0x080FFFFF</td>
</tr>
</table>
</div><div class="memdoc">
<p>Конец сектора RTT_FLASH_SECTOR. </p>
<p class="definition">Definition at line <a class="el" href="mylibs__config_8h_source.html#l00044">44</a> of file <a class="el" href="mylibs__config_8h_source.html">mylibs_config.h</a>.</p>
</div>
</div>
<a id="ga47f454f804b4dbc26cae079e8d8641e6" name="ga47f454f804b4dbc26cae079e8d8641e6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga47f454f804b4dbc26cae079e8d8641e6">&#9670;&#160;</a></span>HARDFAULT_SERIAL_TRACE</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define HARDFAULT_SERIAL_TRACE</td>
</tr>
</table>
</div><div class="memdoc">
<p>Включить обработку и serial трассировку Hardfault. </p>
<p class="definition">Definition at line <a class="el" href="mylibs__config_8h_source.html#l00047">47</a> of file <a class="el" href="mylibs__config_8h_source.html">mylibs_config.h</a>.</p>
</div>
</div>
<a id="gadc960255719c7eff4bdfaa850be9b313" name="gadc960255719c7eff4bdfaa850be9b313"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gadc960255719c7eff4bdfaa850be9b313">&#9670;&#160;</a></span>HF_RTT_TAG_BASE</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define HF_RTT_TAG_BASE&#160;&#160;&#160;0xDEAD0000</td>
</tr>
</table>
</div><div class="memdoc">
<p>базовый тег для HardFault </p>
<p class="definition">Definition at line <a class="el" href="mylibs__config_8h_source.html#l00048">48</a> of file <a class="el" href="mylibs__config_8h_source.html">mylibs_config.h</a>.</p>
</div>
</div>
<a id="gafcc7ea03d4df8f1909e580b519a7f3ca" name="gafcc7ea03d4df8f1909e580b519a7f3ca"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gafcc7ea03d4df8f1909e580b519a7f3ca">&#9670;&#160;</a></span>HF_RTT_TAIL_SIZE</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define HF_RTT_TAIL_SIZE&#160;&#160;&#160;<a class="el" href="#ga501312b24e322de4dd6755ad442f0ba3">RTT_FLASH_BUFFER_SIZE</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Размер буфера RTT, который сохранится при Hardfault. </p>
<p class="definition">Definition at line <a class="el" href="mylibs__config_8h_source.html#l00049">49</a> of file <a class="el" href="mylibs__config_8h_source.html">mylibs_config.h</a>.</p>
</div>
</div>
<a id="gaa31234688b333a505aaa57b8ecdedf5b" name="gaa31234688b333a505aaa57b8ecdedf5b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa31234688b333a505aaa57b8ecdedf5b">&#9670;&#160;</a></span>HF_STACK_DUMP_WORDS</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define HF_STACK_DUMP_WORDS&#160;&#160;&#160;32</td>
</tr>
</table>
</div><div class="memdoc">
<p>Сколько слов стека будет проанализировано во время Hardfault. </p>
<p class="definition">Definition at line <a class="el" href="mylibs__config_8h_source.html#l00050">50</a> of file <a class="el" href="mylibs__config_8h_source.html">mylibs_config.h</a>.</p>
</div>
</div>
<a id="ga0c602733a4a359bf8c095d71cd4d0f63" name="ga0c602733a4a359bf8c095d71cd4d0f63"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga0c602733a4a359bf8c095d71cd4d0f63">&#9670;&#160;</a></span>HF_FLASH_ADDR</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define HF_FLASH_ADDR&#160;&#160;&#160;((uint32_t)0x080FF000)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Адрес FLASH куда положится RTT буфер </p>
<p class="definition">Definition at line <a class="el" href="mylibs__config_8h_source.html#l00051">51</a> of file <a class="el" href="mylibs__config_8h_source.html">mylibs_config.h</a>.</p>
</div>
</div>
<a id="ga92d0d14732edb7dfa21d483304bdb051" name="ga92d0d14732edb7dfa21d483304bdb051"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga92d0d14732edb7dfa21d483304bdb051">&#9670;&#160;</a></span>HF_RAM_END</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define HF_RAM_END&#160;&#160;&#160;0x20030000</td>
</tr>
</table>
</div><div class="memdoc">
<p>Конец RAM памяти (чтобы во время анализа стека не выйти за пределы) </p>
<p class="definition">Definition at line <a class="el" href="mylibs__config_8h_source.html#l00052">52</a> of file <a class="el" href="mylibs__config_8h_source.html">mylibs_config.h</a>.</p>
</div>
</div>
<a id="ga4222e0e400ad81737cefcabeb03fd23b" name="ga4222e0e400ad81737cefcabeb03fd23b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4222e0e400ad81737cefcabeb03fd23b">&#9670;&#160;</a></span>GPIO_TRACE_ENABLE</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define GPIO_TRACE_ENABLE</td>
</tr>
</table>
</div><div class="memdoc">
<p>Включить GPIO трассировку </p>
<p class="definition">Definition at line <a class="el" href="mylibs__config_8h_source.html#l00054">54</a> of file <a class="el" href="mylibs__config_8h_source.html">mylibs_config.h</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,19 @@
var group___t_r_a_c_e___c_o_n_f_i_g =
[
[ "TRACKERS_ENABLE", "group___t_r_a_c_e___c_o_n_f_i_g.html#gac9eaedc31ab023ce7d6403999216e496", null ],
[ "SERIAL_TRACE_ENABLE", "group___t_r_a_c_e___c_o_n_f_i_g.html#ga76936505ca200d2e61226b7ba68f27c6", null ],
[ "RTT_TRACE_ENABLE", "group___t_r_a_c_e___c_o_n_f_i_g.html#ga00ff2175bdc1fb11c8ec970ea3010dd8", null ],
[ "SWO_TRACE_ENABLE", "group___t_r_a_c_e___c_o_n_f_i_g.html#gab8db9704b5d11858aa879689b9d36336", null ],
[ "LOG_LEVEL", "group___t_r_a_c_e___c_o_n_f_i_g.html#ga0b87e0d3bf5853bcbb0b66a7c48fdc05", null ],
[ "RTT_FLASH_BUFFER_SIZE", "group___t_r_a_c_e___c_o_n_f_i_g.html#ga501312b24e322de4dd6755ad442f0ba3", null ],
[ "RTT_FLASH_SECTOR", "group___t_r_a_c_e___c_o_n_f_i_g.html#ga3bc1b76864e1d32cbdd174d4caae7724", null ],
[ "RTT_FLASH_SECTOR_START", "group___t_r_a_c_e___c_o_n_f_i_g.html#ga8e56f75d3ab8a89ddde1404ae23c3297", null ],
[ "RTT_FLASH_SECTOR_END", "group___t_r_a_c_e___c_o_n_f_i_g.html#gafeca0be3688dea07ff443f894668003d", null ],
[ "HARDFAULT_SERIAL_TRACE", "group___t_r_a_c_e___c_o_n_f_i_g.html#ga47f454f804b4dbc26cae079e8d8641e6", null ],
[ "HF_RTT_TAG_BASE", "group___t_r_a_c_e___c_o_n_f_i_g.html#gadc960255719c7eff4bdfaa850be9b313", null ],
[ "HF_RTT_TAIL_SIZE", "group___t_r_a_c_e___c_o_n_f_i_g.html#gafcc7ea03d4df8f1909e580b519a7f3ca", null ],
[ "HF_STACK_DUMP_WORDS", "group___t_r_a_c_e___c_o_n_f_i_g.html#gaa31234688b333a505aaa57b8ecdedf5b", null ],
[ "HF_FLASH_ADDR", "group___t_r_a_c_e___c_o_n_f_i_g.html#ga0c602733a4a359bf8c095d71cd4d0f63", null ],
[ "HF_RAM_END", "group___t_r_a_c_e___c_o_n_f_i_g.html#ga92d0d14732edb7dfa21d483304bdb051", null ],
[ "GPIO_TRACE_ENABLE", "group___t_r_a_c_e___c_o_n_f_i_g.html#ga4222e0e400ad81737cefcabeb03fd23b", null ]
];

View File

@ -0,0 +1,213 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: GPIO trace defines</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('group___t_r_a_c_e___g_p_i_o.html','',''); });
</script>
<div id="container">
<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">GPIO trace defines <div class="ingroups"><a class="el" href="group___m_y_l_i_b_s___a_l_l.html">My Libs</a> &raquo; <a class="el" href="group___m_y_l_i_b_s___d_e_f_i_n_e_s.html">General Defines</a> &raquo; <a class="el" href="group___t_r_a_c_e.html">Trace defines</a></div></div></div>
</div><!--header-->
<div class="contents">
<p>Дефайны для работы с GPIO трассировкой
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-define-members" class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ga69741d88c991112e99fe7a62e025108a" id="r_ga69741d88c991112e99fe7a62e025108a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga69741d88c991112e99fe7a62e025108a">TRACE_GPIO_RESET</a>(_gpio_, _pin_)</td></tr>
<tr class="memdesc:ga69741d88c991112e99fe7a62e025108a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Сбросить указанную ножку GPIO. <br /></td></tr>
<tr class="memitem:ga02a6a7b273766121db8ad4a1371373eb" id="r_ga02a6a7b273766121db8ad4a1371373eb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga02a6a7b273766121db8ad4a1371373eb">TRACE_GPIO_SET</a>(_gpio_, _pin_)</td></tr>
<tr class="memdesc:ga02a6a7b273766121db8ad4a1371373eb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Установить указанную ножку GPIO. <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>Дефайны для работы с GPIO трассировкой </p>
<p>Определяется дефайны для работы с GPIO трассировкой:</p><ul>
<li><a class="el" href="#ga69741d88c991112e99fe7a62e025108a" title="Сбросить указанную ножку GPIO.">TRACE_GPIO_RESET()</a> - для сброса ножки GPIO (через BSRR)</li>
<li><a class="el" href="#ga02a6a7b273766121db8ad4a1371373eb" title="Установить указанную ножку GPIO.">TRACE_GPIO_SET()</a> - для выставления ножки GPIO (через BSRR)</li>
<li>Если трассировка <a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga4222e0e400ad81737cefcabeb03fd23b">GPIO_TRACE_ENABLE</a> отключена, то все дефайны определяются как 'ничего' и на производительность кода не влияют </li>
</ul>
<a name="doc-define-members" id="doc-define-members"></a><h2 id="header-doc-define-members" class="groupheader">Macro Definition Documentation</h2>
<a id="ga69741d88c991112e99fe7a62e025108a" name="ga69741d88c991112e99fe7a62e025108a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga69741d88c991112e99fe7a62e025108a">&#9670;&#160;</a></span>TRACE_GPIO_RESET</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TRACE_GPIO_RESET</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_gpio_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_pin_</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(_gpio_)-&gt;BSRR = ((_pin_)&lt;&lt;16)</div>
</div><!-- fragment -->
<p>Сбросить указанную ножку GPIO. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">_gpio_</td><td>Указатель на структуру GPIO (напр. GPIOA) </td></tr>
<tr><td class="paramname">_pin_</td><td>Номер ножки (напр. GPIO_PIN_0)</td></tr>
</table>
</dd>
</dl>
<p>Варианты реализации:</p><ul>
<li>GPIO_TRACE_ENABLE не определён - макрос пустой</li>
<li>GPIO_TRACE_ENABLE определён - устанавливает бит сброса через BSRR ((<em>pin</em>)&lt;&lt;16) </li>
</ul>
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00140">140</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
</div>
</div>
<a id="ga02a6a7b273766121db8ad4a1371373eb" name="ga02a6a7b273766121db8ad4a1371373eb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga02a6a7b273766121db8ad4a1371373eb">&#9670;&#160;</a></span>TRACE_GPIO_SET</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TRACE_GPIO_SET</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_gpio_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_pin_</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(_gpio_)-&gt;BSRR = (((_pin_)))</div>
</div><!-- fragment -->
<p>Установить указанную ножку GPIO. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">_gpio_</td><td>Указатель на структуру GPIO (например GPIOA) </td></tr>
<tr><td class="paramname">_pin_</td><td>Номер ножки (напр. GPIO_PIN_0)</td></tr>
</table>
</dd>
</dl>
<p>Варианты реализации:</p><ul>
<li>GPIO_TRACE_ENABLE не определён - макрос пустой</li>
<li>GPIO_TRACE_ENABLE определён - устанавливает бит установки через BSRR (<em>pin</em>) </li>
</ul>
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00139">139</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,5 @@
var group___t_r_a_c_e___g_p_i_o =
[
[ "TRACE_GPIO_RESET", "group___t_r_a_c_e___g_p_i_o.html#ga69741d88c991112e99fe7a62e025108a", null ],
[ "TRACE_GPIO_SET", "group___t_r_a_c_e___g_p_i_o.html#ga02a6a7b273766121db8ad4a1371373eb", null ]
];

View File

@ -0,0 +1,230 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: Hardfault trace defines</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html','',''); });
</script>
<div id="container">
<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">Hardfault trace defines <div class="ingroups"><a class="el" href="group___m_y_l_i_b_s___a_l_l.html">My Libs</a> &raquo; <a class="el" href="group___m_y_l_i_b_s___d_e_f_i_n_e_s.html">General Defines</a> &raquo; <a class="el" href="group___t_r_a_c_e.html">Trace defines</a></div></div></div>
</div><!--header-->
<div class="contents">
<p>Модуль трассировки HardFault с возможностью сохранения RTT буфера во Flash.
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-nested-classes" class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:HF_5FStackFrame_5Ft" id="r_HF_5FStackFrame_5Ft"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_h_f___stack_frame__t.html">HF_StackFrame_t</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Контекст стек-фрейма процессора при HardFault. <a href="struct_h_f___stack_frame__t.html#details">More...</a><br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga03f8b6f3b537ee1c8e91065c60db504f" id="r_ga03f8b6f3b537ee1c8e91065c60db504f"><td class="memItemLeft" align="right" valign="top">__STATIC_FORCEINLINE int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga03f8b6f3b537ee1c8e91065c60db504f">HF_CheckRecovered</a> (int erase)</td></tr>
<tr class="memdesc:ga03f8b6f3b537ee1c8e91065c60db504f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Проверка и вывод последнего HardFault-трейса из Flash. <br /></td></tr>
<tr class="memitem:gadd8e10e7ec3b0204f7f92062ecd452f7" id="r_gadd8e10e7ec3b0204f7f92062ecd452f7"><td class="memItemLeft" align="right" valign="top">__STATIC_FORCEINLINE void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gadd8e10e7ec3b0204f7f92062ecd452f7">HF_HandleFault</a> (void)</td></tr>
<tr class="memdesc:gadd8e10e7ec3b0204f7f92062ecd452f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Обработчик HardFault. <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>Модуль трассировки HardFault с возможностью сохранения RTT буфера во Flash. </p>
<p>Этот модуль позволяет сохранять контекст процессора и последние символы RTT буфера при возникновении HardFault.</p>
<p>Механизм работы:</p><ul>
<li>При срабатывании HardFault вызывается <a class="el" href="#gadd8e10e7ec3b0204f7f92062ecd452f7" title="Обработчик HardFault.">HF_HandleFault()</a>, который:<ol type="1">
<li>Получает указатель на стек, где произошёл HardFault (MSP или PSP).</li>
<li>Выводит значения регистров R0-R3, R12, LR, PC, PSR и системных регистров SCB.</li>
<li>Формирует строку с регистрами и копирует последние символы RTT буфера.</li>
<li>Сохраняет данные во Flash с базовым тегом HF_RTT_TAG_BASE.</li>
</ol>
</li>
<li>Для восстановления последнего HardFault используется <a class="el" href="#ga03f8b6f3b537ee1c8e91065c60db504f" title="Проверка и вывод последнего HardFault-трейса из Flash.">HF_CheckRecovered()</a>, который:<ol type="1">
<li>Читает запись во Flash по базовому тегу.</li>
<li>Выводит сохранённый RTT буфер и контекст регистров.</li>
<li>Опционально стирает Flash после восстановления. <div class="fragment"><div class="line"><span class="keywordtype">void</span> Hardfault()</div>
<div class="line">{</div>
<div class="line"> <a class="code hl_function" href="#gadd8e10e7ec3b0204f7f92062ecd452f7">HF_HandleFault</a>();</div>
<div class="line"> NVIC_SystemReset();</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span> main()</div>
<div class="line">{</div>
<div class="line"> <span class="keywordflow">if</span>(<a class="code hl_function" href="#ga03f8b6f3b537ee1c8e91065c60db504f">HF_CheckRecovered</a>(0))</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">//set hardfault error</span></div>
<div class="line"> <a class="code hl_function" href="group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga8d8c6850e32b42871faefce3352012d1">RTT_EraseFlash</a>(); <span class="comment">// erase rtt flash after message readed</span></div>
<div class="line"> }</div>
<div class="line">} </div>
<div class="ttc" id="agroup___t_r_a_c_e___h_a_r_d_f_a_u_l_t_html_ga03f8b6f3b537ee1c8e91065c60db504f"><div class="ttname"><a href="#ga03f8b6f3b537ee1c8e91065c60db504f">HF_CheckRecovered</a></div><div class="ttdeci">__STATIC_FORCEINLINE int HF_CheckRecovered(int erase)</div><div class="ttdoc">Проверка и вывод последнего HardFault-трейса из Flash.</div><div class="ttdef"><b>Definition</b> <a href="trace_8h_source.html#l00466">trace.h:466</a></div></div>
<div class="ttc" id="agroup___t_r_a_c_e___h_a_r_d_f_a_u_l_t_html_gadd8e10e7ec3b0204f7f92062ecd452f7"><div class="ttname"><a href="#gadd8e10e7ec3b0204f7f92062ecd452f7">HF_HandleFault</a></div><div class="ttdeci">__STATIC_FORCEINLINE void HF_HandleFault(void)</div><div class="ttdoc">Обработчик HardFault.</div><div class="ttdef"><b>Definition</b> <a href="trace_8h_source.html#l00507">trace.h:507</a></div></div>
<div class="ttc" id="agroup___t_r_a_c_e___r_t_t___f_l_a_s_h_html_ga8d8c6850e32b42871faefce3352012d1"><div class="ttname"><a href="group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga8d8c6850e32b42871faefce3352012d1">RTT_EraseFlash</a></div><div class="ttdeci">__STATIC_FORCEINLINE int RTT_EraseFlash(void)</div><div class="ttdoc">Стирание сектора Flash с RTT-буфером</div><div class="ttdef"><b>Definition</b> <a href="trace_8h_source.html#l00365">trace.h:365</a></div></div>
</div><!-- fragment --> </li>
</ol>
</li>
</ul>
<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
<a id="ga03f8b6f3b537ee1c8e91065c60db504f" name="ga03f8b6f3b537ee1c8e91065c60db504f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga03f8b6f3b537ee1c8e91065c60db504f">&#9670;&#160;</a></span>HF_CheckRecovered()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">__STATIC_FORCEINLINE int HF_CheckRecovered </td>
<td>(</td>
<td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>erase</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Проверка и вывод последнего HardFault-трейса из Flash. </p>
<p>Функция ищет последнюю запись HardFault по базовому тегу HF_RTT_TAG_BASE и выводит её содержимое в консоль. После успешного вывода Flash можно опционально очистить.</p>
<dl class="section return"><dt>Returns</dt><dd>int<ul>
<li>1 — данные HardFault найдены и выведены</li>
<li>0 — данные отсутствуют или тег не найден</li>
</ul>
</dd></dl>
<dl class="section note"><dt>Note</dt><dd>Вызов рекомендуется при инициализации приложения для анализа предыдущего сбоя. </dd></dl>
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00466">466</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
</div>
</div>
<a id="gadd8e10e7ec3b0204f7f92062ecd452f7" name="gadd8e10e7ec3b0204f7f92062ecd452f7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gadd8e10e7ec3b0204f7f92062ecd452f7">&#9670;&#160;</a></span>HF_HandleFault()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">__STATIC_FORCEINLINE void HF_HandleFault </td>
<td>(</td>
<td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Обработчик HardFault. </p>
<p>Вызывается из прерывания HardFault или в любом месте где понятно что ошибка критическая. Последовательно выполняет:</p><ol type="1">
<li>Определяет активный стек (MSP или PSP) на момент сбоя.</li>
<li>Сохраняет значения регистров R0-R3, R12, LR, PC, PSR.</li>
<li>Выводит системные регистры CFSR, HFSR, DFSR, AFSR, MMFAR, BFAR.</li>
<li>Формирует stack trace с 3 уровнями возврата.</li>
<li>Копирует последние символы RTT буфера.</li>
<li>Сохраняет все данные во Flash через RTT_SaveToFlash с базовым тегом HF_RTT_TAG_BASE.</li>
</ol>
<dl class="section note"><dt>Note</dt><dd>Функция защищена, так как вызывается в контексте сбоя — минимизирует использование вызовов HAL. </dd></dl>
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00507">507</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,15 @@
var group___t_r_a_c_e___h_a_r_d_f_a_u_l_t =
[
[ "HF_StackFrame_t", "struct_h_f___stack_frame__t.html", [
[ "r0", "struct_h_f___stack_frame__t.html#a4146ed28926b5f234132b7112119a413", null ],
[ "r1", "struct_h_f___stack_frame__t.html#a286104d19185714940645a9df814ddea", null ],
[ "r2", "struct_h_f___stack_frame__t.html#a5a52e5006dabcf68c0fa4cfb0e03335b", null ],
[ "r3", "struct_h_f___stack_frame__t.html#a453c7af42b6928a693af422e17c981d3", null ],
[ "r12", "struct_h_f___stack_frame__t.html#a819ee3bc518c460ece1b7c4079f8f80b", null ],
[ "lr", "struct_h_f___stack_frame__t.html#a6e51904297f7725e96d5b5fb291ef577", null ],
[ "pc", "struct_h_f___stack_frame__t.html#a16563896004751c90e41c81ae4570732", null ],
[ "psr", "struct_h_f___stack_frame__t.html#ae47cb051ee3c94471bfd4fe7e49c55f9", null ]
] ],
[ "HF_CheckRecovered", "group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html#ga03f8b6f3b537ee1c8e91065c60db504f", null ],
[ "HF_HandleFault", "group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html#gadd8e10e7ec3b0204f7f92062ecd452f7", null ]
];

View File

@ -0,0 +1,285 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: Flash RTT Buffer</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('group___t_r_a_c_e___r_t_t___f_l_a_s_h.html','',''); });
</script>
<div id="container">
<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">Flash RTT Buffer <div class="ingroups"><a class="el" href="group___m_y_l_i_b_s___a_l_l.html">My Libs</a> &raquo; <a class="el" href="group___m_y_l_i_b_s___d_e_f_i_n_e_s.html">General Defines</a> &raquo; <a class="el" href="group___t_r_a_c_e.html">Trace defines</a></div></div></div>
</div><!--header-->
<div class="contents">
<p>Макросы и функции для сохранения/чтения RTT буфера в Flash.
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-nested-classes" class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:RTT_5FFlashHeader_5Ft" id="r_RTT_5FFlashHeader_5Ft"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_r_t_t___flash_header__t.html">RTT_FlashHeader_t</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Структура RTT, которая будет положена в Flash. <a href="struct_r_t_t___flash_header__t.html#details">More...</a><br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga21353cb4f5af666237739e62ce019cd6" id="r_ga21353cb4f5af666237739e62ce019cd6"><td class="memItemLeft" align="right" valign="top">__STATIC_FORCEINLINE void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga21353cb4f5af666237739e62ce019cd6">RTT_FlashPrepare</a> (void)</td></tr>
<tr class="memdesc:ga21353cb4f5af666237739e62ce019cd6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Подготовка Flash к записи <br /></td></tr>
<tr class="memitem:ga79f222c8ab644de4d47f07528d1edd63" id="r_ga79f222c8ab644de4d47f07528d1edd63"><td class="memItemLeft" align="right" valign="top">__STATIC_FORCEINLINE int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga79f222c8ab644de4d47f07528d1edd63">RTT_SaveToFlash</a> (uint32_t tag, uint32_t tail_size)</td></tr>
<tr class="memdesc:ga79f222c8ab644de4d47f07528d1edd63"><td class="mdescLeft">&#160;</td><td class="mdescRight">Сохраняет последние символы RTT-буфера в Flash по тегу <br /></td></tr>
<tr class="memitem:ga734b2ebbf0c77699b739013878cfd146" id="r_ga734b2ebbf0c77699b739013878cfd146"><td class="memItemLeft" align="right" valign="top">__STATIC_FORCEINLINE int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga734b2ebbf0c77699b739013878cfd146">RTT_ReadFromFlash</a> (uint32_t tag, char *Buffer, uint32_t tail_size, uint32_t *read_size)</td></tr>
<tr class="memdesc:ga734b2ebbf0c77699b739013878cfd146"><td class="mdescLeft">&#160;</td><td class="mdescRight">Читает последние символы RTT-буфера из Flash по тегу <br /></td></tr>
<tr class="memitem:ga8d8c6850e32b42871faefce3352012d1" id="r_ga8d8c6850e32b42871faefce3352012d1"><td class="memItemLeft" align="right" valign="top">__STATIC_FORCEINLINE int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga8d8c6850e32b42871faefce3352012d1">RTT_EraseFlash</a> (void)</td></tr>
<tr class="memdesc:ga8d8c6850e32b42871faefce3352012d1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Стирание сектора Flash с RTT-буфером <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>Макросы и функции для сохранения/чтения RTT буфера в Flash. </p>
<p>Модуль позволяет сохранять данные RTT буфера во Flash и читать их обратно по тегам. <br />
Теги работают следующим образом: <br />
</p><ul>
<li>Базовый тег (младший байт = 0): модуль сам выбирает первый свободный слот во Flash; <br />
новые записи получают автоинкрементированный младший байт тега (от 0x00 до 0xFF). <br />
</li>
<li>Конкретный тег (младший байт != 0): запись или чтение происходит строго с указанным тегом; <br />
если слот с таким тегом уже занят, запись не выполняется. <br />
</li>
<li>Автоинкремент позволяет хранить несколько последовательных записей в пределах одного базового тега, <br />
без необходимости вручную отслеживать адреса Flash или позиции буферов. </li>
</ul>
<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
<a id="ga21353cb4f5af666237739e62ce019cd6" name="ga21353cb4f5af666237739e62ce019cd6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga21353cb4f5af666237739e62ce019cd6">&#9670;&#160;</a></span>RTT_FlashPrepare()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">__STATIC_FORCEINLINE void RTT_FlashPrepare </td>
<td>(</td>
<td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Подготовка Flash к записи </p>
<p>Сбрасывает ошибки Flash и ожидает готовности перед записью </p>
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00181">181</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
</div>
</div>
<a id="ga79f222c8ab644de4d47f07528d1edd63" name="ga79f222c8ab644de4d47f07528d1edd63"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga79f222c8ab644de4d47f07528d1edd63">&#9670;&#160;</a></span>RTT_SaveToFlash()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">__STATIC_FORCEINLINE int RTT_SaveToFlash </td>
<td>(</td>
<td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>tag</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>tail_size</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Сохраняет последние символы RTT-буфера в Flash по тегу </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">tag</td><td>Базовый или конкретный идентификатор буфера. </td></tr>
<tr><td class="paramname">tail_size</td><td>Количество последних символов RTT для копирования </td></tr>
<tr><td class="paramname">buf_num</td><td>Указатель на переменную в которую запишется номер буфера для конкретного тега </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>&gt;=0 — номер буфера (тег) для записи, &lt;0 — ошибка (нет места, тег уже занят, ошибка записи в флеш)</dd></dl>
<p>Автоматически копирует последние tail_size символов из RTT-буфера и записывает их во Flash. Тег может быть базовым или конкретным:</p><ul>
<li>Если базовый (младший байт == 0) — будет выбран первый свободный слот с автоинкрементом. Автоинкремент формируется в пределах от 0x1 до 0xFF</li>
<li>Если конкретный (младший байт != 0) — запись выполняется только с этим тегом, иначе ошибка. </li>
</ul>
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00204">204</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
</div>
</div>
<a id="ga734b2ebbf0c77699b739013878cfd146" name="ga734b2ebbf0c77699b739013878cfd146"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga734b2ebbf0c77699b739013878cfd146">&#9670;&#160;</a></span>RTT_ReadFromFlash()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">__STATIC_FORCEINLINE int RTT_ReadFromFlash </td>
<td>(</td>
<td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>tag</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *</td> <td class="paramname"><span class="paramname"><em>Buffer</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>tail_size</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t *</td> <td class="paramname"><span class="paramname"><em>read_size</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Читает последние символы RTT-буфера из Flash по тегу </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">tag</td><td>Базовый или конкретный идентификатор буфера. </td></tr>
<tr><td class="paramname">Buffer</td><td>Буфер назначения для копирования данных </td></tr>
<tr><td class="paramname">tail_size</td><td>Количество последних символов, которые нужно прочитать </td></tr>
<tr><td class="paramname">read_size</td><td>Количество считанных символов </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>&gt;=0 — номер буфера (тег) для записи, &lt;0 — ошибка (тег не найден или структура повреждена)</dd></dl>
<p>Копирует последние tail_size символов из найденной записи Flash в Buffer. Тег может быть базовым или конкретным:</p><ul>
<li>Если базовый (младший байт == 0) — будет прочитана последняя запись из группы.</li>
<li>Если конкретный (младший байт != 0) — прочитывается именно эта запись. </li>
</ul>
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00301">301</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
</div>
</div>
<a id="ga8d8c6850e32b42871faefce3352012d1" name="ga8d8c6850e32b42871faefce3352012d1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga8d8c6850e32b42871faefce3352012d1">&#9670;&#160;</a></span>RTT_EraseFlash()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">__STATIC_FORCEINLINE int RTT_EraseFlash </td>
<td>(</td>
<td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Стирание сектора Flash с RTT-буфером </p>
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00365">365</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,12 @@
var group___t_r_a_c_e___r_t_t___f_l_a_s_h =
[
[ "RTT_FlashHeader_t", "struct_r_t_t___flash_header__t.html", [
[ "tag", "struct_r_t_t___flash_header__t.html#a844ee5470a323a749856cbb7a682dc57", null ],
[ "size", "struct_r_t_t___flash_header__t.html#afd1a5c51af6f97d170c2ccbbe3e34699", null ],
[ "data", "struct_r_t_t___flash_header__t.html#ae7276198385c8d6f6508f433d042d52a", null ]
] ],
[ "RTT_FlashPrepare", "group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga21353cb4f5af666237739e62ce019cd6", null ],
[ "RTT_SaveToFlash", "group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga79f222c8ab644de4d47f07528d1edd63", null ],
[ "RTT_ReadFromFlash", "group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga734b2ebbf0c77699b739013878cfd146", null ],
[ "RTT_EraseFlash", "group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga8d8c6850e32b42871faefce3352012d1", null ]
];

View File

@ -0,0 +1,225 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: Serial trace defines</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('group___t_r_a_c_e___s_e_r_i_a_l.html','',''); });
</script>
<div id="container">
<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">Serial trace defines <div class="ingroups"><a class="el" href="group___m_y_l_i_b_s___a_l_l.html">My Libs</a> &raquo; <a class="el" href="group___m_y_l_i_b_s___d_e_f_i_n_e_s.html">General Defines</a> &raquo; <a class="el" href="group___t_r_a_c_e.html">Trace defines</a></div></div></div>
</div><!--header-->
<div class="contents">
<p>Дефайны для работы с serial трассировкой (SWO, RTT)
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-define-members" class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:gae9b9b8a611e291a2f2aa5abf99f3ebaa" id="r_gae9b9b8a611e291a2f2aa5abf99f3ebaa"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gae9b9b8a611e291a2f2aa5abf99f3ebaa">my_printf</a>(...)</td></tr>
<tr class="memdesc:gae9b9b8a611e291a2f2aa5abf99f3ebaa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Универсальный макрос для вывода трассировки <br /></td></tr>
<tr class="memitem:ga730fb7b8d0bbb348dca73c15bd0e0b26" id="r_ga730fb7b8d0bbb348dca73c15bd0e0b26"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga730fb7b8d0bbb348dca73c15bd0e0b26">log_printf</a>(TAG, fmt, ...)</td></tr>
<tr class="memdesc:ga730fb7b8d0bbb348dca73c15bd0e0b26"><td class="mdescLeft">&#160;</td><td class="mdescRight">Макрос логирования с поддержкой уровней LOG_LEVEL. <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>Дефайны для работы с serial трассировкой (SWO, RTT) </p>
<p>Определяется дефайн <a class="el" href="#gae9b9b8a611e291a2f2aa5abf99f3ebaa">my_printf()</a> и <a class="el" href="#ga730fb7b8d0bbb348dca73c15bd0e0b26">log_printf()</a> для работы с serial трассировкой:</p><ul>
<li>для RTT это будет вызов функции SEGGER_RTT_printf(), с подключением библиотеки SEGGER_RTT.h</li>
<li><p class="startli">для SWO это будет просто printf()</p>
<p class="startli">Но библиотеку STDOUT надо подключить самостоятельно:</p>
<pre class="fragment"> Manage Run-Time Environment -&gt; Compiler -&gt; I/O -&gt; STDOUT
</pre><p class="startli">Для SWO также надо включить трассировку: <br />
</p>
<pre class="fragment"> Options For Target -&gt; Debug -&gt; Debugger Settings
</pre><p class="startli">В вкладке Debug:</p><ul>
<li>Port = SW В вкладке Trace:</li>
<li>Указать Core Clock</li>
<li>Выставить Trace Port = SWO</li>
<li>ITM - выбрать нужный порт (для Keil нулевой порт) <br />
</li>
</ul>
</li>
<li>Если трассировка <a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga76936505ca200d2e61226b7ba68f27c6">SERIAL_TRACE_ENABLE</a> отключена, то все дефайны определяются как 'ничего' и на производительность кода не влияют</li>
</ul>
<p>Если трассировка отключена, все макросы пустые и не влияют на производительность </p>
<a name="doc-define-members" id="doc-define-members"></a><h2 id="header-doc-define-members" class="groupheader">Macro Definition Documentation</h2>
<a id="gae9b9b8a611e291a2f2aa5abf99f3ebaa" name="gae9b9b8a611e291a2f2aa5abf99f3ebaa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gae9b9b8a611e291a2f2aa5abf99f3ebaa">&#9670;&#160;</a></span>my_printf</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define my_printf</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em></em></span>...</td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">SEGGER_RTT_printf(0, __VA_ARGS__)</div>
</div><!-- fragment -->
<p>Универсальный макрос для вывода трассировки </p>
<p>Варианты реализации:</p><ul>
<li>RTT_TRACE_ENABLE <span class="tt">SEGGER_RTT_printf(0, ...)</span></li>
<li>SWO_TRACE_ENABLE - <span class="tt">printf(...)</span></li>
<li>NO_TRACE - пустой макрос </li>
</ul>
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00069">69</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
</div>
</div>
<a id="ga730fb7b8d0bbb348dca73c15bd0e0b26" name="ga730fb7b8d0bbb348dca73c15bd0e0b26"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga730fb7b8d0bbb348dca73c15bd0e0b26">&#9670;&#160;</a></span>log_printf</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define log_printf</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>TAG</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>fmt</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em></em></span>...&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_define" href="#gae9b9b8a611e291a2f2aa5abf99f3ebaa">my_printf</a>(<span class="stringliteral">&quot;\n[%lu] [%s] &quot;</span> fmt, \</div>
<div class="line">(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)uwTick, TAG, ##__VA_ARGS__)</div>
<div class="ttc" id="agroup___t_r_a_c_e___s_e_r_i_a_l_html_gae9b9b8a611e291a2f2aa5abf99f3ebaa"><div class="ttname"><a href="#gae9b9b8a611e291a2f2aa5abf99f3ebaa">my_printf</a></div><div class="ttdeci">#define my_printf(...)</div><div class="ttdoc">Универсальный макрос для вывода трассировки</div><div class="ttdef"><b>Definition</b> <a href="trace_8h_source.html#l00069">trace.h:69</a></div></div>
</div><!-- fragment -->
<p>Макрос логирования с поддержкой уровней LOG_LEVEL. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">TAG</td><td>Тэг лога </td></tr>
<tr><td class="paramname">fmt,...</td><td>Форматируемая строка</td></tr>
</table>
</dd>
</dl>
<p>Варианты реализации:</p><ul>
<li>LOG_LEVEL == 0 - логирование отключено (макрос пустой)</li>
<li>LOG_LEVEL == 1 - выводится время и TAG</li>
<li>LOG_LEVEL &gt;= 2 - выводится время, TAG, имя файла и номер строки </li>
</ul>
<p class="definition">Definition at line <a class="el" href="trace_8h_source.html#l00094">94</a> of file <a class="el" href="trace_8h_source.html">trace.h</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,5 @@
var group___t_r_a_c_e___s_e_r_i_a_l =
[
[ "my_printf", "group___t_r_a_c_e___s_e_r_i_a_l.html#gae9b9b8a611e291a2f2aa5abf99f3ebaa", null ],
[ "log_printf", "group___t_r_a_c_e___s_e_r_i_a_l.html#ga730fb7b8d0bbb348dca73c15bd0e0b26", null ]
];

View File

@ -0,0 +1,704 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: Trackers defines</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('group___t_r_a_c_k_e_r_s.html','',''); });
</script>
<div id="container">
<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">Trackers defines <div class="ingroups"><a class="el" href="group___m_y_l_i_b_s___a_l_l.html">My Libs</a> &raquo; <a class="el" href="group___m_y_l_i_b_s___d_e_f_i_n_e_s.html">General Defines</a></div></div></div>
</div><!--header-->
<div class="contents">
<p>Дефайны для работы с трекерами
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-define-members" class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ga50ccb119acf302969b7fdcb58f2130e4" id="r_ga50ccb119acf302969b7fdcb58f2130e4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga50ccb119acf302969b7fdcb58f2130e4">TrackerTypeDef</a>(num_user_vars)</td></tr>
<tr class="memdesc:ga50ccb119acf302969b7fdcb58f2130e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Структура для счетчиков отладки <br /></td></tr>
<tr class="memitem:ga72be24629fedb8bf70e830373d151fbc" id="r_ga72be24629fedb8bf70e830373d151fbc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga72be24629fedb8bf70e830373d151fbc">num_of_usercnts</a>(_user_)</td></tr>
<tr class="memdesc:ga72be24629fedb8bf70e830373d151fbc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Получить количетство пользовательских переменных <br /></td></tr>
<tr class="memitem:gadd7fd2c6e3a4800f1d5ddab35fd4b43e" id="r_gadd7fd2c6e3a4800f1d5ddab35fd4b43e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gadd7fd2c6e3a4800f1d5ddab35fd4b43e">assert_usertracker</a>(_cntstruct_, _uservarnumb_)</td></tr>
<tr class="memdesc:gadd7fd2c6e3a4800f1d5ddab35fd4b43e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Проверка существует ли указанная пользовательская переменная <br /></td></tr>
<tr class="memitem:gad91d8ca89074270fc040c0449e57cf07" id="r_gad91d8ca89074270fc040c0449e57cf07"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gad91d8ca89074270fc040c0449e57cf07">if_assert_usertracker</a>(_cntstruct_, _uservarnumb_)</td></tr>
<tr class="memdesc:gad91d8ca89074270fc040c0449e57cf07"><td class="mdescLeft">&#160;</td><td class="mdescRight">Условие для проверки существует ли указанная пользовательская переменная <br /></td></tr>
<tr class="memitem:ga39b6ffbc561f8caac276415e1ad32c30" id="r_ga39b6ffbc561f8caac276415e1ad32c30"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga39b6ffbc561f8caac276415e1ad32c30">tern_assert_usertracker</a>(_cntstruct_, _uservarnumb_)</td></tr>
<tr class="memdesc:ga39b6ffbc561f8caac276415e1ad32c30"><td class="mdescLeft">&#160;</td><td class="mdescRight">Тернарный оператор для проверки существует ли указанная пользовательская переменная <br /></td></tr>
<tr class="memitem:gab880911066605602a966641682090169" id="r_gab880911066605602a966641682090169"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gab880911066605602a966641682090169">TrackerGet_Ok</a>(_cntstruct_)</td></tr>
<tr class="memdesc:gab880911066605602a966641682090169"><td class="mdescLeft">&#160;</td><td class="mdescRight">Считать счетчик успешных событий <br /></td></tr>
<tr class="memitem:ga9dc91e6b798a081f95f2ccef2c288e5e" id="r_ga9dc91e6b798a081f95f2ccef2c288e5e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga9dc91e6b798a081f95f2ccef2c288e5e">TrackerGet_Err</a>(_cntstruct_)</td></tr>
<tr class="memdesc:ga9dc91e6b798a081f95f2ccef2c288e5e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Считать счетчик ошибок <br /></td></tr>
<tr class="memitem:ga47ac59a406ee74d4cd9fe0fbaf63a758" id="r_ga47ac59a406ee74d4cd9fe0fbaf63a758"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga47ac59a406ee74d4cd9fe0fbaf63a758">TrackerGet_Warn</a>(_cntstruct_)</td></tr>
<tr class="memdesc:ga47ac59a406ee74d4cd9fe0fbaf63a758"><td class="mdescLeft">&#160;</td><td class="mdescRight">Считать счетчик предупреждений <br /></td></tr>
<tr class="memitem:ga4b08632669043dfdbd219dda03502bdb" id="r_ga4b08632669043dfdbd219dda03502bdb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga4b08632669043dfdbd219dda03502bdb">TrackerGet_User</a>(_cntstruct_, _uservarnumb_)</td></tr>
<tr class="memdesc:ga4b08632669043dfdbd219dda03502bdb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Считать пользовательскую переменную <br /></td></tr>
<tr class="memitem:ga23de0006aa08984cfeddb6aa5e512fa1" id="r_ga23de0006aa08984cfeddb6aa5e512fa1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga23de0006aa08984cfeddb6aa5e512fa1">TrackerCnt_Ok</a>(_cntstruct_)</td></tr>
<tr class="memdesc:ga23de0006aa08984cfeddb6aa5e512fa1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Инкрементирование счетчика успешных событий <br /></td></tr>
<tr class="memitem:ga49af29ab3927cad105c1d2b018a767e9" id="r_ga49af29ab3927cad105c1d2b018a767e9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga49af29ab3927cad105c1d2b018a767e9">TrackerCnt_Err</a>(_cntstruct_)</td></tr>
<tr class="memdesc:ga49af29ab3927cad105c1d2b018a767e9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Инкрементирование счетчика ошибок <br /></td></tr>
<tr class="memitem:ga8017fb05a56a1b667244f1f786fa9c57" id="r_ga8017fb05a56a1b667244f1f786fa9c57"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga8017fb05a56a1b667244f1f786fa9c57">TrackerCnt_Warn</a>(_cntstruct_)</td></tr>
<tr class="memdesc:ga8017fb05a56a1b667244f1f786fa9c57"><td class="mdescLeft">&#160;</td><td class="mdescRight">Инкрементирование счетчика предупреждений <br /></td></tr>
<tr class="memitem:ga1b7549afc4a1760b54a9b93b0f6d105e" id="r_ga1b7549afc4a1760b54a9b93b0f6d105e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga1b7549afc4a1760b54a9b93b0f6d105e">TrackerCnt_User</a>(_cntstruct_, _uservarnumb_)</td></tr>
<tr class="memdesc:ga1b7549afc4a1760b54a9b93b0f6d105e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Инкрементирование пользовательской переменной <br /></td></tr>
<tr class="memitem:gad2f4062a9ac8c2ab062a364f640ebc51" id="r_gad2f4062a9ac8c2ab062a364f640ebc51"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gad2f4062a9ac8c2ab062a364f640ebc51">TrackerWrite_User</a>(_cntstruct_, _uservarnumb_, _val_)</td></tr>
<tr class="memdesc:gad2f4062a9ac8c2ab062a364f640ebc51"><td class="mdescLeft">&#160;</td><td class="mdescRight">Запись числа в пользовательскую переменную <br /></td></tr>
<tr class="memitem:ga704f7b9f8c65c9bcec48ce7cb77a2d3b" id="r_ga704f7b9f8c65c9bcec48ce7cb77a2d3b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga704f7b9f8c65c9bcec48ce7cb77a2d3b">TrackerClear_All</a>(_cntstruct_)</td></tr>
<tr class="memdesc:ga704f7b9f8c65c9bcec48ce7cb77a2d3b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Очистка всей структуры <br /></td></tr>
<tr class="memitem:ga5dd8bac8c7ab5832019d55d7a68371b9" id="r_ga5dd8bac8c7ab5832019d55d7a68371b9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga5dd8bac8c7ab5832019d55d7a68371b9">TrackerClear_Ok</a>(_cntstruct_)</td></tr>
<tr class="memdesc:ga5dd8bac8c7ab5832019d55d7a68371b9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Очистка счетчика успешных событий <br /></td></tr>
<tr class="memitem:gae860b6947c6e317e14d40bd7b4b8eb74" id="r_gae860b6947c6e317e14d40bd7b4b8eb74"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gae860b6947c6e317e14d40bd7b4b8eb74">TrackerClear_Err</a>(_cntstruct_)</td></tr>
<tr class="memdesc:gae860b6947c6e317e14d40bd7b4b8eb74"><td class="mdescLeft">&#160;</td><td class="mdescRight">Очистка счетчика ошибок <br /></td></tr>
<tr class="memitem:ga365a8c60bd13b75154feda649dd21ead" id="r_ga365a8c60bd13b75154feda649dd21ead"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga365a8c60bd13b75154feda649dd21ead">TrackerClear_Warn</a>(_cntstruct_)</td></tr>
<tr class="memdesc:ga365a8c60bd13b75154feda649dd21ead"><td class="mdescLeft">&#160;</td><td class="mdescRight">Очистка счетчика предупреждений <br /></td></tr>
<tr class="memitem:ga063dab1067005e1600ea32531fdf3f8d" id="r_ga063dab1067005e1600ea32531fdf3f8d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga063dab1067005e1600ea32531fdf3f8d">TrackerClear_User</a>(_cntstruct_, _uservarnumb_)</td></tr>
<tr class="memdesc:ga063dab1067005e1600ea32531fdf3f8d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Очистка пользовательской переменной <br /></td></tr>
<tr class="memitem:gaaec7ec19977bb26fa1919dfe920b82d5" id="r_gaaec7ec19977bb26fa1919dfe920b82d5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gaaec7ec19977bb26fa1919dfe920b82d5">TrackerClear_UserAll</a>(_cntstruct_)</td></tr>
<tr class="memdesc:gaaec7ec19977bb26fa1919dfe920b82d5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Очистка всех пользовательских переменных <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>Дефайны для работы с трекерами </p>
<p>Есть дефайн для объявления структуры трекера: <a class="el" href="#ga50ccb119acf302969b7fdcb58f2130e4" title="Структура для счетчиков отладки">TrackerTypeDef(num_user_vars)</a>. Структура состоит из следующих элементов:</p><ul>
<li>cnt_ok</li>
<li>cnt_err</li>
<li>cnt_warn</li>
<li>user[num_user_vars] <br />
Также есть ряд функций (дефайнов) для обращения к элементам этой структуры.</li>
</ul>
<p>Если трекеры <a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gac9eaedc31ab023ce7d6403999216e496">TRACKERS_ENABLE</a> отключены, то все дефайны определяются как ничего и на производительность кода не влияют <br />
</p>
<dl class="section user"><dt>Пример:</dt><dd></dd></dl>
<p>Определяем typedef трекера измерений <a class="el" href="struct_measure___tracker_type_def.html" title="Struct for trackers for Measure.">Measure_TrackerTypeDef</a></p>
<pre class="fragment"> typedef TrackerTypeDef(MEASURE_USER_VARS_NUMB) Measure_TrackerTypeDef;
</pre><p>И через <a class="el" href="struct_measure___tracker_type_def.html">Measure_TrackerTypeDef</a> структура подключается в другие структуры</p>
<p>Для работы с структурой можно использовать функции:</p><ul>
<li>Для получения значения:<ul>
<li><a class="el" href="#gab880911066605602a966641682090169" title="Считать счетчик успешных событий">TrackerGet_Ok()</a></li>
<li><a class="el" href="#ga9dc91e6b798a081f95f2ccef2c288e5e" title="Считать счетчик ошибок">TrackerGet_Err()</a></li>
<li><a class="el" href="#ga47ac59a406ee74d4cd9fe0fbaf63a758" title="Считать счетчик предупреждений">TrackerGet_Warn()</a></li>
<li><a class="el" href="#ga4b08632669043dfdbd219dda03502bdb" title="Считать пользовательскую переменную">TrackerGet_User(n)</a></li>
</ul>
</li>
<li>Для записи значения:<ul>
<li><a class="el" href="#ga23de0006aa08984cfeddb6aa5e512fa1" title="Инкрементирование счетчика успешных событий">TrackerCnt_Ok()</a></li>
<li><a class="el" href="#ga49af29ab3927cad105c1d2b018a767e9" title="Инкрементирование счетчика ошибок">TrackerCnt_Err()</a></li>
<li><a class="el" href="#ga8017fb05a56a1b667244f1f786fa9c57" title="Инкрементирование счетчика предупреждений">TrackerCnt_Warn()</a></li>
<li><a class="el" href="#ga1b7549afc4a1760b54a9b93b0f6d105e" title="Инкрементирование пользовательской переменной">TrackerCnt_User()</a></li>
<li><a class="el" href="#gad2f4062a9ac8c2ab062a364f640ebc51" title="Запись числа в пользовательскую переменную">TrackerWrite_User(n)</a></li>
</ul>
</li>
<li>Для очищения значения:<ul>
<li><a class="el" href="#ga704f7b9f8c65c9bcec48ce7cb77a2d3b" title="Очистка всей структуры">TrackerClear_All()</a></li>
<li><a class="el" href="#ga5dd8bac8c7ab5832019d55d7a68371b9" title="Очистка счетчика успешных событий">TrackerClear_Ok()</a></li>
<li><a class="el" href="#gae860b6947c6e317e14d40bd7b4b8eb74" title="Очистка счетчика ошибок">TrackerClear_Err()</a></li>
<li><a class="el" href="#ga365a8c60bd13b75154feda649dd21ead" title="Очистка счетчика предупреждений">TrackerClear_Warn()</a></li>
<li><a class="el" href="#ga063dab1067005e1600ea32531fdf3f8d" title="Очистка пользовательской переменной">TrackerClear_User(n)</a></li>
<li><a class="el" href="#gaaec7ec19977bb26fa1919dfe920b82d5" title="Очистка всех пользовательских переменных">TrackerClear_UserAll()</a> </li>
</ul>
</li>
</ul>
<a name="doc-define-members" id="doc-define-members"></a><h2 id="header-doc-define-members" class="groupheader">Macro Definition Documentation</h2>
<a id="ga50ccb119acf302969b7fdcb58f2130e4" name="ga50ccb119acf302969b7fdcb58f2130e4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga50ccb119acf302969b7fdcb58f2130e4">&#9670;&#160;</a></span>TrackerTypeDef</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TrackerTypeDef</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>num_user_vars</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"> <span class="keyword">struct </span>\</div>
<div class="line"> { \</div>
<div class="line"> uint32_t cnt_ok; \</div>
<div class="line"> uint32_t cnt_err; \</div>
<div class="line"> uint32_t cnt_warn; \</div>
<div class="line"> uint32_t user[num_user_vars]; \</div>
<div class="line"> }</div>
</div><!-- fragment -->
<p>Структура для счетчиков отладки </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">num_user_vars</td><td>- количество пользовательских переменных</td></tr>
</table>
</dd>
</dl>
<p>Содержит счетчик для успешных событый (cnt_ok), счетчик для ошибок (cnt_err), счетчик для предупреждений (cnt_warn).</p>
<p>Также есть возможность объявить пользовательские переменные в количестве &lt;num_user_vars&gt; штук. </p>
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00068">68</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
</div>
</div>
<a id="ga72be24629fedb8bf70e830373d151fbc" name="ga72be24629fedb8bf70e830373d151fbc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga72be24629fedb8bf70e830373d151fbc">&#9670;&#160;</a></span>num_of_usercnts</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define num_of_usercnts</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_user_</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(<span class="keyword">sizeof</span>(_user_) / <span class="keyword">sizeof</span>(uint32_t))</div>
</div><!-- fragment -->
<p>Получить количетство пользовательских переменных </p>
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00078">78</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
</div>
</div>
<a id="gadd7fd2c6e3a4800f1d5ddab35fd4b43e" name="gadd7fd2c6e3a4800f1d5ddab35fd4b43e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gadd7fd2c6e3a4800f1d5ddab35fd4b43e">&#9670;&#160;</a></span>assert_usertracker</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define assert_usertracker</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_cntstruct_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_uservarnumb_</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">((_uservarnumb_) &lt; <a class="code hl_define" href="#ga72be24629fedb8bf70e830373d151fbc">num_of_usercnts</a>((_cntstruct_).user))</div>
<div class="ttc" id="agroup___t_r_a_c_k_e_r_s_html_ga72be24629fedb8bf70e830373d151fbc"><div class="ttname"><a href="#ga72be24629fedb8bf70e830373d151fbc">num_of_usercnts</a></div><div class="ttdeci">#define num_of_usercnts(_user_)</div><div class="ttdoc">Получить количетство пользовательских переменных</div><div class="ttdef"><b>Definition</b> <a href="trackers_8h_source.html#l00078">trackers.h:78</a></div></div>
</div><!-- fragment -->
<p>Проверка существует ли указанная пользовательская переменная </p>
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00080">80</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
</div>
</div>
<a id="gad91d8ca89074270fc040c0449e57cf07" name="gad91d8ca89074270fc040c0449e57cf07"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gad91d8ca89074270fc040c0449e57cf07">&#9670;&#160;</a></span>if_assert_usertracker</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define if_assert_usertracker</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_cntstruct_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_uservarnumb_</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">if</span>(<a class="code hl_define" href="#gadd7fd2c6e3a4800f1d5ddab35fd4b43e">assert_usertracker</a>(_cntstruct_, _uservarnumb_))</div>
<div class="ttc" id="agroup___t_r_a_c_k_e_r_s_html_gadd7fd2c6e3a4800f1d5ddab35fd4b43e"><div class="ttname"><a href="#gadd7fd2c6e3a4800f1d5ddab35fd4b43e">assert_usertracker</a></div><div class="ttdeci">#define assert_usertracker(_cntstruct_, _uservarnumb_)</div><div class="ttdoc">Проверка существует ли указанная пользовательская переменная</div><div class="ttdef"><b>Definition</b> <a href="trackers_8h_source.html#l00080">trackers.h:80</a></div></div>
</div><!-- fragment -->
<p>Условие для проверки существует ли указанная пользовательская переменная </p>
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00082">82</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
</div>
</div>
<a id="ga39b6ffbc561f8caac276415e1ad32c30" name="ga39b6ffbc561f8caac276415e1ad32c30"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga39b6ffbc561f8caac276415e1ad32c30">&#9670;&#160;</a></span>tern_assert_usertracker</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define tern_assert_usertracker</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_cntstruct_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_uservarnumb_</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(<a class="code hl_define" href="#gadd7fd2c6e3a4800f1d5ddab35fd4b43e">assert_usertracker</a>(_cntstruct_, _uservarnumb_)) ? _uservarnumb_ : 0</div>
</div><!-- fragment -->
<p>Тернарный оператор для проверки существует ли указанная пользовательская переменная </p>
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00084">84</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
</div>
</div>
<a id="gab880911066605602a966641682090169" name="gab880911066605602a966641682090169"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab880911066605602a966641682090169">&#9670;&#160;</a></span>TrackerGet_Ok</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TrackerGet_Ok</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_cntstruct_</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(_cntstruct_).cnt_ok</div>
</div><!-- fragment -->
<p>Считать счетчик успешных событий </p>
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00088">88</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
</div>
</div>
<a id="ga9dc91e6b798a081f95f2ccef2c288e5e" name="ga9dc91e6b798a081f95f2ccef2c288e5e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga9dc91e6b798a081f95f2ccef2c288e5e">&#9670;&#160;</a></span>TrackerGet_Err</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TrackerGet_Err</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_cntstruct_</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(_cntstruct_).cnt_err</div>
</div><!-- fragment -->
<p>Считать счетчик ошибок </p>
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00090">90</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
</div>
</div>
<a id="ga47ac59a406ee74d4cd9fe0fbaf63a758" name="ga47ac59a406ee74d4cd9fe0fbaf63a758"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga47ac59a406ee74d4cd9fe0fbaf63a758">&#9670;&#160;</a></span>TrackerGet_Warn</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TrackerGet_Warn</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_cntstruct_</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(_cntstruct_).cnt_warn</div>
</div><!-- fragment -->
<p>Считать счетчик предупреждений </p>
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00092">92</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
</div>
</div>
<a id="ga4b08632669043dfdbd219dda03502bdb" name="ga4b08632669043dfdbd219dda03502bdb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4b08632669043dfdbd219dda03502bdb">&#9670;&#160;</a></span>TrackerGet_User</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TrackerGet_User</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_cntstruct_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_uservarnumb_</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(_cntstruct_).user[<a class="code hl_define" href="#ga39b6ffbc561f8caac276415e1ad32c30">tern_assert_usertracker</a>(_cntstruct_, _uservarnumb_)]</div>
<div class="ttc" id="agroup___t_r_a_c_k_e_r_s_html_ga39b6ffbc561f8caac276415e1ad32c30"><div class="ttname"><a href="#ga39b6ffbc561f8caac276415e1ad32c30">tern_assert_usertracker</a></div><div class="ttdeci">#define tern_assert_usertracker(_cntstruct_, _uservarnumb_)</div><div class="ttdoc">Тернарный оператор для проверки существует ли указанная пользовательская переменная</div><div class="ttdef"><b>Definition</b> <a href="trackers_8h_source.html#l00084">trackers.h:84</a></div></div>
</div><!-- fragment -->
<p>Считать пользовательскую переменную </p>
<dl class="section note"><dt>Note</dt><dd>Здесь нет проверки - существует ли пользовательская переменная! Есть возможность выйти за границы структуры!!! Чтобы этого избежать можно использовать дефайн #ref <a class="el" href="#gadd7fd2c6e3a4800f1d5ddab35fd4b43e" title="Проверка существует ли указанная пользовательская переменная">assert_usertracker()</a> <pre class="fragment"> if(assert_usertracker(struct, 0)) {
TrackerGet_User(struct, 0)
}
</pre> </dd></dl>
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00104">104</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
</div>
</div>
<a id="ga23de0006aa08984cfeddb6aa5e512fa1" name="ga23de0006aa08984cfeddb6aa5e512fa1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga23de0006aa08984cfeddb6aa5e512fa1">&#9670;&#160;</a></span>TrackerCnt_Ok</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TrackerCnt_Ok</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_cntstruct_</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(_cntstruct_).cnt_ok++</div>
</div><!-- fragment -->
<p>Инкрементирование счетчика успешных событий </p>
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00109">109</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
</div>
</div>
<a id="ga49af29ab3927cad105c1d2b018a767e9" name="ga49af29ab3927cad105c1d2b018a767e9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga49af29ab3927cad105c1d2b018a767e9">&#9670;&#160;</a></span>TrackerCnt_Err</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TrackerCnt_Err</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_cntstruct_</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(_cntstruct_).cnt_err++</div>
</div><!-- fragment -->
<p>Инкрементирование счетчика ошибок </p>
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00111">111</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
</div>
</div>
<a id="ga8017fb05a56a1b667244f1f786fa9c57" name="ga8017fb05a56a1b667244f1f786fa9c57"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga8017fb05a56a1b667244f1f786fa9c57">&#9670;&#160;</a></span>TrackerCnt_Warn</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TrackerCnt_Warn</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_cntstruct_</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(_cntstruct_).cnt_warn++</div>
</div><!-- fragment -->
<p>Инкрементирование счетчика предупреждений </p>
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00113">113</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
</div>
</div>
<a id="ga1b7549afc4a1760b54a9b93b0f6d105e" name="ga1b7549afc4a1760b54a9b93b0f6d105e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga1b7549afc4a1760b54a9b93b0f6d105e">&#9670;&#160;</a></span>TrackerCnt_User</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TrackerCnt_User</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_cntstruct_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_uservarnumb_</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_define" href="#gad91d8ca89074270fc040c0449e57cf07">if_assert_usertracker</a>(_cntstruct_, _uservarnumb_) (_cntstruct_).user[_uservarnumb_]++;</div>
<div class="ttc" id="agroup___t_r_a_c_k_e_r_s_html_gad91d8ca89074270fc040c0449e57cf07"><div class="ttname"><a href="#gad91d8ca89074270fc040c0449e57cf07">if_assert_usertracker</a></div><div class="ttdeci">#define if_assert_usertracker(_cntstruct_, _uservarnumb_)</div><div class="ttdoc">Условие для проверки существует ли указанная пользовательская переменная</div><div class="ttdef"><b>Definition</b> <a href="trackers_8h_source.html#l00082">trackers.h:82</a></div></div>
</div><!-- fragment -->
<p>Инкрементирование пользовательской переменной </p>
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00115">115</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
</div>
</div>
<a id="gad2f4062a9ac8c2ab062a364f640ebc51" name="gad2f4062a9ac8c2ab062a364f640ebc51"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gad2f4062a9ac8c2ab062a364f640ebc51">&#9670;&#160;</a></span>TrackerWrite_User</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TrackerWrite_User</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_cntstruct_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_uservarnumb_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_val_</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_define" href="#gad91d8ca89074270fc040c0449e57cf07">if_assert_usertracker</a>(_cntstruct_, _uservarnumb_) (_cntstruct_).user[_uservarnumb_] = (_val_)</div>
</div><!-- fragment -->
<p>Запись числа в пользовательскую переменную </p>
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00117">117</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
</div>
</div>
<a id="ga704f7b9f8c65c9bcec48ce7cb77a2d3b" name="ga704f7b9f8c65c9bcec48ce7cb77a2d3b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga704f7b9f8c65c9bcec48ce7cb77a2d3b">&#9670;&#160;</a></span>TrackerClear_All</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TrackerClear_All</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_cntstruct_</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">memset(&amp;(_cntstruct_), 0, <span class="keyword">sizeof</span>(_cntstruct_))</div>
</div><!-- fragment -->
<p>Очистка всей структуры </p>
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00120">120</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
</div>
</div>
<a id="ga5dd8bac8c7ab5832019d55d7a68371b9" name="ga5dd8bac8c7ab5832019d55d7a68371b9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga5dd8bac8c7ab5832019d55d7a68371b9">&#9670;&#160;</a></span>TrackerClear_Ok</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TrackerClear_Ok</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_cntstruct_</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(_cntstruct_).cnt_ok = 0</div>
</div><!-- fragment -->
<p>Очистка счетчика успешных событий </p>
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00122">122</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
</div>
</div>
<a id="gae860b6947c6e317e14d40bd7b4b8eb74" name="gae860b6947c6e317e14d40bd7b4b8eb74"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gae860b6947c6e317e14d40bd7b4b8eb74">&#9670;&#160;</a></span>TrackerClear_Err</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TrackerClear_Err</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_cntstruct_</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(_cntstruct_).cnt_err = 0</div>
</div><!-- fragment -->
<p>Очистка счетчика ошибок </p>
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00124">124</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
</div>
</div>
<a id="ga365a8c60bd13b75154feda649dd21ead" name="ga365a8c60bd13b75154feda649dd21ead"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga365a8c60bd13b75154feda649dd21ead">&#9670;&#160;</a></span>TrackerClear_Warn</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TrackerClear_Warn</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_cntstruct_</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(_cntstruct_).cnt_warn = 0</div>
</div><!-- fragment -->
<p>Очистка счетчика предупреждений </p>
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00126">126</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
</div>
</div>
<a id="ga063dab1067005e1600ea32531fdf3f8d" name="ga063dab1067005e1600ea32531fdf3f8d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga063dab1067005e1600ea32531fdf3f8d">&#9670;&#160;</a></span>TrackerClear_User</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TrackerClear_User</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_cntstruct_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_uservarnumb_</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_define" href="#gad91d8ca89074270fc040c0449e57cf07">if_assert_usertracker</a>(_cntstruct_, _uservarnumb_) (_cntstruct_).user[_uservarnumb_] = 0;</div>
</div><!-- fragment -->
<p>Очистка пользовательской переменной </p>
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00128">128</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
</div>
</div>
<a id="gaaec7ec19977bb26fa1919dfe920b82d5" name="gaaec7ec19977bb26fa1919dfe920b82d5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaaec7ec19977bb26fa1919dfe920b82d5">&#9670;&#160;</a></span>TrackerClear_UserAll</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TrackerClear_UserAll</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_cntstruct_</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">memset(&amp;(_cntstruct_).user, 0, <span class="keyword">sizeof</span>((_cntstruct_).user))</div>
</div><!-- fragment -->
<p>Очистка всех пользовательских переменных </p>
<p class="definition">Definition at line <a class="el" href="trackers_8h_source.html#l00130">130</a> of file <a class="el" href="trackers_8h_source.html">trackers.h</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,23 @@
var group___t_r_a_c_k_e_r_s =
[
[ "TrackerTypeDef", "group___t_r_a_c_k_e_r_s.html#ga50ccb119acf302969b7fdcb58f2130e4", null ],
[ "num_of_usercnts", "group___t_r_a_c_k_e_r_s.html#ga72be24629fedb8bf70e830373d151fbc", null ],
[ "assert_usertracker", "group___t_r_a_c_k_e_r_s.html#gadd7fd2c6e3a4800f1d5ddab35fd4b43e", null ],
[ "if_assert_usertracker", "group___t_r_a_c_k_e_r_s.html#gad91d8ca89074270fc040c0449e57cf07", null ],
[ "tern_assert_usertracker", "group___t_r_a_c_k_e_r_s.html#ga39b6ffbc561f8caac276415e1ad32c30", null ],
[ "TrackerGet_Ok", "group___t_r_a_c_k_e_r_s.html#gab880911066605602a966641682090169", null ],
[ "TrackerGet_Err", "group___t_r_a_c_k_e_r_s.html#ga9dc91e6b798a081f95f2ccef2c288e5e", null ],
[ "TrackerGet_Warn", "group___t_r_a_c_k_e_r_s.html#ga47ac59a406ee74d4cd9fe0fbaf63a758", null ],
[ "TrackerGet_User", "group___t_r_a_c_k_e_r_s.html#ga4b08632669043dfdbd219dda03502bdb", null ],
[ "TrackerCnt_Ok", "group___t_r_a_c_k_e_r_s.html#ga23de0006aa08984cfeddb6aa5e512fa1", null ],
[ "TrackerCnt_Err", "group___t_r_a_c_k_e_r_s.html#ga49af29ab3927cad105c1d2b018a767e9", null ],
[ "TrackerCnt_Warn", "group___t_r_a_c_k_e_r_s.html#ga8017fb05a56a1b667244f1f786fa9c57", null ],
[ "TrackerCnt_User", "group___t_r_a_c_k_e_r_s.html#ga1b7549afc4a1760b54a9b93b0f6d105e", null ],
[ "TrackerWrite_User", "group___t_r_a_c_k_e_r_s.html#gad2f4062a9ac8c2ab062a364f640ebc51", null ],
[ "TrackerClear_All", "group___t_r_a_c_k_e_r_s.html#ga704f7b9f8c65c9bcec48ce7cb77a2d3b", null ],
[ "TrackerClear_Ok", "group___t_r_a_c_k_e_r_s.html#ga5dd8bac8c7ab5832019d55d7a68371b9", null ],
[ "TrackerClear_Err", "group___t_r_a_c_k_e_r_s.html#gae860b6947c6e317e14d40bd7b4b8eb74", null ],
[ "TrackerClear_Warn", "group___t_r_a_c_k_e_r_s.html#ga365a8c60bd13b75154feda649dd21ead", null ],
[ "TrackerClear_User", "group___t_r_a_c_k_e_r_s.html#ga063dab1067005e1600ea32531fdf3f8d", null ],
[ "TrackerClear_UserAll", "group___t_r_a_c_k_e_r_s.html#gaaec7ec19977bb26fa1919dfe920b82d5", null ]
];

View File

@ -0,0 +1,262 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: Utils defines</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('group___u_t_i_l_s___d_e_f_i_n_e_s.html','',''); });
</script>
<div id="container">
<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">Utils defines <div class="ingroups"><a class="el" href="group___m_y_l_i_b_s___a_l_l.html">My Libs</a> &raquo; <a class="el" href="group___m_y_l_i_b_s___d_e_f_i_n_e_s.html">General Defines</a></div></div></div>
</div><!--header-->
<div class="contents">
<p>Общие вспомогательные макросы
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-define-members" class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:gaf5e598848326d48e86167e5099a029be" id="r_gaf5e598848326d48e86167e5099a029be"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gaf5e598848326d48e86167e5099a029be">ClearStruct</a>(_struct_)</td></tr>
<tr class="memdesc:gaf5e598848326d48e86167e5099a029be"><td class="mdescLeft">&#160;</td><td class="mdescRight">Обнуление структуры. <br /></td></tr>
<tr class="memitem:gabf45f2b60eedf80cf9d1dbe4302a741e" id="r_gabf45f2b60eedf80cf9d1dbe4302a741e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gabf45f2b60eedf80cf9d1dbe4302a741e">Divide_Up</a>(_val_, _div_)</td></tr>
<tr class="memdesc:gabf45f2b60eedf80cf9d1dbe4302a741e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Деление с округлением вверх <br /></td></tr>
<tr class="memitem:ga0f22e895ac7781c3d1b68fee182c4291" id="r_ga0f22e895ac7781c3d1b68fee182c4291"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga0f22e895ac7781c3d1b68fee182c4291">ByteSwap16</a>(v)</td></tr>
<tr class="memdesc:ga0f22e895ac7781c3d1b68fee182c4291"><td class="mdescLeft">&#160;</td><td class="mdescRight">Swap between Little Endian and Big Endian. <br /></td></tr>
<tr class="memitem:ga996f7be338ccb40d1a2a5abc1ad61759" id="r_ga996f7be338ccb40d1a2a5abc1ad61759"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga996f7be338ccb40d1a2a5abc1ad61759">ABS</a>(x)</td></tr>
<tr class="memdesc:ga996f7be338ccb40d1a2a5abc1ad61759"><td class="mdescLeft">&#160;</td><td class="mdescRight">Абсолютное значение числа <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>Общие вспомогательные макросы </p>
<a name="doc-define-members" id="doc-define-members"></a><h2 id="header-doc-define-members" class="groupheader">Macro Definition Documentation</h2>
<a id="gaf5e598848326d48e86167e5099a029be" name="gaf5e598848326d48e86167e5099a029be"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf5e598848326d48e86167e5099a029be">&#9670;&#160;</a></span>ClearStruct</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define ClearStruct</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_struct_</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">memset(&amp;(_struct_), 0, <span class="keyword">sizeof</span>(_struct_))</div>
</div><!-- fragment -->
<p>Обнуление структуры. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">_struct_</td><td>Структура, которую нужно обнулить.</td></tr>
</table>
</dd>
</dl>
<p>Макрос использует memset для обнуления всей памяти структуры. Используется для быстрой и безопасной инициализации переменных структур до нуля. </p>
<p class="definition">Definition at line <a class="el" href="mylibs__defs_8h_source.html#l00150">150</a> of file <a class="el" href="mylibs__defs_8h_source.html">mylibs_defs.h</a>.</p>
</div>
</div>
<a id="gabf45f2b60eedf80cf9d1dbe4302a741e" name="gabf45f2b60eedf80cf9d1dbe4302a741e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gabf45f2b60eedf80cf9d1dbe4302a741e">&#9670;&#160;</a></span>Divide_Up</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define Divide_Up</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_val_</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>_div_</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">((_val_ - 1) / _div_) + 1 <span class="comment">/* через мат выражение */</span></div>
</div><!-- fragment -->
<p>Деление с округлением вверх </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">_val_</td><td>Делимое. </td></tr>
<tr><td class="paramname">_div_</td><td>Делитель. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Результат деления, округленный вверх.</dd></dl>
<p>Если результат деления без остатка: он возвращается как есть Если с остатком - округляется вверх </p>
<p class="definition">Definition at line <a class="el" href="mylibs__defs_8h_source.html#l00161">161</a> of file <a class="el" href="mylibs__defs_8h_source.html">mylibs_defs.h</a>.</p>
</div>
</div>
<a id="ga0f22e895ac7781c3d1b68fee182c4291" name="ga0f22e895ac7781c3d1b68fee182c4291"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga0f22e895ac7781c3d1b68fee182c4291">&#9670;&#160;</a></span>ByteSwap16</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define ByteSwap16</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>v</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(((v&amp;0xFF00) &gt;&gt; (8)) | ((v&amp;0x00FF) &lt;&lt; (8)))</div>
</div><!-- fragment -->
<p>Swap between Little Endian and Big Endian. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">v</td><td>Исходное 16-битное значение. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Результат с поменяными местами старшим и младшим байтом.</dd></dl>
<p>Переключения между двумя типами хранения слова: HI-LO байты и LO-HI байты. </p>
<p class="definition">Definition at line <a class="el" href="mylibs__defs_8h_source.html#l00169">169</a> of file <a class="el" href="mylibs__defs_8h_source.html">mylibs_defs.h</a>.</p>
</div>
</div>
<a id="ga996f7be338ccb40d1a2a5abc1ad61759" name="ga996f7be338ccb40d1a2a5abc1ad61759"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga996f7be338ccb40d1a2a5abc1ad61759">&#9670;&#160;</a></span>ABS</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define ABS</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>x</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">( ((x) &gt; 0)? (x) : -(x))</div>
</div><!-- fragment -->
<p>Абсолютное значение числа </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">x</td><td>Число. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Абсолютное значение числа x.</dd></dl>
<p>Берет число по модулю. Хз как работает библиотечный abs в stdlib.h, мб это быстрее, но вряд ли конечно. </p>
<p class="definition">Definition at line <a class="el" href="mylibs__defs_8h_source.html#l00177">177</a> of file <a class="el" href="mylibs__defs_8h_source.html">mylibs_defs.h</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,7 @@
var group___u_t_i_l_s___d_e_f_i_n_e_s =
[
[ "ClearStruct", "group___u_t_i_l_s___d_e_f_i_n_e_s.html#gaf5e598848326d48e86167e5099a029be", null ],
[ "Divide_Up", "group___u_t_i_l_s___d_e_f_i_n_e_s.html#gabf45f2b60eedf80cf9d1dbe4302a741e", null ],
[ "ByteSwap16", "group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga0f22e895ac7781c3d1b68fee182c4291", null ],
[ "ABS", "group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga996f7be338ccb40d1a2a5abc1ad61759", null ]
];

114
Doc/html/index.html Normal file
View File

@ -0,0 +1,114 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: Main Page</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('index.html','',''); });
</script>
<div id="container">
<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">MyLibs Documentation</div></div>
</div><!--header-->
<div class="contents">
<a href="doxygen_crawl.html"></a>
</div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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.14.0 </li>
</ul>
</div>
</body>
</html>

204
Doc/html/jquery.js vendored Normal file
View File

@ -0,0 +1,204 @@
/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}
var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},
push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(
e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,
O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp(
"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"<22>":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType
}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c
)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){
return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(
":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id")
)&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push(
"\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(
a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,
null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(
"string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne
).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType
)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(
function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){
return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);
for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n
){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(
e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);
break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(j).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(
function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){
for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(
this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(
var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){
return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(
){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),
S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},catch:function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,
r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,
o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if(
"object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){
var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),
1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){
Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t
){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c
].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;
return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),
"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ee(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ee(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n
)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,
f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(
arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i
]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(
e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;
this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Se(this,e,Ce),!1},trigger:function(){return Se(this,e),!0},_default:function(){return!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t
}}}),S.fn.extend({on:function(e,t,n,r){return Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,
r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),
r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){
1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(
"string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Me=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ie=new RegExp(ne.join("|"),"i");function We(e,t
,n){var r,i,o,a,s=e.style;return(n=n||Re(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Pe.test(a)&&Ie.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(
l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var Be=["Webkit","Moz","ms"],$e=E.createElement("div").style,_e={};function ze(e){var t=S.cssProps[e]||_e[e];return t||(e in $e?e:_e[e]=function(e){var t=e[
0].toUpperCase()+e.slice(1),n=Be.length;while(n--)if((e=Be[n]+t)in $e)return e}(e)||e)}var Ue=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ve={position:"absolute",visibility:"hidden",display:"block"},Ge={letterSpacing:"0",fontWeight:"400"};function Ye(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Qe(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Je(e,t,n){var r=Re(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=We(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(
!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Qe(e,t,n||(i?"border":"content"),o,r,a)+"px"}function Ke(e,t,n,r,i){return new Ke.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Xe.test(t),l=e.style;if(u||(t=ze(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(
e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Xe.test(t)||(t=ze(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=We(e,t,r)),"normal"===i&&t in Ge&&(i=Ge[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ue.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,u,n):Me(e,Ve,function(){return Je(e,u,n)})},set:function(e,t,n){var r,i=Re(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Qe(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Qe(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(
e.style[u]=t,t=S.css(e,u)),Ye(0,t,s)}}}),S.cssHooks.marginLeft=Fe(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Me(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Ye)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Re(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=Ke).prototype={constructor:Ke,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=Ke.propHooks[this.prop];return e&&e.get?e.get(
this):Ke.propHooks._default.get(this)},run:function(e){var t,n=Ke.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ke.propHooks._default.set(this),this}}).init.prototype=Ke.prototype,(Ke.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[ze(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ke.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},
S.fx=Ke.prototype.init,S.fx.step={};var Ze,et,tt,nt,rt=/^(?:toggle|show|hide)$/,it=/queueHooks$/;function ot(){et&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(ot):C.setTimeout(ot,S.fx.interval),S.fx.tick())}function at(){return C.setTimeout(function(){Ze=void 0}),Ze=Date.now()}function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ut(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function lt(o,e,t){var n,a,r=0,i=lt.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=Ze||at(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),
originalProperties:e,originalOptions:t,startTime:Ze||at(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=lt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ut,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}
S.Animation=S.extend(lt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],lt.tweeners[n]=lt.tweeners[n]||[],lt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],rt.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(
le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ut(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?lt.prefilters.unshift(e):lt.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),
null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=lt(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&it.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"
],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(st(r,!0),e,t,n)}}),S.each({slideDown:st("show"),slideUp:st("hide"),slideToggle:st("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(Ze=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),Ze=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){et||(et=!0,ot())},S.fx.stop=function(){et=null},S.fx.speeds={slow:600,fast:200,_default:400},
S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},tt=E.createElement("input"),nt=E.createElement("select").appendChild(E.createElement("option")),tt.type="checkbox",y.checkOn=""!==tt.value,y.optSelected=nt.selected,(tt=E.createElement("input")).value="t",tt.type="radio",y.radioValue="t"===tt.value;var ct,ft=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?ct:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{
set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ct={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=ft[t]||S.find.attr;ft[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=ft[o],ft[o]=r,r=null!=a(e,t,n)?o:null,ft[o]=i),r}});var pt=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(P)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function vt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o
)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):pt.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,gt(this)))});if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])r.indexOf(
" "+o+" ")<0&&(r+=o+" ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,gt(this)))});if(!arguments.length)return this.attr("class","");if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,gt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=vt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=gt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;
t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+ht(gt(n))+" ").indexOf(t))return!0;return!1}});var yt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(yt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:ht(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode
,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var mt=/^(?:focusinfocus|focusoutblur)$/,xt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!mt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),
e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,mt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,xt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,xt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(
new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var bt=C.location,wt={guid:Date.now()},Tt=/\?/;S.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};
var Ct=/\[\]$/,Et=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,kt=/^(?:input|select|textarea|keygen)/i;function At(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||Ct.test(n)?i(n,t):At(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)At(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)At(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&kt.test(this.nodeName)&&!St.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();
return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(Et,"\r\n")}}):{name:t.name,value:n.replace(Et,"\r\n")}}).get()}});var Nt=/%20/g,jt=/#.*$/,Dt=/([?&])_=[^&]*/,qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Ht=/^\/\//,Ot={},Pt={},Rt="*/".concat("*"),Mt=E.createElement("a");function It(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Wt(t,i,o,a){var s={},u=t===Pt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Ft(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Mt.href=bt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",
isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ft(Ft(e,S.ajaxSettings),t):Ft(S.ajaxSettings,e)},ajaxPrefilter:It(Ot),ajaxTransport:It(Pt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(
t=qt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||bt.href)+"").replace(Ht,bt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Mt.protocol+"//"+Mt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Wt(Ot,v,t,T),h)return T;for(i in(g=S.event&&v.global
)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Lt.test(v.type),f=v.url.replace(jt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Nt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Tt.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Dt,"$1"),o=(Tt.test(f)?"&":"?")+"_="+wt.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+Rt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(
v.complete),T.done(v.success),T.fail(v.error),c=Wt(Pt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&S.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();
while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))
}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),
t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},$t=S.ajaxSettings.xhr();y.cors=!!$t&&"withCredentials"in $t,y.ajax=$t=!!$t,S.ajaxTransport(function(i){var o,a;if(y.cors||$t&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){
return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Bt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(
e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r]
,C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=ht(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(
function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,
"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}
),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each(
"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Xt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Xt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Vt=C.jQuery,Gt=C.$;return S.noConflict=function(e){
return C.$===S&&(C.$=Gt),e&&C.jQuery===S&&(C.jQuery=Vt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
/*! jQuery UI - v1.13.2 - 2022-08-01
* http://jqueryui.com
* Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/resizable.js, widgets/mouse.js
* Copyright jQuery Foundation and other contributors; Licensed MIT */!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(y){"use strict";y.ui=y.ui||{};y.ui.version="1.13.2";var n,i=0,h=Array.prototype.hasOwnProperty,a=Array.prototype.slice;y.cleanData=(n=y.cleanData,function(t){for(var e,i,s=0;null!=(i=t[s]);s++)(e=y._data(i,"events"))&&e.remove&&y(i).triggerHandler("remove");n(t)}),y.widget=function(t,i,e){var s,n,o,h={},a=t.split(".")[0],r=a+"-"+(t=t.split(".")[1]);return e||(e=i,i=y.Widget),Array.isArray(e)&&(e=y.extend.apply(null,[{}].concat(e))),y.expr.pseudos[r.toLowerCase()]=function(t){return!!y.data(t,r)},y[a]=y[a]||{},s=y[a][t],n=y[a][t]=function(t,e){if(!this||!this._createWidget)return new n(t,e);arguments.length&&this._createWidget(t,e)},y.extend(n,s,{version:e.version,_proto:y.extend({},e),_childConstructors:[]}),(o=new i).options=y.widget.extend({},o.options),y.each(e,function(e,s){function n(){return i.prototype[e].apply(this,arguments)}
function o(t){return i.prototype[e].apply(this,t)}h[e]="function"==typeof s?function(){var t,e=this._super,i=this._superApply;return this._super=n,this._superApply=o,t=s.apply(this,arguments),this._super=e,this._superApply=i,t}:s}),n.prototype=y.widget.extend(o,{widgetEventPrefix:s&&o.widgetEventPrefix||t},h,{constructor:n,namespace:a,widgetName:t,widgetFullName:r}),s?(y.each(s._childConstructors,function(t,e){var i=e.prototype;y.widget(i.namespace+"."+i.widgetName,n,e._proto)}),delete s._childConstructors):i._childConstructors.push(n),y.widget.bridge(t,n),n},y.widget.extend=function(t){for(var e,i,s=a.call(arguments,1),n=0,o=s.length;n<o;n++)for(e in s[n])i=s[n][e],h.call(s[n],e)&&void 0!==i&&(y.isPlainObject(i)?t[e]=y.isPlainObject(t[e])?y.widget.extend({},t[e],i):y.widget.extend({},i):t[e]=i);return t},y.widget.bridge=function(o,e){var h=e.prototype.widgetFullName||o;y.fn[o]=function(i){var t="string"==typeof i,s=a.call(arguments,1),n=this;return t?this.length||"instance"!==i?this.each(function(){var t,
e=y.data(this,h);return"instance"===i?(n=e,!1):e?"function"!=typeof e[i]||"_"===i.charAt(0)?y.error("no such method '"+i+"' for "+o+" widget instance"):(t=e[i].apply(e,s))!==e&&void 0!==t?(n=t&&t.jquery?n.pushStack(t.get()):t,!1):void 0:y.error("cannot call methods on "+o+" prior to initialization; attempted to call method '"+i+"'")}):n=void 0:(s.length&&(i=y.widget.extend.apply(null,[i].concat(s))),this.each(function(){var t=y.data(this,h);t?(t.option(i||{}),t._init&&t._init()):y.data(this,h,new e(i,this))})),n}},y.Widget=function(){},y.Widget._childConstructors=[],y.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t
){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t
]=y.widget.extend({},this.options[t]),n=0;n<i.length-1;n++)s[i[n]]=s[i[n]]||{},s=s[i[n]];if(t=i.pop(),1===arguments.length)return void 0===s[t]?null:s[t];s[t]=e}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=e}return this._setOptions(o),this},_setOptions:function(t){for(var e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(t){var e,i,s;for(e in t)s=this.classesElementLookup[e],t[e]!==this.options.classes[e]&&s&&s.length&&(i=y(s.get()),this._removeClass(s,e),i.addClass(this._classes({element:i,keys:e,classes:t,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},
disable:function(){return this._setOptions({disabled:!0})},_classes:function(n){var o=[],h=this;function t(t,e){for(var i,s=0;s<t.length;s++)i=h.classesElementLookup[t[s]]||y(),i=n.add?(function(){var i=[];n.element.each(function(t,e){y.map(h.classesElementLookup,function(t){return t}).some(function(t){return t.is(e)})||i.push(e)}),h._on(y(i),{remove:"_untrackClassesElement"})}(),y(y.uniqueSort(i.get().concat(n.element.get())))):y(i.not(n.element).get()),h.classesElementLookup[t[s]]=i,o.push(t[s]),e&&n.classes[t[s]]&&o.push(n.classes[t[s]])}return(n=y.extend({element:this.element,classes:this.options.classes||{}},n)).keys&&t(n.keys.match(/\S+/g)||[],!0),n.extra&&t(n.extra.match(/\S+/g)||[]),o.join(" ")},_untrackClassesElement:function(i){var s=this;y.each(s.classesElementLookup,function(t,e){-1!==y.inArray(i.target,e)&&(s.classesElementLookup[t]=y(e.not(i.target).get()))}),this._off(y(i.target))},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){
return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){var n="string"==typeof t||null===t,i={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s="boolean"==typeof s?s:i};return i.element.toggleClass(this._classes(i),s),this},_on:function(n,o,t){var h,a=this;"boolean"!=typeof n&&(t=o,o=n,n=!1),t?(o=h=y(o),this.bindings=this.bindings.add(o)):(t=o,o=this.element,h=this.widget()),y.each(t,function(t,e){function i(){if(n||!0!==a.options.disabled&&!y(this).hasClass("ui-state-disabled"))return("string"==typeof e?a[e]:e).apply(a,arguments)}"string"!=typeof e&&(i.guid=e.guid=e.guid||i.guid||y.guid++);var s=t.match(/^([\w:-]*)\s*(.*)$/),t=s[1]+a.eventNamespace,s=s[2];s?h.on(t,s,i):o.on(t,i)})},_off:function(t,e){e=(e||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.off(e),this.bindings=y(this.bindings.not(t).get()),this.focusable=y(this.focusable.not(t).get()),this.hoverable=y(this.hoverable.not(t).get())},_delay:function(t,e){var i=this;return setTimeout(function(){return(
"string"==typeof t?i[t]:t).apply(i,arguments)},e||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){this._addClass(y(t.currentTarget),null,"ui-state-hover")},mouseleave:function(t){this._removeClass(y(t.currentTarget),null,"ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){this._addClass(y(t.currentTarget),null,"ui-state-focus")},focusout:function(t){this._removeClass(y(t.currentTarget),null,"ui-state-focus")}})},_trigger:function(t,e,i){var s,n,o=this.options[t];if(i=i||{},(e=y.Event(e)).type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),e.target=this.element[0],n=e.originalEvent)for(s in n)s in e||(e[s]=n[s]);return this.element.trigger(e,i),!("function"==typeof o&&!1===o.apply(this.element[0],[e].concat(i))||e.isDefaultPrevented())}},y.each({show:"fadeIn",hide:"fadeOut"},function(o,h){y.Widget.prototype["_"+o]=function(e,t,i){var s,n=(t="string"==typeof t?{effect:t}:t
)?!0!==t&&"number"!=typeof t&&t.effect||h:o;"number"==typeof(t=t||{})?t={duration:t}:!0===t&&(t={}),s=!y.isEmptyObject(t),t.complete=i,t.delay&&e.delay(t.delay),s&&y.effects&&y.effects.effect[n]?e[o](t):n!==o&&e[n]?e[n](t.duration,t.easing,i):e.queue(function(t){y(this)[o](),i&&i.call(e[0]),t()})}});var s,x,D,o,r,l,u,p,W;y.widget;function E(t,e,i){return[parseFloat(t[0])*(p.test(t[0])?e/100:1),parseFloat(t[1])*(p.test(t[1])?i/100:1)]}function H(t,e){return parseInt(y.css(t,e),10)||0}function S(t){return null!=t&&t===t.window}x=Math.max,D=Math.abs,o=/left|center|right/,r=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,u=/^\w+/,p=/%$/,W=y.fn.position,y.position={scrollbarWidth:function(){if(void 0!==s)return s;var t,e=y("<div style='display:block;position:absolute;width:200px;height:200px;overflow:hidden;'><div style='height:300px;width:auto;'></div></div>"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},
getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.width<t.element[0].scrollWidth;return{width:"scroll"===i||"auto"===i&&t.height<t.element[0].scrollHeight?y.position.scrollbarWidth():0,height:e?y.position.scrollbarWidth():0}},getWithinInfo:function(t){var e=y(t||window),i=S(e[0]),s=!!e[0]&&9===e[0].nodeType;return{element:e,isWindow:i,isDocument:s,offset:!i&&!s?y(t).offset():{left:0,top:0},scrollLeft:e.scrollLeft(),scrollTop:e.scrollTop(),width:e.outerWidth(),height:e.outerHeight()}}},y.fn.position=function(p){if(!p||!p.of)return W.apply(this,arguments);var d,c,f,g,m,t,_="string"==typeof(p=y.extend({},p)).of?y(document).find(p.of):y(p.of),w=y.position.getWithinInfo(p.within),v=y.position.getScrollInfo(w),b=(p.collision||"flip").split(" "),z={},e=9===(t=(e=_)[0]).nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:S(t)?{width:e.width(),height:e.height(),offset:{
top:e.scrollTop(),left:e.scrollLeft()}}:t.preventDefault?{width:0,height:0,offset:{top:t.pageY,left:t.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()};return _[0].preventDefault&&(p.at="left top"),c=e.width,f=e.height,m=y.extend({},g=e.offset),y.each(["my","at"],function(){var t,e,i=(p[this]||"").split(" ");(i=1===i.length?o.test(i[0])?i.concat(["center"]):r.test(i[0])?["center"].concat(i):["center","center"]:i)[0]=o.test(i[0])?i[0]:"center",i[1]=r.test(i[1])?i[1]:"center",t=l.exec(i[0]),e=l.exec(i[1]),z[this]=[t?t[0]:0,e?e[0]:0],p[this]=[u.exec(i[0])[0],u.exec(i[1])[0]]}),1===b.length&&(b[1]=b[0]),"right"===p.at[0]?m.left+=c:"center"===p.at[0]&&(m.left+=c/2),"bottom"===p.at[1]?m.top+=f:"center"===p.at[1]&&(m.top+=f/2),d=E(z.at,c,f),m.left+=d[0],m.top+=d[1],this.each(function(){var i,t,h=y(this),a=h.outerWidth(),r=h.outerHeight(),e=H(this,"marginLeft"),s=H(this,"marginTop"),n=a+e+H(this,"marginRight")+v.width,o=r+s+H(this,"marginBottom")+v.height,l=y.extend({},m),u=E(z.my,h.outerWidth()
,h.outerHeight());"right"===p.my[0]?l.left-=a:"center"===p.my[0]&&(l.left-=a/2),"bottom"===p.my[1]?l.top-=r:"center"===p.my[1]&&(l.top-=r/2),l.left+=u[0],l.top+=u[1],i={marginLeft:e,marginTop:s},y.each(["left","top"],function(t,e){y.ui.position[b[t]]&&y.ui.position[b[t]][e](l,{targetWidth:c,targetHeight:f,elemWidth:a,elemHeight:r,collisionPosition:i,collisionWidth:n,collisionHeight:o,offset:[d[0]+u[0],d[1]+u[1]],my:p.my,at:p.at,within:w,elem:h})}),p.using&&(t=function(t){var e=g.left-l.left,i=e+c-a,s=g.top-l.top,n=s+f-r,o={target:{element:_,left:g.left,top:g.top,width:c,height:f},element:{element:h,left:l.left,top:l.top,width:a,height:r},horizontal:i<0?"left":0<e?"right":"center",vertical:n<0?"top":0<s?"bottom":"middle"};c<a&&D(e+i)<c&&(o.horizontal="center"),f<r&&D(s+n)<f&&(o.vertical="middle"),x(D(e),D(i))>x(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,
s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0<h&&a<=0?(i=t.left+h+e.collisionWidth-n-s,t.left+=h-i):t.left=!(0<a&&h<=0)&&a<h?s+n-e.collisionWidth:s:0<h?t.left+=h:0<a?t.left-=a:t.left=x(t.left-o,t.left)},top:function(t,e){var i=e.within,s=i.isWindow?i.scrollTop:i.offset.top,n=e.within.height,o=t.top-e.collisionPosition.marginTop,h=s-o,a=o+e.collisionHeight-n-s;e.collisionHeight>n?0<h&&a<=0?(i=t.top+h+e.collisionHeight-n-s,t.top+=h-i):t.top=!(0<a&&h<=0)&&a<h?s+n-e.collisionHeight:s:0<h?t.top+=h:0<a?t.top-=a:t.top=x(t.top-o,t.top)}},flip:{left:function(t,e){var i=e.within,s=i.offset.left+i.scrollLeft,n=i.width,o=i.isWindow?i.scrollLeft:i.offset.left,h=t.left-e.collisionPosition.marginLeft,a=h-o,r=h+e.collisionWidth-n-o,l="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,i="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,h=-2*e.offset[0];a<0?((s=t.left+l+i+h+e.collisionWidth-n-s)<0||s<D(a)
)&&(t.left+=l+i+h):0<r&&(0<(o=t.left-e.collisionPosition.marginLeft+l+i+h-o)||D(o)<r)&&(t.left+=l+i+h)},top:function(t,e){var i=e.within,s=i.offset.top+i.scrollTop,n=i.height,o=i.isWindow?i.scrollTop:i.offset.top,h=t.top-e.collisionPosition.marginTop,a=h-o,r=h+e.collisionHeight-n-o,l="top"===e.my[1]?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,i="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,h=-2*e.offset[1];a<0?((s=t.top+l+i+h+e.collisionHeight-n-s)<0||s<D(a))&&(t.top+=l+i+h):0<r&&(0<(o=t.top-e.collisionPosition.marginTop+l+i+h-o)||D(o)<r)&&(t.top+=l+i+h)}},flipfit:{left:function(){y.ui.position.flip.left.apply(this,arguments),y.ui.position.fit.left.apply(this,arguments)},top:function(){y.ui.position.flip.top.apply(this,arguments),y.ui.position.fit.top.apply(this,arguments)}}};var t;y.ui.position,y.extend(y.expr.pseudos,{data:y.expr.createPseudo?y.expr.createPseudo(function(e){return function(t){return!!y.data(t,e)}}):function(t,e,i){return!!y.data(t,i[3])}}),y.fn.extend({
disableSelection:(t="onselectstart"in document.createElement("div")?"selectstart":"mousedown",function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}),enableSelection:function(){return this.off(".ui-disableSelection")}});y.ui.focusable=function(t,e){var i,s,n,o,h=t.nodeName.toLowerCase();return"area"===h?(s=(i=t.parentNode).name,!(!t.href||!s||"map"!==i.nodeName.toLowerCase())&&(0<(s=y("img[usemap='#"+s+"']")).length&&s.is(":visible"))):(/^(input|select|textarea|button|object)$/.test(h)?(n=!t.disabled)&&(o=y(t).closest("fieldset")[0])&&(n=!o.disabled):n="a"===h&&t.href||e,n&&y(t).is(":visible")&&function(t){var e=t.css("visibility");for(;"inherit"===e;)t=t.parent(),e=t.css("visibility");return"visible"===e}(y(t)))},y.extend(y.expr.pseudos,{focusable:function(t){return y.ui.focusable(t,null!=y.attr(t,"tabindex"))}});var e,d;y.ui.focusable,y.fn._form=function(){return"string"==typeof this[0].form?this.closest("form"):y(this[0].form)},y.ui.formResetMixin={_formResetHandler:function(
){var e=y(this);setTimeout(function(){var t=e.data("ui-form-reset-instances");y.each(t,function(){this.refresh()})})},_bindFormResetHandler:function(){var t;this.form=this.element._form(),this.form.length&&((t=this.form.data("ui-form-reset-instances")||[]).length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t))},_unbindFormResetHandler:function(){var t;this.form.length&&((t=this.form.data("ui-form-reset-instances")).splice(y.inArray(this,t),1),t.length?this.form.data("ui-form-reset-instances",t):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset"))}};y.expr.pseudos||(y.expr.pseudos=y.expr[":"]),y.uniqueSort||(y.uniqueSort=y.unique),y.escapeSelector||(e=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,d=function(t,e){return e?"\0"===t?"<22>":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t},y.escapeSelector=function(t){return(t+"").replace(e,d)}),y.fn.even&&y.fn.odd||y.fn.extend({even:function(){
return this.filter(function(t){return t%2==0})},odd:function(){return this.filter(function(t){return t%2==1})}});y.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},y.fn.labels=function(){var t,e,i;return this.length?this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(e=this.eq(0).parents("label"),(t=this.attr("id"))&&(i=(i=this.eq(0).parents().last()).add((i.length?i:this).siblings()),t="label[for='"+y.escapeSelector(t)+"']",e=e.add(i.find(t).addBack(t))),this.pushStack(e)):this.pushStack([])},y.fn.scrollParent=function(t){var e=this.css("position"),i="absolute"===e,s=t?/(auto|scroll|hidden)/:/(auto|scroll)/,t=this.parents().filter(function(){var t=y(this);return(!i||"static"!==t.css("position"))&&s.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==e&&t.length?t:y(this[0].ownerDocument||document)},y.extend(y.expr.pseudos,{tabbable:function(t){
var e=y.attr(t,"tabindex"),i=null!=e;return(!i||0<=e)&&y.ui.focusable(t,i)}}),y.fn.extend({uniqueId:(c=0,function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++c)})}),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&y(this).removeAttr("id")})}}),y.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var c,f=!1;y(document).on("mouseup",function(){f=!1});y.widget("ui.mouse",{version:"1.13.2",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(t){if(!0===y.data(t.target,e.widgetName+".preventClickEvent"))return y.removeData(t.target,e.widgetName+".preventClickEvent"),t.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off(
"mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!f){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var e=this,i=1===t.which,s=!("string"!=typeof this.options.cancel||!t.target.nodeName)&&y(t.target).closest(this.options.cancel).length;return i&&!s&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=!1!==this._mouseStart(t),!this._mouseStarted)?(t.preventDefault(),!0):(!0===y.data(t.target,this.widgetName+".preventClickEvent")&&y.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return e._mouseMove(t)},this._mouseUpDelegate=function(t){return e._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),f=!0)):!0}},
_mouseMove:function(t){if(this._mouseMoved){if(y.ui.ie&&(!document.documentMode||document.documentMode<9)&&!t.button)return this._mouseUp(t);if(!t.which)if(t.originalEvent.altKey||t.originalEvent.ctrlKey||t.originalEvent.metaKey||t.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=!1!==this._mouseStart(this._mouseDownEvent,t),this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&y.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),
delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,f=!1,t.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n<o.length;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}};y.widget("ui.resizable",y.ui.mouse,{version:"1.13.2",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,
handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(t,e){if("hidden"===y(t).css("overflow"))return!1;var i=e&&"left"===e?"scrollLeft":"scrollTop",e=!1;if(0<t[i])return!0;try{t[i]=1,e=0<t[i],t[i]=0}catch(t){}return e},_create:function(){var t,e=this.options,i=this;this._addClass("ui-resizable"),y.extend(this,{_aspectRatio:!!e.aspectRatio,aspectRatio:e.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:e.helper||e.ghost||e.animate?e.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(y("<div class='ui-wrapper'></div>").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),
this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t
).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(
","),this.handles={},e=0;e<i.length;e++)s="ui-resizable-"+(t=String.prototype.trim.call(i[e])),n=y("<div>"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(
this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{
width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),
!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){
this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),s<n.maxWidth&&(n.maxWidth=s),t<n.maxHeight&&(n.maxHeight=t)
),this._vBoundaries=n},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height
,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e<this._proportionallyResizeElements.length;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({
height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,e=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||y("<div></div>").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,
i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left
)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e
){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),
i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth(
)-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,
function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0
]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidth<d,g=i.maxHeight&&i.maxHeight<c,m=i.minWidth&&i.minWidth>d,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0<c-l?(e.size.height=c,e.position.top=o.top-p):(c=l-t.height,e.size.height=c,e.position.top=o.top+n.height-c),0<d-r?(e.size.width=d,e.position.left=o.left-u):(d=r-t.width,e.size.width=d,e.position.left=o.left+n.width-d))}});y.ui.resizable});
/**
* Copyright (c) 2007 Ariel Flesler - aflesler gmail com | https://github.com/flesler
* Licensed under MIT
* @author Ariel Flesler
* @version 2.1.2
*/(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"===typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9e9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1<b.axis.length;u&&(d/=2);b.offset=h(b.offset);b.over=h(b.over);return this.each(function(){function k(a){var k=$.extend({},b,{queue:!0,duration:d,complete:a&&function(){a.call(q,e,b)}});r.animate(f,k)}if(null!==a){var l=n(this),q=l?this.contentWindow||window:this,r=$(q),e=a,f={},t;switch(typeof e){case"number":case"string":if(
/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(e)){e=h(e);break}e=l?$(e):$(e,q);case"object":if(e.length===0)return;if(e.is||e.style)t=(e=$(e)).offset()}var v=$.isFunction(b.offset)&&b.offset(q,e)||b.offset;$.each(b.axis.split(""),function(a,c){var d="x"===c?"Left":"Top",m=d.toLowerCase(),g="scroll"+d,h=r[g](),n=p.max(q,c);t?(f[g]=t[m]+(l?0:h-r.offset()[m]),b.margin&&(f[g]-=parseInt(e.css("margin"+d),10)||0,f[g]-=parseInt(e.css("border"+d+"Width"),10)||0),f[g]+=v[m]||0,b.over[m]&&(f[g]+=e["x"===c?"width":"height"]()*b.over[m])):(d=e[m],f[g]=d.slice&&"%"===d.slice(-1)?parseFloat(d)/100*n:d);b.limit&&/^\d+$/.test(f[g])&&(f[g]=0>=f[g]?0:Math.min(f[g],n));!a&&1<b.axis.length&&(h===f[g]?f={}:u&&(k(b.onAfterFirst),f={}))});k(b.onAfter)}})};p.max=function(a,d){var b="x"===d?"Width":"Height",h="scroll"+b;if(!n(a))return a[h]-$(a)[b.toLowerCase()]();var b="client"+b,k=a.ownerDocument||a.document,l=k.documentElement,k=k.body;return Math.max(l[h],k[h])-Math.min(l[b],k[b])};
$.Tween.propHooks.scrollLeft=$.Tween.propHooks.scrollTop={get:function(a){return $(a.elem)[a.prop]()},set:function(a){var d=this.get(a);if(a.options.interrupt&&a._last&&a._last!==d)return $(a.elem).stop();var b=Math.round(a.now);d!==b&&($(a.elem)[a.prop](b),a._last=this.get(a))}};return p});
/*!
PowerTip v1.3.1 (2018-04-15)
https://stevenbenner.github.io/jquery-powertip/
Copyright (c) 2018 Steven Benner (http://stevenbenner.com/).
Released under MIT license.
https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
*/
(function(root,factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else if(typeof module==="object"&&module.exports){module.exports=factory(require("jquery"))}else{factory(root.jQuery)}})(this,function($){var $document=$(document),$window=$(window),$body=$("body");var DATA_DISPLAYCONTROLLER="displayController",DATA_HASACTIVEHOVER="hasActiveHover",DATA_FORCEDOPEN="forcedOpen",DATA_HASMOUSEMOVE="hasMouseMove",DATA_MOUSEONTOTIP="mouseOnToPopup",DATA_ORIGINALTITLE="originalTitle",DATA_POWERTIP="powertip",DATA_POWERTIPJQ="powertipjq",DATA_POWERTIPTARGET="powertiptarget",EVENT_NAMESPACE=".powertip",RAD2DEG=180/Math.PI,MOUSE_EVENTS=["click","dblclick","mousedown","mouseup","mousemove","mouseover","mouseout","mouseenter","mouseleave","contextmenu"];var session={tooltips:null,isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,closeDelayTimeout:null,mouseTrackingActive:false,
delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var Collision={none:0,top:1,bottom:2,left:4,right:8};$.fn.powerTip=function(opts,arg){var targetElements=this,options,tipController;if(!targetElements.length){return targetElements}if($.type(opts)==="string"&&$.powerTip[opts]){return $.powerTip[opts].call(targetElements,targetElements,arg)}options=$.extend({},$.fn.powerTip.defaults,opts);tipController=new TooltipController(options);initTracking();targetElements.each(function elementSetup(){var $this=$(this),dataPowertip=$this.data(DATA_POWERTIP),dataElem=$this.data(DATA_POWERTIPJQ),dataTarget=$this.data(DATA_POWERTIPTARGET),title=$this.attr("title");if(!dataPowertip&&!dataTarget&&!dataElem&&title){$this.data(DATA_POWERTIP,title);$this.data(DATA_ORIGINALTITLE,title);$this.removeAttr("title")}$this.data(DATA_DISPLAYCONTROLLER,new DisplayController($this,options,tipController))});if(!options.manual){$.each(options.openEvents,function(idx,evt){if($.inArray(evt,options.closeEvents)>-1){
targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se",
"n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(
session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}
closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference<options.intentSensitivity){cancelClose();closeAnyDelayed();tipController.showTip(element)}else{session.previousX=session.currentX;session.previousY=session.currentY;
openTooltip()}}function cancelTimer(stopClose){hoverTimer=clearTimeout(hoverTimer);if(session.closeDelayTimeout&&myCloseDelay===session.closeDelayTimeout||stopClose){cancelClose()}}function cancelClose(){session.closeDelayTimeout=clearTimeout(session.closeDelayTimeout);session.delayInProgress=false}function closeAnyDelayed(){if(session.delayInProgress&&session.activeHover&&!session.activeHover.is(element)){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide(true)}}function repositionTooltip(){tipController.resetPosition(element)}this.show=openTooltip;this.hide=closeTooltip;this.cancel=cancelTimer;this.resetPosition=repositionTooltip}function PlacementCalculator(){function computePlacementCoords(element,placement,tipWidth,tipHeight,offset){var placementBase=placement.split("-")[0],coords=new CSSCoordinates,position;if(isSvgElement(element)){position=getSvgPlacement(element,placementBase)}else{position=getHtmlPlacement(element,placementBase)}switch(placement){case"n":coords.set("left",position.left-tipWidth/2
);coords.set("bottom",session.windowHeight-position.top+offset);break;case"e":coords.set("left",position.left+offset);coords.set("top",position.top-tipHeight/2);break;case"s":coords.set("left",position.left-tipWidth/2);coords.set("top",position.top+offset);break;case"w":coords.set("top",position.top-tipHeight/2);coords.set("right",session.windowWidth-position.left+offset);break;case"nw":coords.set("bottom",session.windowHeight-position.top+offset);coords.set("right",session.windowWidth-position.left-20);break;case"nw-alt":coords.set("left",position.left);coords.set("bottom",session.windowHeight-position.top+offset);break;case"ne":coords.set("left",position.left-20);coords.set("bottom",session.windowHeight-position.top+offset);break;case"ne-alt":coords.set("bottom",session.windowHeight-position.top+offset);coords.set("right",session.windowWidth-position.left);break;case"sw":coords.set("top",position.top+offset);coords.set("right",session.windowWidth-position.left-20);break;case"sw-alt":coords.set("left",
position.left);coords.set("top",position.top+offset);break;case"se":coords.set("left",position.left-20);coords.set("top",position.top+offset);break;case"se-alt":coords.set("top",position.top+offset);coords.set("right",session.windowWidth-position.left);break}return coords}function getHtmlPlacement(element,placement){var objectOffset=element.offset(),objectWidth=element.outerWidth(),objectHeight=element.outerHeight(),left,top;switch(placement){case"n":left=objectOffset.left+objectWidth/2;top=objectOffset.top;break;case"e":left=objectOffset.left+objectWidth;top=objectOffset.top+objectHeight/2;break;case"s":left=objectOffset.left+objectWidth/2;top=objectOffset.top+objectHeight;break;case"w":left=objectOffset.left;top=objectOffset.top+objectHeight/2;break;case"nw":left=objectOffset.left;top=objectOffset.top;break;case"ne":left=objectOffset.left+objectWidth;top=objectOffset.top;break;case"sw":left=objectOffset.left;top=objectOffset.top+objectHeight;break;case"se":left=objectOffset.left+objectWidth;
top=objectOffset.top+objectHeight;break}return{top:top,left:left}}function getSvgPlacement(element,placement){var svgElement=element.closest("svg")[0],domElement=element[0],point=svgElement.createSVGPoint(),boundingBox=domElement.getBBox(),matrix=domElement.getScreenCTM(),halfWidth=boundingBox.width/2,halfHeight=boundingBox.height/2,placements=[],placementKeys=["nw","n","ne","e","se","s","sw","w"],coords,rotation,steps,x;function pushPlacement(){placements.push(point.matrixTransform(matrix))}point.x=boundingBox.x;point.y=boundingBox.y;pushPlacement();point.x+=halfWidth;pushPlacement();point.x+=halfWidth;pushPlacement();point.y+=halfHeight;pushPlacement();point.y+=halfHeight;pushPlacement();point.x-=halfWidth;pushPlacement();point.x-=halfWidth;pushPlacement();point.y-=halfHeight;pushPlacement();if(placements[0].y!==placements[1].y||placements[0].x!==placements[7].x){rotation=Math.atan2(matrix.b,matrix.a)*RAD2DEG;steps=Math.ceil((rotation%360-22.5)/45);if(steps<1){steps+=8}while(steps--){placementKeys.push(
placementKeys.shift())}}for(x=0;x<placements.length;x++){if(placementKeys[x]===placement){coords=placements[x];break}}return{top:coords.y+session.scrollTop,left:coords.x+session.scrollLeft}}this.compute=computePlacementCoords}function TooltipController(options){var placementCalculator=new PlacementCalculator,tipElement=$("#"+options.popupId);if(tipElement.length===0){tipElement=$("<div/>",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(
session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,
function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);
tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,
finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));
return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}
function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),
elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,
viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.top<viewportTop||Math.abs(coords.bottom-session.windowHeight)-elementHeight<viewportTop){collisions|=Collision.top}if(coords.top+elementHeight>viewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.left<viewportLeft||coords.right+elementWidth>viewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right<viewportLeft){collisions|=Collision.right}return collisions}function countFlags(value){var count=0;while(value){value&=value-1;count++}return count}return $.powerTip});
/*!
* jQuery UI Touch Punch 0.2.3
*
* Copyright 20112014, Dave Furfero
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* Depends:
* jquery.ui.widget.js
* jquery.ui.mouse.js
*/!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,
"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);
/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017
* http://www.smartmenus.org/
* Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),
mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend(
$.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(
this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("<span/>").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData(
"smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id"
).indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('<div class="sm-jquery-disable-overlay"/>').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(
this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(
var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){
return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((
!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(
this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0
]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass(
"highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){
t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]"
)||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0],$('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){
t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),
a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y<o.upEnd)&&a.eq(o.up?1:0).show(),o.y==n)mouse&&a.eq(o.up?0:1).hide(),this.menuScrollStop(t);else if(!e){this.opts.scrollAccelerate&&o.step<this.opts.scrollStep&&(o.step+=.2);var h=this;this.scrollTimeout=requestAnimationFrame(function(){h.menuScroll(t)})}},menuScrollMousewheel:function(t,e){if(this.getClosestMenu(e.target)==t[0]){e=e.originalEvent;var i=(
e.wheelDelta||-e.detail)>0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,
downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2)
)&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t
)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),
canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},
rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}
return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,
bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$});

131
Doc/html/menu.js Normal file
View File

@ -0,0 +1,131 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@licend The above is the entire license notice for the JavaScript code in this file
*/
function initMenu(relPath,searchEnabled,serverSide,searchPage,search,treeview) {
function makeTree(data,relPath) {
let result='';
if ('children' in data) {
result+='<ul>';
for (let i in data.children) {
let url;
const link = data.children[i].url;
if (link.substring(0,1)=='^') {
url = link.substring(1);
} else {
url = relPath+link;
}
result+='<li><a href="'+url+'">'+
data.children[i].text+'</a>'+
makeTree(data.children[i],relPath)+'</li>';
}
result+='</ul>';
}
return result;
}
let searchBoxHtml;
if (searchEnabled) {
if (serverSide) {
searchBoxHtml='<div id="MSearchBox" class="MSearchBoxInactive">'+
'<div class="left">'+
'<form id="FSearchBox" action="'+relPath+searchPage+
'" method="get"><span id="MSearchSelectExt" class="search-icon"></span>'+
'<input type="text" id="MSearchField" name="query" value="" placeholder="'+search+
'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)"'+
' onblur="searchBox.OnSearchFieldFocus(false)"/>'+
'</form>'+
'</div>'+
'<div class="right"></div>'+
'</div>';
} else {
searchBoxHtml='<div id="MSearchBox" class="MSearchBoxInactive">'+
'<span class="left">'+
'<span id="MSearchSelect" class="search-icon" onmouseover="return searchBox.OnSearchSelectShow()"'+
' onmouseout="return searchBox.OnSearchSelectHide()"><span class="search-icon-dropdown"></span></span>'+
'<input type="text" id="MSearchField" value="" placeholder="'+search+
'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" '+
'onblur="searchBox.OnSearchFieldFocus(false)" '+
'onkeyup="searchBox.OnSearchFieldChange(event)"/>'+
'</span>'+
'<span class="right"><a id="MSearchClose" '+
'href="javascript:searchBox.CloseResultsWindow()">'+
'<div id="MSearchCloseImg" class="close-icon"></div></a>'+
'</span>'+
'</div>';
}
}
$('#main-nav').before('<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>'+
'<label class="main-menu-btn" for="main-menu-state">'+
'<span class="main-menu-btn-icon"></span> '+
'Toggle main menu visibility</label>'+
'<span id="searchBoxPos1" style="position:absolute;right:8px;top:8px;height:36px;"></span>'+
'</div>');
$('#main-nav').append(makeTree(menudata,relPath));
$('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
$('#main-menu').append('<li id="searchBoxPos2" style="float:right"></li>');
const $mainMenuState = $('#main-menu-state');
let prevWidth = 0;
if ($mainMenuState.length) {
const initResizableIfExists = function() {
if (typeof initResizable==='function') initResizable(treeview);
}
// animate mobile menu
$mainMenuState.change(function() {
const $menu = $('#main-menu');
let options = { duration: 250, step: initResizableIfExists };
if (this.checked) {
options['complete'] = () => $menu.css('display', 'block');
$menu.hide().slideDown(options);
} else {
options['complete'] = () => $menu.css('display', 'none');
$menu.show().slideUp(options);
}
});
// set default menu visibility
const resetState = function() {
const $menu = $('#main-menu');
const newWidth = $(window).outerWidth();
if (newWidth!=prevWidth) {
if ($(window).outerWidth()<768) {
$mainMenuState.prop('checked',false); $menu.hide();
$('#searchBoxPos1').html(searchBoxHtml);
$('#searchBoxPos2').hide();
} else {
$menu.show();
$('#searchBoxPos1').empty();
$('#searchBoxPos2').html(searchBoxHtml);
$('#searchBoxPos2').show();
}
if (typeof searchBox!=='undefined') {
searchBox.CloseResultsWindow();
}
prevWidth = newWidth;
}
}
$(window).ready(function() { resetState(); initResizableIfExists(); });
$(window).resize(resetState);
}
$('#main-menu').smartmenus();
}
/* @license-end */

67
Doc/html/menudata.js Normal file
View File

@ -0,0 +1,67 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@licend The above is the entire license notice for the JavaScript code in this file
*/
var menudata={children:[
{text:"Main Page",url:"index.html"},
{text:"Topics",url:"topics.html"},
{text:"Classes",url:"annotated.html",children:[
{text:"Class List",url:"annotated.html"},
{text:"Class Index",url:"classes.html"},
{text:"Class Members",url:"functions.html",children:[
{text:"All",url:"functions.html"},
{text:"Variables",url:"functions_vars.html"}]}]},
{text:"Files",url:"files.html",children:[
{text:"File List",url:"files.html"},
{text:"File Members",url:"globals.html",children:[
{text:"All",url:"globals.html",children:[
{text:"a",url:"globals.html#index_a"},
{text:"b",url:"globals.html#index_b"},
{text:"c",url:"globals.html#index_c"},
{text:"d",url:"globals.html#index_d"},
{text:"g",url:"globals.html#index_g"},
{text:"h",url:"globals.html#index_h"},
{text:"i",url:"globals.html#index_i"},
{text:"l",url:"globals.html#index_l"},
{text:"m",url:"globals.html#index_m"},
{text:"n",url:"globals.html#index_n"},
{text:"r",url:"globals.html#index_r"},
{text:"s",url:"globals.html#index_s"},
{text:"t",url:"globals.html#index_t"}]},
{text:"Functions",url:"globals_func.html"},
{text:"Enumerations",url:"globals_enum.html"},
{text:"Enumerator",url:"globals_eval.html"},
{text:"Macros",url:"globals_defs.html",children:[
{text:"a",url:"globals_defs.html#index_a"},
{text:"b",url:"globals_defs.html#index_b"},
{text:"c",url:"globals_defs.html#index_c"},
{text:"d",url:"globals_defs.html#index_d"},
{text:"g",url:"globals_defs.html#index_g"},
{text:"h",url:"globals_defs.html#index_h"},
{text:"i",url:"globals_defs.html#index_i"},
{text:"l",url:"globals_defs.html#index_l"},
{text:"m",url:"globals_defs.html#index_m"},
{text:"n",url:"globals_defs.html#index_n"},
{text:"r",url:"globals_defs.html#index_r"},
{text:"s",url:"globals_defs.html#index_s"},
{text:"t",url:"globals_defs.html#index_t"}]}]}]}]}

View File

@ -0,0 +1,178 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Inc/mylibs_config.h File Reference</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('mylibs__config_8h.html','',''); });
</script>
<div id="container">
<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">mylibs_config.h File Reference</div></div>
</div><!--header-->
<div class="contents">
<p>Конфигурации для библиотек MyLibs.
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &quot;stm32f4xx_hal.h&quot;</code><br />
<code>#include &quot;mzkt_config.h&quot;</code><br />
<code>#include &quot;mzkt_trace_config.h&quot;</code><br />
<code>#include &quot;interface_config.h&quot;</code><br />
</div>
<p><a href="mylibs__config_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-define-members" class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:gac9eaedc31ab023ce7d6403999216e496" id="r_gac9eaedc31ab023ce7d6403999216e496"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gac9eaedc31ab023ce7d6403999216e496">TRACKERS_ENABLE</a></td></tr>
<tr class="memdesc:gac9eaedc31ab023ce7d6403999216e496"><td class="mdescLeft">&#160;</td><td class="mdescRight">Включить трекеры <br /></td></tr>
<tr class="memitem:ga76936505ca200d2e61226b7ba68f27c6" id="r_ga76936505ca200d2e61226b7ba68f27c6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga76936505ca200d2e61226b7ba68f27c6">SERIAL_TRACE_ENABLE</a></td></tr>
<tr class="memdesc:ga76936505ca200d2e61226b7ba68f27c6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Включить serial трассировку <br /></td></tr>
<tr class="memitem:ga00ff2175bdc1fb11c8ec970ea3010dd8" id="r_ga00ff2175bdc1fb11c8ec970ea3010dd8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga00ff2175bdc1fb11c8ec970ea3010dd8">RTT_TRACE_ENABLE</a></td></tr>
<tr class="memdesc:ga00ff2175bdc1fb11c8ec970ea3010dd8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Включить serial трассировку через RTT. <br /></td></tr>
<tr class="memitem:gab8db9704b5d11858aa879689b9d36336" id="r_gab8db9704b5d11858aa879689b9d36336"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gab8db9704b5d11858aa879689b9d36336">SWO_TRACE_ENABLE</a></td></tr>
<tr class="memdesc:gab8db9704b5d11858aa879689b9d36336"><td class="mdescLeft">&#160;</td><td class="mdescRight">Включить serial трассировку через SWO. <br /></td></tr>
<tr class="memitem:ga0b87e0d3bf5853bcbb0b66a7c48fdc05" id="r_ga0b87e0d3bf5853bcbb0b66a7c48fdc05"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga0b87e0d3bf5853bcbb0b66a7c48fdc05">LOG_LEVEL</a>&#160;&#160;&#160;1</td></tr>
<tr class="memdesc:ga0b87e0d3bf5853bcbb0b66a7c48fdc05"><td class="mdescLeft">&#160;</td><td class="mdescRight">Уровень log serial трассировки <a class="el" href="group___t_r_a_c_e___s_e_r_i_a_l.html#ga730fb7b8d0bbb348dca73c15bd0e0b26">log_printf</a>. <br /></td></tr>
<tr class="memitem:ga501312b24e322de4dd6755ad442f0ba3" id="r_ga501312b24e322de4dd6755ad442f0ba3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga501312b24e322de4dd6755ad442f0ba3">RTT_FLASH_BUFFER_SIZE</a>&#160;&#160;&#160;1024</td></tr>
<tr class="memdesc:ga501312b24e322de4dd6755ad442f0ba3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Размер буфера RTT в Flash. <br /></td></tr>
<tr class="memitem:ga3bc1b76864e1d32cbdd174d4caae7724" id="r_ga3bc1b76864e1d32cbdd174d4caae7724"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga3bc1b76864e1d32cbdd174d4caae7724">RTT_FLASH_SECTOR</a>&#160;&#160;&#160;FLASH_SECTOR_11</td></tr>
<tr class="memdesc:ga3bc1b76864e1d32cbdd174d4caae7724"><td class="mdescLeft">&#160;</td><td class="mdescRight">Сектор FLASH куда положится RTT буфер <br /></td></tr>
<tr class="memitem:ga8e56f75d3ab8a89ddde1404ae23c3297" id="r_ga8e56f75d3ab8a89ddde1404ae23c3297"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga8e56f75d3ab8a89ddde1404ae23c3297">RTT_FLASH_SECTOR_START</a>&#160;&#160;&#160;0x080E0000</td></tr>
<tr class="memdesc:ga8e56f75d3ab8a89ddde1404ae23c3297"><td class="mdescLeft">&#160;</td><td class="mdescRight">Начало сектора RTT_FLASH_SECTOR. <br /></td></tr>
<tr class="memitem:gafeca0be3688dea07ff443f894668003d" id="r_gafeca0be3688dea07ff443f894668003d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gafeca0be3688dea07ff443f894668003d">RTT_FLASH_SECTOR_END</a>&#160;&#160;&#160;0x080FFFFF</td></tr>
<tr class="memdesc:gafeca0be3688dea07ff443f894668003d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Конец сектора RTT_FLASH_SECTOR. <br /></td></tr>
<tr class="memitem:ga47f454f804b4dbc26cae079e8d8641e6" id="r_ga47f454f804b4dbc26cae079e8d8641e6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga47f454f804b4dbc26cae079e8d8641e6">HARDFAULT_SERIAL_TRACE</a></td></tr>
<tr class="memdesc:ga47f454f804b4dbc26cae079e8d8641e6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Включить обработку и serial трассировку Hardfault. <br /></td></tr>
<tr class="memitem:gadc960255719c7eff4bdfaa850be9b313" id="r_gadc960255719c7eff4bdfaa850be9b313"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gadc960255719c7eff4bdfaa850be9b313">HF_RTT_TAG_BASE</a>&#160;&#160;&#160;0xDEAD0000</td></tr>
<tr class="memdesc:gadc960255719c7eff4bdfaa850be9b313"><td class="mdescLeft">&#160;</td><td class="mdescRight">базовый тег для HardFault <br /></td></tr>
<tr class="memitem:gafcc7ea03d4df8f1909e580b519a7f3ca" id="r_gafcc7ea03d4df8f1909e580b519a7f3ca"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gafcc7ea03d4df8f1909e580b519a7f3ca">HF_RTT_TAIL_SIZE</a>&#160;&#160;&#160;<a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga501312b24e322de4dd6755ad442f0ba3">RTT_FLASH_BUFFER_SIZE</a></td></tr>
<tr class="memdesc:gafcc7ea03d4df8f1909e580b519a7f3ca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Размер буфера RTT, который сохранится при Hardfault. <br /></td></tr>
<tr class="memitem:gaa31234688b333a505aaa57b8ecdedf5b" id="r_gaa31234688b333a505aaa57b8ecdedf5b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gaa31234688b333a505aaa57b8ecdedf5b">HF_STACK_DUMP_WORDS</a>&#160;&#160;&#160;32</td></tr>
<tr class="memdesc:gaa31234688b333a505aaa57b8ecdedf5b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Сколько слов стека будет проанализировано во время Hardfault. <br /></td></tr>
<tr class="memitem:ga0c602733a4a359bf8c095d71cd4d0f63" id="r_ga0c602733a4a359bf8c095d71cd4d0f63"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga0c602733a4a359bf8c095d71cd4d0f63">HF_FLASH_ADDR</a>&#160;&#160;&#160;((uint32_t)0x080FF000)</td></tr>
<tr class="memdesc:ga0c602733a4a359bf8c095d71cd4d0f63"><td class="mdescLeft">&#160;</td><td class="mdescRight">Адрес FLASH куда положится RTT буфер <br /></td></tr>
<tr class="memitem:ga92d0d14732edb7dfa21d483304bdb051" id="r_ga92d0d14732edb7dfa21d483304bdb051"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga92d0d14732edb7dfa21d483304bdb051">HF_RAM_END</a>&#160;&#160;&#160;0x20030000</td></tr>
<tr class="memdesc:ga92d0d14732edb7dfa21d483304bdb051"><td class="mdescLeft">&#160;</td><td class="mdescRight">Конец RAM памяти (чтобы во время анализа стека не выйти за пределы) <br /></td></tr>
<tr class="memitem:ga4222e0e400ad81737cefcabeb03fd23b" id="r_ga4222e0e400ad81737cefcabeb03fd23b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga4222e0e400ad81737cefcabeb03fd23b">GPIO_TRACE_ENABLE</a></td></tr>
<tr class="memdesc:ga4222e0e400ad81737cefcabeb03fd23b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Включить GPIO трассировку <br /></td></tr>
<tr class="memitem:gaf4ddb2a71ec0d05c2480e197cd17c0be" id="r_gaf4ddb2a71ec0d05c2480e197cd17c0be"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___l_i_b_s___c_o_n_f_i_g.html#gaf4ddb2a71ec0d05c2480e197cd17c0be">INCLUDE_BIT_ACCESS_LIB</a></td></tr>
<tr class="memdesc:gaf4ddb2a71ec0d05c2480e197cd17c0be"><td class="mdescLeft">&#160;</td><td class="mdescRight">Подключить библиотеку с typedef с битовыми полями <br /></td></tr>
<tr class="memitem:ga4403055986b70bb02b8d37073a122e32" id="r_ga4403055986b70bb02b8d37073a122e32"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___l_i_b_s___c_o_n_f_i_g.html#ga4403055986b70bb02b8d37073a122e32">INCLUDE_TRACKERS_LIB</a></td></tr>
<tr class="memdesc:ga4403055986b70bb02b8d37073a122e32"><td class="mdescLeft">&#160;</td><td class="mdescRight">Подключить библиотеку с трекерами <br /></td></tr>
<tr class="memitem:ga0a3ca94b616997069dd53e2c6c2687d7" id="r_ga0a3ca94b616997069dd53e2c6c2687d7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___l_i_b_s___c_o_n_f_i_g.html#ga0a3ca94b616997069dd53e2c6c2687d7">INCLUDE_TRACE_LIB</a></td></tr>
<tr class="memdesc:ga0a3ca94b616997069dd53e2c6c2687d7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Подключить библиотеку с трейсами <br /></td></tr>
<tr class="memitem:ga181a46326e46b60afb160190832c7281" id="r_ga181a46326e46b60afb160190832c7281"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___l_i_b_s___c_o_n_f_i_g.html#ga181a46326e46b60afb160190832c7281">INCLUDE_GENERAL_PERIPH_LIBS</a></td></tr>
<tr class="memdesc:ga181a46326e46b60afb160190832c7281"><td class="mdescLeft">&#160;</td><td class="mdescRight">Подключить библиотеку с периферией <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Конфигурации для библиотек MyLibs. </p>
<p class="definition">Definition in file <a class="el" href="mylibs__config_8h_source.html">mylibs_config.h</a>.</p>
</div></div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_9e11e9a41112194af3eee6cc728f9515.html">MyLibsGeneral</a></li><li class="navelem"><a href="dir_eb423fea8a9c4b9b32b922020ec391e1.html">Inc</a></li><li class="navelem"><a href="mylibs__config_8h.html">mylibs_config.h</a></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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,23 @@
var mylibs__config_8h =
[
[ "TRACKERS_ENABLE", "group___t_r_a_c_e___c_o_n_f_i_g.html#gac9eaedc31ab023ce7d6403999216e496", null ],
[ "SERIAL_TRACE_ENABLE", "group___t_r_a_c_e___c_o_n_f_i_g.html#ga76936505ca200d2e61226b7ba68f27c6", null ],
[ "RTT_TRACE_ENABLE", "group___t_r_a_c_e___c_o_n_f_i_g.html#ga00ff2175bdc1fb11c8ec970ea3010dd8", null ],
[ "SWO_TRACE_ENABLE", "group___t_r_a_c_e___c_o_n_f_i_g.html#gab8db9704b5d11858aa879689b9d36336", null ],
[ "LOG_LEVEL", "group___t_r_a_c_e___c_o_n_f_i_g.html#ga0b87e0d3bf5853bcbb0b66a7c48fdc05", null ],
[ "RTT_FLASH_BUFFER_SIZE", "group___t_r_a_c_e___c_o_n_f_i_g.html#ga501312b24e322de4dd6755ad442f0ba3", null ],
[ "RTT_FLASH_SECTOR", "group___t_r_a_c_e___c_o_n_f_i_g.html#ga3bc1b76864e1d32cbdd174d4caae7724", null ],
[ "RTT_FLASH_SECTOR_START", "group___t_r_a_c_e___c_o_n_f_i_g.html#ga8e56f75d3ab8a89ddde1404ae23c3297", null ],
[ "RTT_FLASH_SECTOR_END", "group___t_r_a_c_e___c_o_n_f_i_g.html#gafeca0be3688dea07ff443f894668003d", null ],
[ "HARDFAULT_SERIAL_TRACE", "group___t_r_a_c_e___c_o_n_f_i_g.html#ga47f454f804b4dbc26cae079e8d8641e6", null ],
[ "HF_RTT_TAG_BASE", "group___t_r_a_c_e___c_o_n_f_i_g.html#gadc960255719c7eff4bdfaa850be9b313", null ],
[ "HF_RTT_TAIL_SIZE", "group___t_r_a_c_e___c_o_n_f_i_g.html#gafcc7ea03d4df8f1909e580b519a7f3ca", null ],
[ "HF_STACK_DUMP_WORDS", "group___t_r_a_c_e___c_o_n_f_i_g.html#gaa31234688b333a505aaa57b8ecdedf5b", null ],
[ "HF_FLASH_ADDR", "group___t_r_a_c_e___c_o_n_f_i_g.html#ga0c602733a4a359bf8c095d71cd4d0f63", null ],
[ "HF_RAM_END", "group___t_r_a_c_e___c_o_n_f_i_g.html#ga92d0d14732edb7dfa21d483304bdb051", null ],
[ "GPIO_TRACE_ENABLE", "group___t_r_a_c_e___c_o_n_f_i_g.html#ga4222e0e400ad81737cefcabeb03fd23b", null ],
[ "INCLUDE_BIT_ACCESS_LIB", "group___l_i_b_s___c_o_n_f_i_g.html#gaf4ddb2a71ec0d05c2480e197cd17c0be", null ],
[ "INCLUDE_TRACKERS_LIB", "group___l_i_b_s___c_o_n_f_i_g.html#ga4403055986b70bb02b8d37073a122e32", null ],
[ "INCLUDE_TRACE_LIB", "group___l_i_b_s___c_o_n_f_i_g.html#ga0a3ca94b616997069dd53e2c6c2687d7", null ],
[ "INCLUDE_GENERAL_PERIPH_LIBS", "group___l_i_b_s___c_o_n_f_i_g.html#ga181a46326e46b60afb160190832c7281", null ]
];

View File

@ -0,0 +1,196 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Inc/mylibs_config.h 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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('mylibs__config_8h_source.html','',''); });
</script>
<div id="container">
<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">mylibs_config.h</div></div>
</div><!--header-->
<div class="contents">
<a href="mylibs__config_8h.html">Go to the documentation of this file.</a><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 mylibs_config.h</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">* @brief Конфигурации для библиотек MyLibs</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">* @defgroup MYLIBS_CONFIG Configs</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">* @ingroup MYLIBS_ALL</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment">* @brief Конфигурации для библиотек MyLibs</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">@{</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="preprocessor">#ifndef __MYLIBS_CONFIG_H_</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#define __MYLIBS_CONFIG_H_</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#include &quot;stm32f4xx_hal.h&quot;</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment">// user includes</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include &quot;mzkt_config.h&quot;</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#include &quot;mzkt_trace_config.h&quot;</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &quot;interface_config.h&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">/** </span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment"> * @addtogroup TRACE_CONFIG Trace configs</span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment"> * @ingroup MYLIBS_CONFIG</span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="comment"> * @brief Конфигурация трекеров и трассировки</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment"> * @{</span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment"> */</span></div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gac9eaedc31ab023ce7d6403999216e496"> 29</a></span><span class="preprocessor">#define TRACKERS_ENABLE </span><span class="comment">///&lt; Включить трекеры</span></div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga76936505ca200d2e61226b7ba68f27c6"> 30</a></span><span class="preprocessor">#define SERIAL_TRACE_ENABLE </span><span class="comment">///&lt; Включить serial трассировку</span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga00ff2175bdc1fb11c8ec970ea3010dd8"> 31</a></span><span class="preprocessor">#define RTT_TRACE_ENABLE </span><span class="comment">///&lt; Включить serial трассировку через RTT</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gab8db9704b5d11858aa879689b9d36336"> 32</a></span><span class="preprocessor">#define SWO_TRACE_ENABLE </span><span class="comment">///&lt; Включить serial трассировку через SWO</span><span class="comment"></span></div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment">/**</span></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="comment"> * @brief Уровень log serial трассировки @ref log_printf</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="comment"> * - LOG_LEVEL == 0 - логирование отключено (макрос пустой)</span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment"> * - LOG_LEVEL == 1 - выводится время и TAG</span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="comment"> * - LOG_LEVEL &gt;= 2 - выводится время, TAG, имя файла и номер строки</span></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="comment"> */</span><span class="preprocessor"></span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga0b87e0d3bf5853bcbb0b66a7c48fdc05"> 39</a></span><span class="preprocessor">#define LOG_LEVEL 1</span></div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga501312b24e322de4dd6755ad442f0ba3"> 41</a></span><span class="preprocessor">#define RTT_FLASH_BUFFER_SIZE 1024 </span><span class="comment">///&lt; Размер буфера RTT в Flash</span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga3bc1b76864e1d32cbdd174d4caae7724"> 42</a></span><span class="preprocessor">#define RTT_FLASH_SECTOR FLASH_SECTOR_11 </span><span class="comment">///&lt; Сектор FLASH куда положится RTT буфер</span></div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga8e56f75d3ab8a89ddde1404ae23c3297"> 43</a></span><span class="preprocessor">#define RTT_FLASH_SECTOR_START 0x080E0000 </span><span class="comment">///&lt; Начало сектора RTT_FLASH_SECTOR</span></div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gafeca0be3688dea07ff443f894668003d"> 44</a></span><span class="preprocessor">#define RTT_FLASH_SECTOR_END 0x080FFFFF </span><span class="comment">///&lt; Конец сектора RTT_FLASH_SECTOR</span></div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </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"><a class="line" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga47f454f804b4dbc26cae079e8d8641e6"> 47</a></span><span class="preprocessor">#define HARDFAULT_SERIAL_TRACE </span><span class="comment">///&lt; Включить обработку и serial трассировку Hardfault</span></div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gadc960255719c7eff4bdfaa850be9b313"> 48</a></span><span class="preprocessor">#define HF_RTT_TAG_BASE 0xDEAD0000 </span><span class="comment">///&lt; базовый тег для HardFault</span></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gafcc7ea03d4df8f1909e580b519a7f3ca"> 49</a></span><span class="preprocessor">#define HF_RTT_TAIL_SIZE RTT_FLASH_BUFFER_SIZE </span><span class="comment">///&lt; Размер буфера RTT, который сохранится при Hardfault</span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="group___t_r_a_c_e___c_o_n_f_i_g.html#gaa31234688b333a505aaa57b8ecdedf5b"> 50</a></span><span class="preprocessor">#define HF_STACK_DUMP_WORDS 32 </span><span class="comment">///&lt; Сколько слов стека будет проанализировано во время Hardfault</span></div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga0c602733a4a359bf8c095d71cd4d0f63"> 51</a></span><span class="preprocessor">#define HF_FLASH_ADDR ((uint32_t)0x080FF000) </span><span class="comment">///&lt; Адрес FLASH куда положится RTT буфер</span></div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga92d0d14732edb7dfa21d483304bdb051"> 52</a></span><span class="preprocessor">#define HF_RAM_END 0x20030000 </span><span class="comment">///&lt; Конец RAM памяти (чтобы во время анализа стека не выйти за пределы)</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"><a class="line" href="group___t_r_a_c_e___c_o_n_f_i_g.html#ga4222e0e400ad81737cefcabeb03fd23b"> 54</a></span><span class="preprocessor">#define GPIO_TRACE_ENABLE </span><span class="comment">///&lt; Включить GPIO трассировку</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">/** TRACE_CONFIG</span></div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="comment"> * @}</span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="comment"> */</span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment"></span> </div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment">/** </span></div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="comment"> * @addtogroup LIBS_CONFIG Libraries configs</span></div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="comment"> * @ingroup MYLIBS_CONFIG</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="comment"> * @brief Включенные трекеры и трассировки в МЗКТЭ</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="comment"> * @{</span></div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="comment"> */</span></div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"><a class="line" href="group___l_i_b_s___c_o_n_f_i_g.html#gaf4ddb2a71ec0d05c2480e197cd17c0be"> 69</a></span><span class="preprocessor">#define INCLUDE_BIT_ACCESS_LIB </span><span class="comment">///&lt; Подключить библиотеку с typedef с битовыми полями</span></div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"><a class="line" href="group___l_i_b_s___c_o_n_f_i_g.html#ga4403055986b70bb02b8d37073a122e32"> 70</a></span><span class="preprocessor">#define INCLUDE_TRACKERS_LIB </span><span class="comment">///&lt; Подключить библиотеку с трекерами</span></div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"><a class="line" href="group___l_i_b_s___c_o_n_f_i_g.html#ga0a3ca94b616997069dd53e2c6c2687d7"> 71</a></span><span class="preprocessor">#define INCLUDE_TRACE_LIB </span><span class="comment">///&lt; Подключить библиотеку с трейсами</span></div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="group___l_i_b_s___c_o_n_f_i_g.html#ga181a46326e46b60afb160190832c7281"> 72</a></span><span class="preprocessor">#define INCLUDE_GENERAL_PERIPH_LIBS </span><span class="comment">///&lt; Подключить библиотеку с периферией</span></div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="comment">//#define FREERTOS_DELAY ///&lt; Использовать FreeRTOS задержку, вместо HAL</span></div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="comment"></span> </div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="comment">/** LIBS_CONFIG</span></div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span><span class="comment"> * @}</span></div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="comment"> */</span></div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="comment"></span> </div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="comment">/** MYLIBS_CONFIG</span></div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="comment"> * @}</span></div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="comment"> */</span></div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="preprocessor">#endif </span><span class="comment">//__MYLIBS_CONFIG_H_</span></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_9e11e9a41112194af3eee6cc728f9515.html">MyLibsGeneral</a></li><li class="navelem"><a href="dir_eb423fea8a9c4b9b32b922020ec391e1.html">Inc</a></li><li class="navelem"><a href="mylibs__config_8h.html">mylibs_config.h</a></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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,168 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Inc/mylibs_defs.h File Reference</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('mylibs__defs_8h.html','',''); });
</script>
<div id="container">
<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">mylibs_defs.h File Reference</div></div>
</div><!--header-->
<div class="contents">
<p>Заголочный файл для дефайнов библиотеки MyLibsGeneral.
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &quot;<a class="el" href="mylibs__config_8h_source.html">mylibs_config.h</a>&quot;</code><br />
</div>
<p><a href="mylibs__defs_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-define-members" class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:gae110df81afd885a390bbeb152d7b709f" id="r_gae110df81afd885a390bbeb152d7b709f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" 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>(params)</td></tr>
<tr class="memdesc:gae110df81afd885a390bbeb152d7b709f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Error_Handler который будет вызыватся в библиотеке <br /></td></tr>
<tr class="memitem:ga0b75f0bcf066acdf797b8e6730c52f86" id="r_ga0b75f0bcf066acdf797b8e6730c52f86"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga0b75f0bcf066acdf797b8e6730c52f86">check_null_ptr_1</a>(_p1_)</td></tr>
<tr class="memdesc:ga0b75f0bcf066acdf797b8e6730c52f86"><td class="mdescLeft">&#160;</td><td class="mdescRight">Проверить указатель на NULL. <br /></td></tr>
<tr class="memitem:gae7d1cbb9075ee4b830342fd564d96be0" id="r_gae7d1cbb9075ee4b830342fd564d96be0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gae7d1cbb9075ee4b830342fd564d96be0">check_null_ptr_2</a>(_p1_, _p2_)</td></tr>
<tr class="memdesc:gae7d1cbb9075ee4b830342fd564d96be0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Проверить два указателя на NULL. <br /></td></tr>
<tr class="memitem:ga002f4a5f5d8bb37d88f607386bc6ba2e" id="r_ga002f4a5f5d8bb37d88f607386bc6ba2e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga002f4a5f5d8bb37d88f607386bc6ba2e">check_null_ptr_3</a>(_p1_, _p2_, _p3_)</td></tr>
<tr class="memdesc:ga002f4a5f5d8bb37d88f607386bc6ba2e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Проверить три указателя на NULL. <br /></td></tr>
<tr class="memitem:gade91c09d89a5f69003dcfe506ed0327f" id="r_gade91c09d89a5f69003dcfe506ed0327f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gade91c09d89a5f69003dcfe506ed0327f">check_null_ptr_4</a>(_p1_, _p2_, _p3_, _p4_)</td></tr>
<tr class="memdesc:gade91c09d89a5f69003dcfe506ed0327f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Проверить четыре указателя на NULL. <br /></td></tr>
<tr class="memitem:ga944edcd2c65519578d36730b94701f64" id="r_ga944edcd2c65519578d36730b94701f64"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga944edcd2c65519578d36730b94701f64">check_null_ptr_5</a>(_p1_, _p2_, _p3_, _p4_, _p5_)</td></tr>
<tr class="memdesc:ga944edcd2c65519578d36730b94701f64"><td class="mdescLeft">&#160;</td><td class="mdescRight">Проверить пять указателей на NULL. <br /></td></tr>
<tr class="memitem:gabeb97579daeb622c6651ed03c4a27479" id="r_gabeb97579daeb622c6651ed03c4a27479"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gabeb97579daeb622c6651ed03c4a27479">msDelay</a>(_ms_)</td></tr>
<tr class="memdesc:gabeb97579daeb622c6651ed03c4a27479"><td class="mdescLeft">&#160;</td><td class="mdescRight">Задержка на указанное количество миллисекунд. <br /></td></tr>
<tr class="memitem:ga8a5051b1292d1019fe8dd3fc5521ab25" id="r_ga8a5051b1292d1019fe8dd3fc5521ab25"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga8a5051b1292d1019fe8dd3fc5521ab25">msDelayStart</a>(_pvar_)</td></tr>
<tr class="memdesc:ga8a5051b1292d1019fe8dd3fc5521ab25"><td class="mdescLeft">&#160;</td><td class="mdescRight">Начать отсчет задержки. <br /></td></tr>
<tr class="memitem:ga0b97e172659a59ee4fa56f851643ae85" id="r_ga0b97e172659a59ee4fa56f851643ae85"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga0b97e172659a59ee4fa56f851643ae85">msDelayWhileActive</a>(_ms_, _pvar_)</td></tr>
<tr class="memdesc:ga0b97e172659a59ee4fa56f851643ae85"><td class="mdescLeft">&#160;</td><td class="mdescRight">Проверяет, активна ли задержка. <br /></td></tr>
<tr class="memitem:gaed082c07b9fc4d1894330d885b9b5518" id="r_gaed082c07b9fc4d1894330d885b9b5518"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gaed082c07b9fc4d1894330d885b9b5518">msDelayWaitDone</a>(_ms_, _pvar_)</td></tr>
<tr class="memdesc:gaed082c07b9fc4d1894330d885b9b5518"><td class="mdescLeft">&#160;</td><td class="mdescRight">Проверяет, завершилась ли задержка. <br /></td></tr>
<tr class="memitem:gaf5e598848326d48e86167e5099a029be" id="r_gaf5e598848326d48e86167e5099a029be"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___u_t_i_l_s___d_e_f_i_n_e_s.html#gaf5e598848326d48e86167e5099a029be">ClearStruct</a>(_struct_)</td></tr>
<tr class="memdesc:gaf5e598848326d48e86167e5099a029be"><td class="mdescLeft">&#160;</td><td class="mdescRight">Обнуление структуры. <br /></td></tr>
<tr class="memitem:gabf45f2b60eedf80cf9d1dbe4302a741e" id="r_gabf45f2b60eedf80cf9d1dbe4302a741e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___u_t_i_l_s___d_e_f_i_n_e_s.html#gabf45f2b60eedf80cf9d1dbe4302a741e">Divide_Up</a>(_val_, _div_)</td></tr>
<tr class="memdesc:gabf45f2b60eedf80cf9d1dbe4302a741e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Деление с округлением вверх <br /></td></tr>
<tr class="memitem:ga0f22e895ac7781c3d1b68fee182c4291" id="r_ga0f22e895ac7781c3d1b68fee182c4291"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga0f22e895ac7781c3d1b68fee182c4291">ByteSwap16</a>(v)</td></tr>
<tr class="memdesc:ga0f22e895ac7781c3d1b68fee182c4291"><td class="mdescLeft">&#160;</td><td class="mdescRight">Swap between Little Endian and Big Endian. <br /></td></tr>
<tr class="memitem:ga996f7be338ccb40d1a2a5abc1ad61759" id="r_ga996f7be338ccb40d1a2a5abc1ad61759"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga996f7be338ccb40d1a2a5abc1ad61759">ABS</a>(x)</td></tr>
<tr class="memdesc:ga996f7be338ccb40d1a2a5abc1ad61759"><td class="mdescLeft">&#160;</td><td class="mdescRight">Абсолютное значение числа <br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga1730ffe1e560465665eb47d9264826f9" id="r_ga1730ffe1e560465665eb47d9264826f9"><td class="memItemLeft" align="right" valign="top">
void&#160;</td><td class="memItemRight" valign="bottom"><b>Error_Handler</b> (void)</td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Заголочный файл для дефайнов библиотеки MyLibsGeneral. </p>
<p class="definition">Definition in file <a class="el" href="mylibs__defs_8h_source.html">mylibs_defs.h</a>.</p>
</div></div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_9e11e9a41112194af3eee6cc728f9515.html">MyLibsGeneral</a></li><li class="navelem"><a href="dir_eb423fea8a9c4b9b32b922020ec391e1.html">Inc</a></li><li class="navelem"><a href="mylibs__defs_8h.html">mylibs_defs.h</a></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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,17 @@
var mylibs__defs_8h =
[
[ "MyLibs_Error_Handler", "group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gae110df81afd885a390bbeb152d7b709f", null ],
[ "check_null_ptr_1", "group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga0b75f0bcf066acdf797b8e6730c52f86", null ],
[ "check_null_ptr_2", "group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gae7d1cbb9075ee4b830342fd564d96be0", null ],
[ "check_null_ptr_3", "group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga002f4a5f5d8bb37d88f607386bc6ba2e", null ],
[ "check_null_ptr_4", "group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gade91c09d89a5f69003dcfe506ed0327f", null ],
[ "check_null_ptr_5", "group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga944edcd2c65519578d36730b94701f64", null ],
[ "msDelay", "group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gabeb97579daeb622c6651ed03c4a27479", null ],
[ "msDelayStart", "group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga8a5051b1292d1019fe8dd3fc5521ab25", null ],
[ "msDelayWhileActive", "group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga0b97e172659a59ee4fa56f851643ae85", null ],
[ "msDelayWaitDone", "group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gaed082c07b9fc4d1894330d885b9b5518", null ],
[ "ClearStruct", "group___u_t_i_l_s___d_e_f_i_n_e_s.html#gaf5e598848326d48e86167e5099a029be", null ],
[ "Divide_Up", "group___u_t_i_l_s___d_e_f_i_n_e_s.html#gabf45f2b60eedf80cf9d1dbe4302a741e", null ],
[ "ByteSwap16", "group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga0f22e895ac7781c3d1b68fee182c4291", null ],
[ "ABS", "group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga996f7be338ccb40d1a2a5abc1ad61759", null ]
];

View File

@ -0,0 +1,298 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Inc/mylibs_defs.h 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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('mylibs__defs_8h_source.html','',''); });
</script>
<div id="container">
<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">mylibs_defs.h</div></div>
</div><!--header-->
<div class="contents">
<a href="mylibs__defs_8h.html">Go to the documentation of this file.</a><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 mylibs_defs.h</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">* @brief Заголочный файл для дефайнов библиотеки MyLibsGeneral.</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">* @defgroup MYLIBS_DEFINES General Defines</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">* @ingroup MYLIBS_ALL</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment">* @brief Общие макросы и typedef&#39;ы, используемые по всему проекту</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">*</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="preprocessor">#ifndef __MYLIBS_DEFINES_H_</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#define __MYLIBS_DEFINES_H_</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#include &quot;<a class="code" href="mylibs__config_8h.html">mylibs_config.h</a>&quot;</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</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">******************************ERROR_HANDLER********************************/</span><span class="comment"></span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment">/** </span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment"> * @addtogroup ERROR_HANDLER_DEFINES Error Handler defines</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment"> * @ingroup MYLIBS_DEFINES</span></div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment"> * @brief Дефайны для обработки ошибок</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</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> </div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="comment">/* extern Error_Handler from main.h */</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="keyword">extern</span> <span class="keywordtype">void</span> Error_Handler(<span class="keywordtype">void</span>);</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment"></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><span class="comment"> * @brief Error_Handler который будет вызыватся в библиотеке</span></div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment"> */</span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gae110df81afd885a390bbeb152d7b709f"> 31</a></span><span class="preprocessor">#define MyLibs_Error_Handler(params) Error_Handler(params)</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment">/* If error handler not defined - set void */</span></div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="preprocessor">#ifndef MyLibs_Error_Handler</span></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="preprocessor">#define MyLibs_Error_Handler(...)</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="preprocessor">#endif </span><span class="comment">// MyLibs_Error_Handler</span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment"></span> </div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="comment">/** @brief Проверить указатель на NULL */</span></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga0b75f0bcf066acdf797b8e6730c52f86"> 38</a></span><span class="preprocessor">#define check_null_ptr_1(_p1_) (_p1_ == NULL)</span><span class="comment"></span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment">/** @brief Проверить два указателя на NULL */</span><span class="preprocessor"></span></div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gae7d1cbb9075ee4b830342fd564d96be0"> 40</a></span><span class="preprocessor">#define check_null_ptr_2(_p1_, _p2_) ((_p1_ == NULL) || (_p2_ == NULL))</span><span class="comment"></span></div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="comment">/** @brief Проверить три указателя на NULL */</span><span class="preprocessor"></span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga002f4a5f5d8bb37d88f607386bc6ba2e"> 42</a></span><span class="preprocessor">#define check_null_ptr_3(_p1_, _p2_, _p3_) ((_p1_ == NULL) || (_p2_ == NULL) || (_p3_ == NULL))</span><span class="comment"></span></div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="comment">/** @brief Проверить четыре указателя на NULL */</span><span class="preprocessor"></span></div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gade91c09d89a5f69003dcfe506ed0327f"> 44</a></span><span class="preprocessor">#define check_null_ptr_4(_p1_, _p2_, _p3_, _p4_) ((_p1_ == NULL) || (_p2_ == NULL) || (_p3_ == NULL) || (_p4_ == NULL))</span><span class="comment"></span></div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="comment">/** @brief Проверить пять указателей на NULL */</span><span class="preprocessor"></span></div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga944edcd2c65519578d36730b94701f64"> 46</a></span><span class="preprocessor">#define check_null_ptr_5(_p1_, _p2_, _p3_, _p4_, _p5_) ((_p1_ == NULL) || (_p2_ == NULL) || (_p3_ == NULL) || (_p4_ == NULL) || (_p5_ == NULL))</span></div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="comment"></span> </div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="comment">/** ERROR_HANDLER_DEFINES</span></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment"> * @}</span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment"> */</span></div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </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><span class="comment">/***************************************************************************</span></div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="comment">********************************ACCESS_DEFINES*****************************/</span></div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="comment">/***************************************************************************</span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="comment">******************************DELAYS_DEFINES*******************************/</span><span class="comment"></span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="comment">/** </span></div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="comment"> * @addtogroup DELAYS_DEFINES Delays defines</span></div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment"> * @ingroup MYLIBS_DEFINES</span></div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment"> * @brief Макросы и определения для работы с задержками в миллисекундах.</span></div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="comment"> * @details</span></div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="comment"> * Этот блок содержит макросы для реализации задержек с использованием HAL или FreeRTOS:</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="comment"> * - @ref msDelay — простая задержка заданной длительности;</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="comment"> * - @ref msDelayStart — сохранение текущего времени начала задержки;</span></div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="comment"> * - @ref msDelayWhileActive — проверка, активна ли задержка;</span></div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="comment"> * - @ref msDelayWaitDone — проверка, завершена ли задержка.</span></div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="comment"> * Эти макросы удобны для реализации неблокирующих задержек.</span></div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="comment"> * @{</span></div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="comment"> */</span></div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="comment"></span> </div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="comment">/** </span></div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="comment"> * @def msDelay(_ms_)</span></div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="comment"> * @brief Задержка на указанное количество миллисекунд.</span></div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span><span class="comment"> * @param _ms_ Время задержки в миллисекундах.</span></div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="comment"> * @note Использует HAL_Delay или osDelay в зависимости от @ref FREERTOS_DELAY.</span></div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="comment"> */</span></div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="preprocessor">#ifdef FREERTOS_DELAY</span></div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="preprocessor"> #define msDelay(_ms_) osDelay(_ms_)</span></div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"><a class="line" href="group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gabeb97579daeb622c6651ed03c4a27479"> 82</a></span><span class="preprocessor"> #define msDelay(_ms_) HAL_Delay(_ms_)</span></div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> </div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="comment"></span> </div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="comment">/**</span></div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="comment"> * @brief Начать отсчет задержки.</span></div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="comment"> * @param _pvar_ Указатель на переменную типа uint32_t для хранения времени старта.</span></div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="comment"> * @details После вызова этого макроса переменная _pvar_ содержит текущее количество миллисекунд</span></div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span><span class="comment"> * с момента запуска системы (HAL_GetTick). </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"> * Используется для реализации неблокирующих задержек.</span></div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="comment"> */</span></div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"><a class="line" href="group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga8a5051b1292d1019fe8dd3fc5521ab25"> 94</a></span><span class="preprocessor">#define msDelayStart(_pvar_) *(_pvar_) = HAL_GetTick()</span></div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="comment"></span> </div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="comment">/**</span></div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="comment"> * @brief Проверяет, активна ли задержка.</span></div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span><span class="comment"> * @param _ms_ Длительность задержки в миллисекундах.</span></div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="comment"> * @param _pvar_ Указатель на переменную, в которой сохранено время начала (@ref msDelayStart).</span></div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="comment"> * @retval 1 Задержка еще активна.</span></div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="comment"> * @retval 0 Задержка завершена.</span></div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span><span class="comment"> * @details</span></div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="comment"> * Возвращает true, пока время задержки не истекло. Используется в проверках,</span></div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="comment"> * когда нужно **действовать, пока задержка выполняется**. Пример:</span></div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span><span class="comment"> * @code</span></div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span><span class="comment"> * while(msDelayWhileActive(1000, &amp;tick)) {</span></div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span><span class="comment"> * // выполняем другие задачи, задержка не блокирует поток</span></div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span><span class="comment"> * }</span></div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="comment"> * @endcode</span></div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="comment"> */</span></div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"><a class="line" href="group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga0b97e172659a59ee4fa56f851643ae85"> 111</a></span><span class="preprocessor">#define msDelayWhileActive(_ms_, _pvar_) (HAL_GetTick() - *(_pvar_) &lt; _ms_)</span></div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span><span class="comment"></span> </div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="comment">/**</span></div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span><span class="comment"> * @brief Проверяет, завершилась ли задержка.</span></div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="comment"> * @param _ms_ Длительность задержки в миллисекундах.</span></div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span><span class="comment"> * @param _pvar_ Указатель на переменную, в которой сохранено время начала (msDelayStart).</span></div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span><span class="comment"> * @retval 1 Задержка завершена.</span></div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span><span class="comment"> * @retval 0 Задержка еще активна.</span></div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span><span class="comment"> * @details</span></div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span><span class="comment"> * Возвращает true, когда задержка уже завершена. Используется в проверках,</span></div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="comment"> * когда нужно **выполнить действие только после окончания задержки**. Пример:</span></div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="comment"> * @code</span></div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="comment"> * if(msDelayWaitDone(1000, &amp;tick)) {</span></div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span><span class="comment"> * // выполняем действие после завершения задержки</span></div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span><span class="comment"> * }</span></div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span><span class="comment"> * @endcode</span></div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span><span class="comment"> */</span></div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"><a class="line" href="group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gaed082c07b9fc4d1894330d885b9b5518"> 128</a></span><span class="preprocessor">#define msDelayWaitDone(_ms_, _pvar_) (HAL_GetTick() - *(_pvar_) &gt;= _ms_)</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">/** DELAYS_DEFINES</span></div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span><span class="comment"> * @}</span></div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span><span class="comment"> */</span></div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> </div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> </div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span><span class="comment">/***************************************************************************</span></div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span><span class="comment">*******************************MATH_DEFINES********************************/</span><span class="comment"></span></div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span><span class="comment">/** </span></div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span><span class="comment"> * @addtogroup UTILS_DEFINES Utils defines</span></div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span><span class="comment"> * @ingroup MYLIBS_DEFINES</span></div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span><span class="comment"> * @brief Общие вспомогательные макросы</span></div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span><span class="comment"> * @{</span></div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span><span class="comment"> */</span></div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span><span class="comment"></span> </div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span><span class="comment">/**</span></div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="comment"> * @brief Обнуление структуры.</span></div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span><span class="comment"> * @param _struct_ Структура, которую нужно обнулить.</span></div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span><span class="comment"> * @details Макрос использует memset для обнуления всей памяти структуры.</span></div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span><span class="comment"> * Используется для быстрой и безопасной инициализации переменных структур до нуля.</span></div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span><span class="comment"> */</span></div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"><a class="line" href="group___u_t_i_l_s___d_e_f_i_n_e_s.html#gaf5e598848326d48e86167e5099a029be"> 150</a></span><span class="preprocessor">#define ClearStruct(_struct_) memset(&amp;(_struct_), 0, sizeof(_struct_))</span></div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span><span class="comment"></span> </div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span><span class="comment">/**</span></div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span><span class="comment"> * @brief Деление с округлением вверх</span></div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span><span class="comment"> * @param _val_ Делимое.</span></div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span><span class="comment"> * @param _div_ Делитель.</span></div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span><span class="comment"> * @return Результат деления, округленный вверх.</span></div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span><span class="comment"> * @details Если результат деления без остатка: он возвращается как есть</span></div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span><span class="comment"> Если с остатком - округляется вверх</span></div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span><span class="comment"> */</span></div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span><span class="comment">//#define Divide_Up(_val_, _div_) (((_val_)%(_div_))? (_val_)/(_div_)+1 : (_val_)/_div_) /* через тернарный оператор */</span></div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"><a class="line" href="group___u_t_i_l_s___d_e_f_i_n_e_s.html#gabf45f2b60eedf80cf9d1dbe4302a741e"> 161</a></span><span class="preprocessor">#define Divide_Up(_val_, _div_) ((_val_ - 1) / _div_) + 1 </span><span class="comment">/* через мат выражение */</span><span class="preprocessor"> </span></div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span><span class="comment"></span> </div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span><span class="comment">/** </span></div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span><span class="comment"> * @brief Swap between Little Endian and Big Endian</span></div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span><span class="comment"> * @param v Исходное 16-битное значение.</span></div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span><span class="comment"> * @return Результат с поменяными местами старшим и младшим байтом.</span></div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span><span class="comment"> * @details Переключения между двумя типами хранения слова: HI-LO байты и LO-HI байты.</span></div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span><span class="comment"> */</span></div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"><a class="line" href="group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga0f22e895ac7781c3d1b68fee182c4291"> 169</a></span><span class="preprocessor">#define ByteSwap16(v) (((v&amp;0xFF00) &gt;&gt; (8)) | ((v&amp;0x00FF) &lt;&lt; (8)))</span></div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span><span class="comment"></span> </div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span><span class="comment">/** </span></div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span><span class="comment"> * @brief Абсолютное значение числа</span></div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span><span class="comment"> * @param x Число.</span></div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span><span class="comment"> * @return Абсолютное значение числа x.</span></div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span><span class="comment"> * @details Берет число по модулю. Хз как работает библиотечный abs в stdlib.h, мб это быстрее, но вряд ли конечно.</span></div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span><span class="comment"> */</span></div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"><a class="line" href="group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga996f7be338ccb40d1a2a5abc1ad61759"> 177</a></span><span class="preprocessor">#define ABS(x) ( ((x) &gt; 0)? (x) : -(x))</span></div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span><span class="comment"></span> </div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span><span class="comment">/** UTILS_DEFINES</span></div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span><span class="comment"> * @}</span></div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span><span class="comment"> */</span></div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> </div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span><span class="preprocessor">#endif </span><span class="comment">//__MYLIBS_DEFINES_H_</span></div>
<div class="ttc" id="amylibs__config_8h_html"><div class="ttname"><a href="mylibs__config_8h.html">mylibs_config.h</a></div><div class="ttdoc">Конфигурации для библиотек MyLibs.</div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_9e11e9a41112194af3eee6cc728f9515.html">MyLibsGeneral</a></li><li class="navelem"><a href="dir_eb423fea8a9c4b9b32b922020ec391e1.html">Inc</a></li><li class="navelem"><a href="mylibs__defs_8h.html">mylibs_defs.h</a></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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,166 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Inc/mylibs_include.h File Reference</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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('mylibs__include_8h.html','',''); });
</script>
<div id="container">
<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">mylibs_include.h File Reference</div></div>
</div><!--header-->
<div class="contents">
<p>Заголочный файл для всех библиотек
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &quot;<a class="el" href="mylibs__defs_8h_source.html">mylibs_defs.h</a>&quot;</code><br />
<code>#include &quot;bit_access.h&quot;</code><br />
<code>#include &quot;<a class="el" href="trackers_8h_source.html">trackers.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="trace_8h_source.html">trace.h</a>&quot;</code><br />
<code>#include &quot;general_flash.h&quot;</code><br />
<code>#include &quot;<a class="el" href="general__gpio_8h_source.html">general_gpio.h</a>&quot;</code><br />
<code>#include &quot;stdlib.h&quot;</code><br />
<code>#include &quot;string.h&quot;</code><br />
<code>#include &quot;stdio.h&quot;</code><br />
<code>#include &quot;math.h&quot;</code><br />
<code>#include &quot;main.h&quot;</code><br />
<code>#include &quot;modbus_data.h&quot;</code><br />
</div>
<p><a href="mylibs__include_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-nested-classes" class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:MeasureHandle_5FTrackerTypeDef" id="r_MeasureHandle_5FTrackerTypeDef"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_measure_handle___tracker_type_def.html">MeasureHandle_TrackerTypeDef</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Struct for trackers for Measure. <a href="struct_measure_handle___tracker_type_def.html#details">More...</a><br /></td></tr>
<tr class="memitem:Measure_5FTrackerTypeDef" id="r_Measure_5FTrackerTypeDef"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_measure___tracker_type_def.html">Measure_TrackerTypeDef</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Struct for trackers for Measure. <a href="struct_measure___tracker_type_def.html#details">More...</a><br /></td></tr>
<tr class="memitem:RS_5FTrackerTypeDef" id="r_RS_5FTrackerTypeDef"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_r_s___tracker_type_def.html">RS_TrackerTypeDef</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Struct for trackers for RS. <a href="struct_r_s___tracker_type_def.html#details">More...</a><br /></td></tr>
<tr class="memitem:ADC_5FTrackerTypeDef" id="r_ADC_5FTrackerTypeDef"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_a_d_c___tracker_type_def.html">ADC_TrackerTypeDef</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Struct for trackers for ADC. <a href="struct_a_d_c___tracker_type_def.html#details">More...</a><br /></td></tr>
<tr class="memitem:ADCChannel_5FTrackerTypeDef" id="r_ADCChannel_5FTrackerTypeDef"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_a_d_c_channel___tracker_type_def.html">ADCChannel_TrackerTypeDef</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Struct for trackers for ADC Channel. <a href="struct_a_d_c_channel___tracker_type_def.html#details">More...</a><br /></td></tr>
<tr class="memitem:MZKT_5FLEDsTypeDef" id="r_MZKT_5FLEDsTypeDef"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_m_z_k_t___l_e_ds_type_def.html">MZKT_LEDsTypeDef</a></td></tr>
<tr class="memitem:MZKT_5FDiscreteInputsTypeDef" id="r_MZKT_5FDiscreteInputsTypeDef"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_m_z_k_t___discrete_inputs_type_def.html">MZKT_DiscreteInputsTypeDef</a></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-var-members" class="groupheader"><a id="var-members" name="var-members"></a>
Variables</h2></td></tr>
<tr class="memitem:a44df41881b74d044d697d9a52a168440" id="r_a44df41881b74d044d697d9a52a168440"><td class="memItemLeft" align="right" valign="top"><a id="a44df41881b74d044d697d9a52a168440" name="a44df41881b74d044d697d9a52a168440"></a>
<a class="el" href="struct_m_z_k_t___l_e_ds_type_def.html">MZKT_LEDsTypeDef</a>&#160;</td><td class="memItemRight" valign="bottom"><b>MZKT_LEDS</b></td></tr>
<tr class="memitem:a7572d18e2cd9131cf37897838e57ce14" id="r_a7572d18e2cd9131cf37897838e57ce14"><td class="memItemLeft" align="right" valign="top"><a id="a7572d18e2cd9131cf37897838e57ce14" name="a7572d18e2cd9131cf37897838e57ce14"></a>
<a class="el" href="struct_m_z_k_t___discrete_inputs_type_def.html">MZKT_DiscreteInputsTypeDef</a>&#160;</td><td class="memItemRight" valign="bottom"><b>MZKT_DISCIN</b></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Заголочный файл для всех библиотек </p>
<p>Здесь нужно собрать библиотеки и дефайны, которые должны быть видны во всем проекте, чтобы не подключать 100 инклюдов в каждом ".c" файле </p>
<p class="definition">Definition in file <a class="el" href="mylibs__include_8h_source.html">mylibs_include.h</a>.</p>
</div></div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_9e11e9a41112194af3eee6cc728f9515.html">MyLibsGeneral</a></li><li class="navelem"><a href="dir_eb423fea8a9c4b9b32b922020ec391e1.html">Inc</a></li><li class="navelem"><a href="mylibs__include_8h.html">mylibs_include.h</a></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.14.0 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,10 @@
var mylibs__include_8h =
[
[ "MeasureHandle_TrackerTypeDef", "struct_measure_handle___tracker_type_def.html", null ],
[ "Measure_TrackerTypeDef", "struct_measure___tracker_type_def.html", null ],
[ "RS_TrackerTypeDef", "struct_r_s___tracker_type_def.html", null ],
[ "ADC_TrackerTypeDef", "struct_a_d_c___tracker_type_def.html", null ],
[ "ADCChannel_TrackerTypeDef", "struct_a_d_c_channel___tracker_type_def.html", null ],
[ "MZKT_LEDsTypeDef", "struct_m_z_k_t___l_e_ds_type_def.html", null ],
[ "MZKT_DiscreteInputsTypeDef", "struct_m_z_k_t___discrete_inputs_type_def.html", null ]
];

View File

@ -0,0 +1,245 @@
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MyLibs: E:/.WORK/STM32/STM32_ExtendedLibs/MyLibsGeneral/Inc/mylibs_include.h 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="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.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</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">
$(function(){initNavTree('mylibs__include_8h_source.html','',''); });
</script>
<div id="container">
<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">mylibs_include.h</div></div>
</div><!--header-->
<div class="contents">
<a href="mylibs__include_8h.html">Go to the documentation of this file.</a><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 mylibs_include.h</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">* @brief Заголочный файл для всех библиотек</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">чтобы не подключать 100 инклюдов в каждом &quot;.c&quot; файле</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">**************************************************************************</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment">* @defgroup MYLIBS_ALL My Libs</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment">* @brief Все используемые MyLibs библиотеки</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"></span> </div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment">* @defgroup MYLIBS_PERIPHERAL Peripheral</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">* @ingroup MYLIBS_ALL</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment">* @brief Модули для управления периферией</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">#ifndef __MYLIBS_INCLUDE_H_</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#define __MYLIBS_INCLUDE_H_</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="preprocessor">#include &quot;<a class="code" href="mylibs__defs_8h.html">mylibs_defs.h</a>&quot;</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#ifdef ARM_MATH_CM4</span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor"> #include &quot;arm_math.h&quot;</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="preprocessor">#ifdef INCLUDE_BIT_ACCESS_LIB</span></div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="preprocessor">#include &quot;bit_access.h&quot;</span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="preprocessor">#ifdef INCLUDE_TRACKERS_LIB</span></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="preprocessor">#include &quot;<a class="code" href="trackers_8h.html">trackers.h</a>&quot;</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="preprocessor">#ifdef INCLUDE_TRACE_LIB</span></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="preprocessor">#include &quot;<a class="code" href="trace_8h.html">trace.h</a>&quot;</span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> </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><span class="preprocessor">#ifdef INCLUDE_GENERAL_PERIPH_LIBS</span></div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="preprocessor">#include &quot;general_flash.h&quot;</span></div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</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="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="preprocessor">#ifdef HAL_SPI_MODULE_ENABLED</span></div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="preprocessor">#include &quot;general_spi.h&quot;</span></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="preprocessor">#ifdef HAL_UART_MODULE_ENABLED</span></div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="preprocessor">#include &quot;general_uart.h&quot;</span></div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="preprocessor">#ifdef HAL_TIM_MODULE_ENABLED</span></div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="preprocessor">#include &quot;general_tim.h&quot;</span></div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="preprocessor">#endif </span><span class="comment">//INCLUDE_GENERAL_PERIPH_LIBS</span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment"></span> </div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment">/////////////////////////---USER SETTINGS---/////////////////////////</span></div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="comment">// user includes</span></div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="preprocessor">#include &quot;stdlib.h&quot;</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="preprocessor">#include &quot;string.h&quot;</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="preprocessor">#include &quot;stdio.h&quot;</span></div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="preprocessor">#include &quot;math.h&quot;</span></div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="preprocessor">#include &quot;main.h&quot;</span></div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="preprocessor">#include &quot;modbus_data.h&quot;</span></div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="comment"></span> </div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="comment">/** @brief Struct for trackers for Measure */</span></div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"><a class="line" href="struct_measure_handle___tracker_type_def.html"> 73</a></span><span class="keyword">typedef</span> <a class="code hl_define" href="group___t_r_a_c_k_e_r_s.html#ga50ccb119acf302969b7fdcb58f2130e4">TrackerTypeDef</a>(MEASURE_HANDLE_USER_VARS_NUMB) <a class="code hl_struct" href="struct_measure_handle___tracker_type_def.html">MeasureHandle_TrackerTypeDef</a>;<span class="comment"></span></div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="comment">/** @brief Struct for trackers for Measure */</span></div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"><a class="line" href="struct_measure___tracker_type_def.html"> 75</a></span><span class="keyword">typedef</span> <a class="code hl_define" href="group___t_r_a_c_k_e_r_s.html#ga50ccb119acf302969b7fdcb58f2130e4">TrackerTypeDef</a>(MEASURE_USER_VARS_NUMB) <a class="code hl_struct" href="struct_measure___tracker_type_def.html">Measure_TrackerTypeDef</a>;<span class="comment"></span></div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span><span class="comment">/** @brief Struct for trackers for RS */</span></div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"><a class="line" href="struct_r_s___tracker_type_def.html"> 77</a></span><span class="keyword">typedef</span> <a class="code hl_define" href="group___t_r_a_c_k_e_r_s.html#ga50ccb119acf302969b7fdcb58f2130e4">TrackerTypeDef</a>(RS_USER_VARS_NUMB) <a class="code hl_struct" href="struct_r_s___tracker_type_def.html">RS_TrackerTypeDef</a>;<span class="comment"></span></div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="comment">/** @brief Struct for trackers for ADC */</span></div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"><a class="line" href="struct_a_d_c___tracker_type_def.html"> 79</a></span><span class="keyword">typedef</span> <a class="code hl_define" href="group___t_r_a_c_k_e_r_s.html#ga50ccb119acf302969b7fdcb58f2130e4">TrackerTypeDef</a>(ADC_USER_VARS_NUMB) <a class="code hl_struct" href="struct_a_d_c___tracker_type_def.html">ADC_TrackerTypeDef</a>;<span class="comment"></span></div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="comment">/** @brief Struct for trackers for ADC Channel */</span></div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"><a class="line" href="struct_a_d_c_channel___tracker_type_def.html"> 81</a></span><span class="keyword">typedef</span> <a class="code hl_define" href="group___t_r_a_c_k_e_r_s.html#ga50ccb119acf302969b7fdcb58f2130e4">TrackerTypeDef</a>(ADC_CH_USER_VARS_NUMB) <a class="code hl_struct" href="struct_a_d_c_channel___tracker_type_def.html">ADCChannel_TrackerTypeDef</a>;</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> </div>
<div class="foldopen" id="foldopen00084" data-start="{" data-end="};">
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"><a class="line" href="struct_m_z_k_t___l_e_ds_type_def.html"> 84</a></span><span class="keyword">typedef</span> <span class="keyword">struct</span></div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span>{</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="comment">/* Светодиоды, которые повторяют дискретные выходные сигналы */</span></div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <a class="code hl_struct" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> work;</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <a class="code hl_struct" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> warning;</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <a class="code hl_struct" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> error;</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</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> <a class="code hl_struct" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> connection;</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="comment">/* Отладочные светодиоды */</span></div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <a class="code hl_struct" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> green1;</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <a class="code hl_struct" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> green2;</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <a class="code hl_struct" href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a> red;</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span>}<a class="code hl_struct" href="struct_m_z_k_t___l_e_ds_type_def.html">MZKT_LEDsTypeDef</a>;</div>
</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="keyword">extern</span> <a class="code hl_struct" href="struct_m_z_k_t___l_e_ds_type_def.html">MZKT_LEDsTypeDef</a> MZKT_LEDS;</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div>
<div class="foldopen" id="foldopen00101" data-start="{" data-end="};">
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"><a class="line" href="struct_m_z_k_t___discrete_inputs_type_def.html"> 101</a></span><span class="keyword">typedef</span> <span class="keyword">struct</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> <a class="code hl_struct" href="struct_g_p_i_o___switch_type_def.html">GPIO_SwitchTypeDef</a> err_24V;</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <a class="code hl_struct" href="struct_g_p_i_o___switch_type_def.html">GPIO_SwitchTypeDef</a> err_5Vd;</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <a class="code hl_struct" href="struct_g_p_i_o___switch_type_def.html">GPIO_SwitchTypeDef</a> err_5Vsi;</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <a class="code hl_struct" href="struct_g_p_i_o___switch_type_def.html">GPIO_SwitchTypeDef</a> err_Va;</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span>}<a class="code hl_struct" href="struct_m_z_k_t___discrete_inputs_type_def.html">MZKT_DiscreteInputsTypeDef</a>;</div>
</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span><span class="keyword">extern</span> <a class="code hl_struct" href="struct_m_z_k_t___discrete_inputs_type_def.html">MZKT_DiscreteInputsTypeDef</a> MZKT_DISCIN;<span class="comment"></span></div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="comment">/////////////////////////---USER SETTINGS---/////////////////////////</span></div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> </div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span><span class="preprocessor">#endif </span><span class="comment">// __MYLIBS_INCLUDE_H_</span></div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</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___t_r_a_c_k_e_r_s_html_ga50ccb119acf302969b7fdcb58f2130e4"><div class="ttname"><a href="group___t_r_a_c_k_e_r_s.html#ga50ccb119acf302969b7fdcb58f2130e4">TrackerTypeDef</a></div><div class="ttdeci">#define TrackerTypeDef(num_user_vars)</div><div class="ttdoc">Структура для счетчиков отладки</div><div class="ttdef"><b>Definition</b> <a href="trackers_8h_source.html#l00068">trackers.h:68</a></div></div>
<div class="ttc" id="amylibs__defs_8h_html"><div class="ttname"><a href="mylibs__defs_8h.html">mylibs_defs.h</a></div><div class="ttdoc">Заголочный файл для дефайнов библиотеки MyLibsGeneral.</div></div>
<div class="ttc" id="astruct_a_d_c___tracker_type_def_html"><div class="ttname"><a href="struct_a_d_c___tracker_type_def.html">ADC_TrackerTypeDef</a></div><div class="ttdoc">Struct for trackers for ADC.</div><div class="ttdef"><b>Definition</b> <a href="#l00079">mylibs_include.h:79</a></div></div>
<div class="ttc" id="astruct_a_d_c_channel___tracker_type_def_html"><div class="ttname"><a href="struct_a_d_c_channel___tracker_type_def.html">ADCChannel_TrackerTypeDef</a></div><div class="ttdoc">Struct for trackers for ADC Channel.</div><div class="ttdef"><b>Definition</b> <a href="#l00081">mylibs_include.h:81</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___l_e_d_type_def_html"><div class="ttname"><a href="struct_g_p_i_o___l_e_d_type_def.html">GPIO_LEDTypeDef</a></div><div class="ttdoc">Структура светодиода</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8h_source.html#l00085">general_gpio.h:86</a></div></div>
<div class="ttc" id="astruct_g_p_i_o___switch_type_def_html"><div class="ttname"><a href="struct_g_p_i_o___switch_type_def.html">GPIO_SwitchTypeDef</a></div><div class="ttdoc">Структура кнопки</div><div class="ttdef"><b>Definition</b> <a href="general__gpio_8h_source.html#l00102">general_gpio.h:103</a></div></div>
<div class="ttc" id="astruct_m_z_k_t___discrete_inputs_type_def_html"><div class="ttname"><a href="struct_m_z_k_t___discrete_inputs_type_def.html">MZKT_DiscreteInputsTypeDef</a></div><div class="ttdef"><b>Definition</b> <a href="#l00101">mylibs_include.h:102</a></div></div>
<div class="ttc" id="astruct_m_z_k_t___l_e_ds_type_def_html"><div class="ttname"><a href="struct_m_z_k_t___l_e_ds_type_def.html">MZKT_LEDsTypeDef</a></div><div class="ttdef"><b>Definition</b> <a href="#l00084">mylibs_include.h:85</a></div></div>
<div class="ttc" id="astruct_measure___tracker_type_def_html"><div class="ttname"><a href="struct_measure___tracker_type_def.html">Measure_TrackerTypeDef</a></div><div class="ttdoc">Struct for trackers for Measure.</div><div class="ttdef"><b>Definition</b> <a href="#l00075">mylibs_include.h:75</a></div></div>
<div class="ttc" id="astruct_measure_handle___tracker_type_def_html"><div class="ttname"><a href="struct_measure_handle___tracker_type_def.html">MeasureHandle_TrackerTypeDef</a></div><div class="ttdoc">Struct for trackers for Measure.</div><div class="ttdef"><b>Definition</b> <a href="#l00073">mylibs_include.h:73</a></div></div>
<div class="ttc" id="astruct_r_s___tracker_type_def_html"><div class="ttname"><a href="struct_r_s___tracker_type_def.html">RS_TrackerTypeDef</a></div><div class="ttdoc">Struct for trackers for RS.</div><div class="ttdef"><b>Definition</b> <a href="#l00077">mylibs_include.h:77</a></div></div>
<div class="ttc" id="atrace_8h_html"><div class="ttname"><a href="trace_8h.html">trace.h</a></div><div class="ttdoc">Заголочный файл для работы с трассировкой.</div></div>
<div class="ttc" id="atrackers_8h_html"><div class="ttname"><a href="trackers_8h.html">trackers.h</a></div><div class="ttdoc">Заголочный файл для работы с трекерами Trackers defines.</div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_9e11e9a41112194af3eee6cc728f9515.html">MyLibsGeneral</a></li><li class="navelem"><a href="dir_eb423fea8a9c4b9b32b922020ec391e1.html">Inc</a></li><li class="navelem"><a href="mylibs__include_8h.html">mylibs_include.h</a></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.14.0 </li>
</ul>
</div>
</body>
</html>

327
Doc/html/navtree.css Normal file
View File

@ -0,0 +1,327 @@
#nav-tree .children_ul {
margin:0;
padding:4px;
}
#nav-tree ul {
list-style:none outside none;
margin:0px;
padding:0px;
}
#nav-tree li {
white-space:nowrap;
margin:0;
padding:0;
}
#nav-tree .plus {
margin:0px;
}
#nav-tree .selected {
position: relative;
background-color: var(--nav-menu-active-bg);
border-radius: 0 6px 6px 0;
/*margin-right: 5px;*/
}
#nav-tree img {
margin:0px;
padding:0px;
border:0px;
vertical-align: middle;
}
#nav-tree a {
text-decoration:none;
padding:0px;
margin:0px;
}
#nav-tree .label {
margin:0px;
padding:0px;
font: 12px var(--font-family-nav);
line-height: 22px;
}
#nav-tree .label a {
padding:2px;
}
#nav-tree .selected a {
text-decoration:none;
color:var(--page-link-color);
}
#nav-tree .children_ul {
margin:0px;
padding:0px;
}
#nav-tree .item {
margin: 0 6px 0 -5px;
padding: 0 0 0 5px;
height: 22px;
}
#nav-tree {
padding: 0px 0px;
font-size:14px;
overflow:auto;
}
#doc-content {
overflow:auto;
display:block;
padding:0px;
margin:0px;
-webkit-overflow-scrolling : touch; /* iOS 5+ */
}
#side-nav {
padding:0 6px 0 0;
margin: 0px;
display:block;
position: absolute;
left: 0px;
overflow : hidden;
}
.ui-resizable .ui-resizable-handle {
display:block;
}
.ui-resizable-e {
transition: opacity 0.5s ease;
background-color: var(--nav-splitbar-bg-color);
opacity:0;
cursor:col-resize;
height:100%;
right:0;
top:0;
width:6px;
position: relative;
}
.ui-resizable-e:after {
content: '';
display: block;
top: 50%;
left: 1px;
width: 2px;
height: 15px;
border-left: 1px solid var(--nav-splitbar-handle-color);
border-right: 1px solid var(--nav-splitbar-handle-color);
position: absolute;
}
.ui-resizable-e:hover {
opacity: 1;
}
.ui-resizable-handle {
display:none;
font-size:0.1px;
position:absolute;
z-index:1;
}
#nav-tree-contents {
margin: 6px 0px 0px 0px;
}
#nav-tree {
background-color: var(--nav-background-color);
-webkit-overflow-scrolling : touch; /* iOS 5+ */
scrollbar-width: thin;
border-right: 1px solid var(--nav-border-color);
padding-left: 5px;
}
#nav-sync {
position:absolute;
top:0px;
right:0px;
z-index:1;
}
#nav-sync img {
opacity:0.3;
}
div.nav-sync-icon {
position: relative;
width: 24px;
height: 17px;
left: -6px;
top: -1px;
opacity: 0.7;
display: inline-block;
background-color: var(--sync-icon-background-color);
border: 1px solid var(--sync-icon-border-color);
box-sizing: content-box;
}
div.nav-sync-icon:hover {
background-color: var(--sync-icon-selected-background-color);
opacity: 1.0;
}
div.nav-sync-icon.active:after {
content: '';
background-color: var(--sync-icon-background-color);
border-top: 2px solid var(--sync-icon-color);
position: absolute;
width: 16px;
height: 0px;
top: 7px;
left: 4px;
}
div.nav-sync-icon.active:hover:after {
border-top: 2px solid var(--sync-icon-selected-color);
}
span.sync-icon-left {
position: absolute;
padding: 0;
margin: 0;
top: 3px;
left: 4px;
display: inline-block;
width: 8px;
height: 8px;
border-left: 2px solid var(--sync-icon-color);
border-top: 2px solid var(--sync-icon-color);
transform: rotate(-45deg);
}
span.sync-icon-right {
position: absolute;
padding: 0;
margin: 0;
top: 3px;
left: 10px;
display: inline-block;
width: 8px;
height: 8px;
border-right: 2px solid var(--sync-icon-color);
border-bottom: 2px solid var(--sync-icon-color);
transform: rotate(-45deg);
}
div.nav-sync-icon:hover span.sync-icon-left {
border-left: 2px solid var(--sync-icon-selected-color);
border-top: 2px solid var(--sync-icon-selected-color);
}
div.nav-sync-icon:hover span.sync-icon-right {
border-right: 2px solid var(--sync-icon-selected-color);
border-bottom: 2px solid var(--sync-icon-selected-color);
}
#nav-path ul {
border-top: 1px solid var(--nav-breadcrumb-separator-color);
}
@media print
{
#nav-tree { display: none; }
div.ui-resizable-handle { display: none; position: relative; }
}
/*---------------------------*/
#container {
display: grid;
grid-template-columns: auto auto;
overflow: hidden;
}
#page-nav {
background: var(--nav-background-color);
display: block;
width: 250px;
box-sizing: content-box;
position: relative;
border-left: 1px solid var(--nav-border-color);
}
#page-nav-tree {
display: inline-block;
}
#page-nav-resize-handle {
transition: opacity 0.5s ease;
background-color: var(--nav-splitbar-bg-color);
opacity:0;
cursor:col-resize;
height:100%;
right:0;
top:0;
width:6px;
position: relative;
z-index: 1;
user-select: none;
}
#page-nav-resize-handle:after {
content: '';
display: block;
top: 50%;
left: 1px;
width: 2px;
height: 15px;
border-left: 1px solid var(--nav-splitbar-handle-color);
border-right: 1px solid var(--nav-splitbar-handle-color);
position: absolute;
}
#page-nav-resize-handle.dragging,
#page-nav-resize-handle:hover {
opacity: 1;
}
#page-nav-contents {
padding: 0;
margin: 0;
display: block;
top: 0;
left: 0;
height: 100%;
width: 100%;
position: absolute;
overflow: auto;
scrollbar-width: thin;
-webkit-overflow-scrolling : touch; /* iOS 5+ */
}
ul.page-outline,
ul.page-outline ul {
text-indent: 0;
list-style: none outside none;
padding: 0 0 0 4px;
}
ul.page-outline {
margin: 0 4px 4px 6px;
}
ul.page-outline div.item {
font: 12px var(--font-family-nav);
line-height: 22px;
}
ul.page-outline li {
white-space: nowrap;
}
ul.page-outline li.vis {
background-color: var(--nav-breadcrumb-active-bg);
}
#container.resizing {
cursor: col-resize;
user-select: none;
}

899
Doc/html/navtree.js Normal file
View File

@ -0,0 +1,899 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@licend The above is the entire license notice for the JavaScript code in this file
*/
function initNavTree(toroot,relpath,allMembersFile) {
let navTreeSubIndices = [];
const ARROW_DOWN = '<span class="arrowhead opened"></span>';
const ARROW_RIGHT = '<span class="arrowhead closed"></span>';
const NAVPATH_COOKIE_NAME = ''+'navpath';
const fullSidebar = typeof page_layout!=='undefined' && page_layout==1;
function getScrollBarWidth () {
let outer = $('<div>').css({visibility: 'hidden', width: 100, overflow: 'scroll', scrollbarWidth: 'thin'}).appendTo('body');
let widthWithScroll = $('<div>').css({width: '100%'}).appendTo(outer).outerWidth();
outer.remove();
return 100 - widthWithScroll;
}
const scrollbarWidth = getScrollBarWidth();
function adjustSyncIconPosition() {
if (!fullSidebar) {
const nt = document.getElementById("nav-tree");
const hasVerticalScrollbar = nt.scrollHeight > nt.clientHeight;
$("#nav-sync").css({right:parseInt(hasVerticalScrollbar?scrollbarWidth:0)});
}
}
const getData = function(varName) {
const i = varName.lastIndexOf('/');
const n = i>=0 ? varName.substring(i+1) : varName;
const e = n.replace(/-/g,'_');
return window[e];
}
const stripPath = function(uri) {
return uri.substring(uri.lastIndexOf('/')+1);
}
const stripPath2 = function(uri) {
const i = uri.lastIndexOf('/');
const s = uri.substring(i+1);
const m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/);
return m ? uri.substring(i-6) : s;
}
const hashValue = function() {
return $(location).attr('hash').substring(1).replace(/[^\w-]/g,'');
}
const hashUrl = function() {
return '#'+hashValue();
}
const pathName = function() {
return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;()]/g, '');
}
const storeLink = function(link) {
if (!$("#nav-sync").hasClass('sync')) {
Cookie.writeSetting(NAVPATH_COOKIE_NAME,link,0);
}
}
const deleteLink = function() {
Cookie.eraseSetting(NAVPATH_COOKIE_NAME);
}
const cachedLink = function() {
return Cookie.readSetting(NAVPATH_COOKIE_NAME,'');
}
const getScript = function(scriptName,func) {
const head = document.getElementsByTagName("head")[0];
const script = document.createElement('script');
script.id = scriptName;
script.type = 'text/javascript';
script.onload = function() { func(); adjustSyncIconPosition(); }
script.src = scriptName+'.js';
head.appendChild(script);
}
const createIndent = function(o,domNode,node) {
let level=-1;
let n = node;
while (n.parentNode) { level++; n=n.parentNode; }
if (node.childrenData) {
const imgNode = document.createElement("span");
imgNode.className = 'arrow';
imgNode.style.paddingLeft=(16*level).toString()+'px';
imgNode.innerHTML=ARROW_RIGHT;
node.plus_img = imgNode;
node.expandToggle = document.createElement("a");
node.expandToggle.href = "javascript:void(0)";
node.expandToggle.onclick = function() {
if (node.expanded) {
$(node.getChildrenUL()).slideUp("fast",adjustSyncIconPosition);
$(node.plus_img.childNodes[0]).removeClass('opened').addClass('closed');
node.expanded = false;
} else {
expandNode(o, node, false, true);
}
}
node.expandToggle.appendChild(imgNode);
domNode.appendChild(node.expandToggle);
} else {
let span = document.createElement("span");
span.className = 'arrow';
span.style.width = 16*(level+1)+'px';
span.innerHTML = '&#160;';
domNode.appendChild(span);
}
}
let animationInProgress = false;
const gotoAnchor = function(anchor,aname) {
let pos, docContent = $('#doc-content');
let ancParent = $(anchor.parent());
if (ancParent.hasClass('memItemLeft') || ancParent.hasClass('memtitle') ||
ancParent.hasClass('fieldname') || ancParent.hasClass('fieldtype') ||
ancParent.is(':header')) {
pos = ancParent.offset().top;
} else if (anchor.position()) {
pos = anchor.offset().top;
}
if (pos) {
const dcOffset = docContent.offset().top;
const dcHeight = docContent.height();
const dcScrHeight = docContent[0].scrollHeight
const dcScrTop = docContent.scrollTop();
let dist = Math.abs(Math.min(pos-dcOffset,dcScrHeight-dcHeight-dcScrTop));
animationInProgress = true;
docContent.animate({
scrollTop: pos + dcScrTop - dcOffset
},Math.max(50,Math.min(500,dist)),function() {
animationInProgress=false;
if (anchor.parent().attr('class')=='memItemLeft') {
let rows = $('.memberdecls tr[class$="'+hashValue()+'"]');
glowEffect(rows.children(),300); // member without details
} else if (anchor.parent().attr('class')=='fieldname') {
glowEffect(anchor.parent().parent(),1000); // enum value
} else if (anchor.parent().attr('class')=='fieldtype') {
glowEffect(anchor.parent().parent(),1000); // struct field
} else if (anchor.parent().is(":header")) {
glowEffect(anchor.parent(),1000); // section header
} else {
glowEffect(anchor.next(),1000); // normal member
}
});
}
}
function htmlToNode(html) {
const template = document.createElement('template');
template.innerHTML = html;
const nNodes = template.content.childNodes.length;
if (nNodes !== 1) {
throw new Error(`html parameter must represent a single node; got ${nNodes}. `);
}
return template.content.firstChild;
}
const newNode = function(o, po, text, link, childrenData, lastNode) {
const node = {
children : [],
childrenData : childrenData,
depth : po.depth + 1,
relpath : po.relpath,
isLast : lastNode,
li : document.createElement("li"),
parentNode : po,
itemDiv : document.createElement("div"),
labelSpan : document.createElement("span"),
expanded : false,
childrenUL : null,
getChildrenUL : function() {
if (!this.childrenUL) {
this.childrenUL = document.createElement("ul");
this.childrenUL.className = "children_ul";
this.childrenUL.style.display = "none";
this.li.appendChild(node.childrenUL);
}
return node.childrenUL;
},
};
node.itemDiv.className = "item";
node.labelSpan.className = "label";
createIndent(o,node.itemDiv,node);
node.itemDiv.appendChild(node.labelSpan);
node.li.appendChild(node.itemDiv);
const a = document.createElement("a");
node.labelSpan.appendChild(a);
po.getChildrenUL().appendChild(node.li);
a.appendChild(htmlToNode('<span>'+text+'</span>'));
if (link) {
let url;
if (link.substring(0,1)=='^') {
url = link.substring(1);
link = url;
} else {
url = node.relpath+link;
}
a.className = stripPath(link.replace('#',':'));
if (link.indexOf('#')!=-1) {
const aname = '#'+link.split('#')[1];
const srcPage = stripPath(pathName());
const targetPage = stripPath(link.split('#')[0]);
a.href = srcPage!=targetPage ? url : aname;
a.onclick = function() {
storeLink(link);
aPPar = $(a).parent().parent();
if (!aPPar.hasClass('selected')) {
$('.item').removeClass('selected');
$('.item').removeAttr('id');
aPPar.addClass('selected');
aPPar.attr('id','selected');
}
const anchor = $(aname);
gotoAnchor(anchor,aname);
};
} else {
a.href = url;
a.onclick = () => storeLink(link);
}
} else if (childrenData != null) {
a.className = "nolink";
a.href = "javascript:void(0)";
a.onclick = node.expandToggle.onclick;
}
return node;
}
const showRoot = function() {
const headerHeight = $("#top").height();
const footerHeight = $("#nav-path").height();
const windowHeight = $(window).height() - headerHeight - footerHeight;
(function() { // retry until we can scroll to the selected item
try {
const navtree=$('#nav-tree');
navtree.scrollTo('#selected',100,{offset:-windowHeight/2});
} catch (err) {
setTimeout(arguments.callee, 0);
}
})();
}
const expandNode = function(o, node, imm, setFocus) {
if (node.childrenData && !node.expanded) {
if (typeof(node.childrenData)==='string') {
const varName = node.childrenData;
getScript(node.relpath+varName,function() {
node.childrenData = getData(varName);
expandNode(o, node, imm, setFocus);
});
} else {
if (!node.childrenVisited) {
getNode(o, node);
}
$(node.getChildrenUL()).slideDown("fast",adjustSyncIconPosition);
$(node.plus_img.childNodes[0]).addClass('opened').removeClass('closed');
node.expanded = true;
if (setFocus) {
$(node.expandToggle).focus();
}
}
}
}
const glowEffect = function(n,duration) {
n.addClass('glow').delay(duration).queue(function(next) {
$(this).removeClass('glow');next();
});
}
const highlightAnchor = function() {
const aname = hashUrl();
const anchor = $(aname);
gotoAnchor(anchor,aname);
}
const selectAndHighlight = function(hash,n) {
let a;
if (hash) {
const link=stripPath(pathName())+':'+hash.substring(1);
a=$('.item a[class$="'+link+'"]');
}
if (a && a.length) {
a.parent().parent().addClass('selected');
a.parent().parent().attr('id','selected');
highlightAnchor();
} else if (n) {
$(n.itemDiv).addClass('selected');
$(n.itemDiv).attr('id','selected');
}
let topOffset=5;
if ($('#nav-tree-contents .item:first').hasClass('selected')) {
topOffset+=25;
}
showRoot();
}
const showNode = function(o, node, index, hash) {
if (node && node.childrenData) {
if (typeof(node.childrenData)==='string') {
const varName = node.childrenData;
getScript(node.relpath+varName,function() {
node.childrenData = getData(varName);
showNode(o,node,index,hash);
});
} else {
if (!node.childrenVisited) {
getNode(o, node);
}
$(node.getChildrenUL()).css({'display':'block'});
$(node.plus_img.childNodes[0]).removeClass('closed').addClass('opened');
node.expanded = true;
const n = node.children[o.breadcrumbs[index]];
if (index+1<o.breadcrumbs.length) {
showNode(o,n,index+1,hash);
} else if (typeof(n.childrenData)==='string') {
const varName = n.childrenData;
getScript(n.relpath+varName,function() {
n.childrenData = getData(varName);
node.expanded=false;
showNode(o,node,index,hash); // retry with child node expanded
});
} else {
const rootBase = stripPath(o.toroot.replace(/\..+$/, ''));
if (rootBase=="index" || rootBase=="pages" || rootBase=="search") {
expandNode(o, n, true, false);
}
selectAndHighlight(hash,n);
}
}
} else {
selectAndHighlight(hash);
}
}
const getNode = function(o, po) {
po.childrenVisited = true;
const l = po.childrenData.length-1;
for (let i in po.childrenData) {
const nodeData = po.childrenData[i];
po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2], i==l);
}
}
const gotoNode = function(o,subIndex,root,hash,relpath) {
const nti = navTreeSubIndices[subIndex][root+hash];
if (nti==undefined && hash.length>0) { // try root page without hash as fallback
gotoUrl(o,root,'',relpath);
} else {
o.breadcrumbs = $.extend(true, [], nti);
if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index
navTo(o,NAVTREE[0][1],"",relpath);
$('.item').removeClass('selected');
$('.item').removeAttr('id');
}
if (o.breadcrumbs) {
o.breadcrumbs.unshift(0); // add 0 for root node
showNode(o, o.node, 0, hash);
}
}
}
const gotoUrl = function(o,root,hash,relpath) {
const url=root+hash;
let i=-1;
while (NAVTREEINDEX[i+1]<=url) i++;
if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index
if (navTreeSubIndices[i]) {
gotoNode(o,i,root,hash,relpath)
} else {
getScript(relpath+'navtreeindex'+i,function() {
navTreeSubIndices[i] = window['NAVTREEINDEX'+i];
if (navTreeSubIndices[i]) {
gotoNode(o,i,root,hash,relpath);
}
});
}
}
const navTo = function(o,root,hash,relpath) {
const link = cachedLink();
if (link) {
const parts = link.split('#');
root = parts[0];
hash = parts.length>1 ? '#'+parts[1].replace(/[^\w-]/g,'') : '';
}
if (hash.match(/^#l\d+$/)) {
const anchor=$('a[name='+hash.substring(1)+']');
glowEffect(anchor.parent(),1000); // line number
hash=''; // strip line number anchors
}
gotoUrl(o,root,hash,relpath);
}
const showSyncOff = function(n,relpath) {
n.html('<div class="nav-sync-icon" title="'+SYNCOFFMSG+'"><span class="sync-icon-left"></span><span class="sync-icon-right"></span></div>');
}
const showSyncOn = function(n,relpath) {
n.html('<div class="nav-sync-icon active" title="'+SYNCONMSG+'"><span class="sync-icon-left"></span><span class="sync-icon-right"></span></div>');
}
const o = {
toroot : toroot,
node : {
childrenData : NAVTREE,
children : [],
childrenUL : document.createElement("ul"),
getChildrenUL : function() { return this.childrenUL },
li : document.getElementById("nav-tree-contents"),
depth : 0,
relpath : relpath,
expanded : false,
isLast : true,
plus_img : document.createElement("span"),
},
};
o.node.li.appendChild(o.node.childrenUL);
o.node.plus_img.className = 'arrow';
o.node.plus_img.innerHTML = ARROW_RIGHT;
const navSync = $('#nav-sync');
if (cachedLink()) {
showSyncOff(navSync,relpath);
navSync.removeClass('sync');
} else {
showSyncOn(navSync,relpath);
}
navSync.click(() => {
const navSync = $('#nav-sync');
if (navSync.hasClass('sync')) {
navSync.removeClass('sync');
showSyncOff(navSync,relpath);
storeLink(stripPath2(pathName())+hashUrl());
} else {
navSync.addClass('sync');
showSyncOn(navSync,relpath);
deleteLink();
}
});
navTo(o,toroot,hashUrl(),relpath);
showRoot();
$(window).bind('hashchange', () => {
if (!animationInProgress) {
if (window.location.hash && window.location.hash.length>1) {
let a;
if ($(location).attr('hash')) {
const clslink=stripPath(pathName())+':'+hashValue();
a=$('.item a[class$="'+clslink.replace(/</g,'\\3c ')+'"]');
}
if (a==null || !$(a).parent().parent().hasClass('selected')) {
$('.item').removeClass('selected');
$('.item').removeAttr('id');
}
const link=stripPath2(pathName());
navTo(o,link,hashUrl(),relpath);
} else {
$('#doc-content').scrollTop(0);
$('.item').removeClass('selected');
$('.item').removeAttr('id');
navTo(o,toroot,hashUrl(),relpath);
}
}
});
$(window).resize(function() { adjustSyncIconPosition(); });
let navtree_trampoline = {
updateContentTop : function() {}
}
function initResizable() {
let sidenav,mainnav,pagenav,container,navtree,content,header,footer,barWidth=6;
const RESIZE_COOKIE_NAME = ''+'width';
const PAGENAV_COOKIE_NAME = ''+'pagenav';
const fullSidebar = typeof page_layout!=='undefined' && page_layout==1;
function showHideNavBar() {
let bar = $('div.sm-dox');
if (fullSidebar && mainnav && bar) {
if (mainnav.width()<768) {
bar.hide();
} else {
bar.show();
}
}
}
function constrainPanelWidths(leftPanelWidth,rightPanelWidth,dragLeft) {
const contentWidth = container.width()-leftPanelWidth-rightPanelWidth;
const minContentWidth = 250;
const minPanelWidth = barWidth;
if (contentWidth<minContentWidth) // need to shrink panels
{
const deficit = minContentWidth - contentWidth;
if (dragLeft) { // dragging left handle -> try to keep right panel width
const shrinkLeft = Math.min(deficit, leftPanelWidth-minPanelWidth);
leftPanelWidth -= shrinkLeft;
const remainingDeficit = deficit - shrinkLeft;
const shrinkRight = Math.min(remainingDeficit, rightPanelWidth-minPanelWidth);
rightPanelWidth -= shrinkRight;
} else { // dragging right handle -> try to keep left panel width
const shrinkRight = Math.min(deficit, rightPanelWidth-minPanelWidth);
rightPanelWidth -= shrinkRight;
const remainingDeficit = deficit - shrinkRight;
const shrinkLeft = Math.min(remainingDeficit, leftPanelWidth-minPanelWidth);
leftPanelWidth -= shrinkLeft;
}
} else {
rightPanelWidth = pagenav.length ? Math.max(minPanelWidth,rightPanelWidth) : 0;
leftPanelWidth = Math.max(minPanelWidth,leftPanelWidth);
}
return { leftPanelWidth, rightPanelWidth }
}
function updateWidths(sidenavWidth,pagenavWidth,dragLeft)
{
const widths = constrainPanelWidths(sidenavWidth,pagenavWidth,dragLeft);
const widthStr = parseInt(widths.leftPanelWidth)+"px";
content.css({marginLeft:widthStr});
if (fullSidebar) {
footer.css({marginLeft:widthStr});
if (mainnav) {
mainnav.css({marginLeft:widthStr});
}
}
sidenav.css({width:widthStr});
if (pagenav.length) {
container.css({gridTemplateColumns:'auto '+parseInt(widths.rightPanelWidth)+'px'});
pagenav.css({width:parseInt(widths.rightPanelWidth-1)+'px'});
}
return widths;
}
function resizeWidth(dragLeft) {
const sidenavWidth = $(sidenav).outerWidth()-barWidth;
const pagenavWidth = pagenav.length ? $(pagenav).outerWidth() : 0;
const widths = updateWidths(sidenavWidth,pagenavWidth,dragLeft);
Cookie.writeSetting(RESIZE_COOKIE_NAME,widths.leftPanelWidth-barWidth);
if (pagenav.length) {
Cookie.writeSetting(PAGENAV_COOKIE_NAME,widths.rightPanelWidth);
}
}
function restoreWidth(sidenavWidth,pagenavWidth) {
updateWidths(sidenavWidth,pagenavWidth,false);
showHideNavBar();
}
function resizeHeight() {
const headerHeight = header.outerHeight();
const windowHeight = $(window).height();
let contentHeight;
const footerHeight = footer.outerHeight();
let navtreeHeight,sideNavHeight;
if (!fullSidebar) {
contentHeight = windowHeight - headerHeight - footerHeight - 1;
navtreeHeight = contentHeight;
sideNavHeight = contentHeight;
} else if (fullSidebar) {
contentHeight = windowHeight - footerHeight - 1;
navtreeHeight = windowHeight - headerHeight - 1;
sideNavHeight = windowHeight - 1;
if (mainnav) {
contentHeight -= mainnav.outerHeight();
}
}
navtree.css({height:navtreeHeight + "px"});
sidenav.css({height:sideNavHeight + "px"});
content.css({height:contentHeight + "px"});
resizeWidth(false);
showHideNavBar();
if (location.hash.slice(1)) {
(document.getElementById(location.hash.slice(1))||document.body).scrollIntoView();
}
}
header = $("#top");
content = $("#doc-content");
footer = $("#nav-path");
sidenav = $("#side-nav");
if (document.getElementById('main-nav')) {
mainnav = $("#main-nav");
}
navtree = $("#nav-tree");
pagenav = $("#page-nav");
container = $("#container");
$(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(true); } });
$(sidenav).resizable({ minWidth: 0 });
if (pagenav.length) {
pagehandle = $("#page-nav-resize-handle");
pagehandle.on('mousedown touchstart',function(e) {
$('body').addClass('resizing');
pagehandle.addClass('dragging');
$(document).on('mousemove touchmove',function(e) {
const clientX = e.clientX || e.originalEvent.touches[0].clientX;
let pagenavWidth = container[0].offsetWidth-clientX+barWidth/2;
const sidenavWidth = sidenav.width();
const widths = constrainPanelWidths(sidenavWidth,pagenavWidth,false);
container.css({gridTemplateColumns:'auto '+parseInt(widths.rightPanelWidth)+'px'});
pagenav.css({width:parseInt(widths.rightPanelWidth-1)+'px'});
content.css({marginLeft:parseInt(widths.leftPanelWidth)+'px'});
Cookie.writeSetting(PAGENAV_COOKIE_NAME,pagenavWidth);
});
$(document).on('mouseup touchend', function(e) {
$('body').removeClass('resizing');
pagehandle.removeClass('dragging');
$(document).off('mousemove mouseup touchmove touchend');
});
});
} else {
container.css({gridTemplateColumns:'auto'});
}
const width = parseInt(Cookie.readSetting(RESIZE_COOKIE_NAME,250));
const pagenavWidth = parseInt(Cookie.readSetting(PAGENAV_COOKIE_NAME,250));
if (width) { restoreWidth(width+barWidth,pagenavWidth); } else { resizeWidth(); }
const url = location.href;
const i=url.indexOf("#");
if (i>=0) window.location.hash=url.substr(i);
const _preventDefault = function(evt) { evt.preventDefault(); };
$("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);
$(window).ready(function() {
let lastWidth = -1;
let lastHeight = -1;
$(window).resize(function() {
const newWidth = $(this).width(), newHeight = $(this).height();
if (newWidth!=lastWidth || newHeight!=lastHeight) {
resizeHeight();
navtree_trampoline.updateContentTop();
lastWidth = newWidth;
lastHeight = newHeight;
}
});
resizeHeight();
lastWidth = $(window).width();
lastHeight = $(window).height();
content.scroll(function() {
navtree_trampoline.updateContentTop();
});
});
}
function initPageToc() {
const topMapping = [];
const toc_contents = $('#page-nav-contents');
const content=$('<ul>').addClass('page-outline');
var entityMap = {
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
'"': '&quot;',
"'": '&#39;',
'/': '&#x2F;',
'`': '&#x60;',
'=': '&#x3D;'
};
function escapeHtml (string) {
return String(string).replace(/[&<>"'`=\/]/g, function (s) {
return entityMap[s];
});
}
// for ClassDef/GroupDef/ModuleDef/ConceptDef/DirDef
const groupSections = [];
let currentGroup = null;
$('h2.groupheader, h2.memtitle').each(function(){
const $element = $(this);
if ($element.hasClass('groupheader')) {
currentGroup = { groupHeader: $element, memTitles: [] };
groupSections.push(currentGroup);
} else if ($element.hasClass('memtitle') && currentGroup) {
currentGroup.memTitles.push($element);
}
});
groupSections.forEach(function(item){
const title = item.groupHeader.text().trim();
let id = item.groupHeader.attr('id');
const table = item.groupHeader.parents('table.memberdecls');
let rows = $();
if (table.length>0) {
rows = table.find("tr[class^='memitem:'] td.memItemRight, tr[class^='memitem:'] td.memItemLeft.anon, tr[class=groupHeader] td");
}
function hasSubItems() {
return item.memTitles.length>0 || rows.toArray().some(function(el) { return $(el).is(':visible'); });
}
const li = $('<li>').attr('id','nav-'+id);
const div = $('<div>').addClass('item');
const span = $('<span>').addClass('arrow').css({ paddingLeft:'0' });
if (hasSubItems()) {
span.append($('<span>').addClass('arrowhead opened'));
}
const ahref = $('<a>').attr('href','#'+id).append(title);
content.append(li.append(div.append(span).append(ahref)));
topMapping.push(id);
const ulStack = [];
ulStack.push(content);
if (hasSubItems()) {
let last_id = undefined;
let inMemberGroup = false;
// declaration sections have rows for items
rows.each(function(){
let td = $(this);
let tr = $(td).parent();
const is_anon_enum = td.contents().first().text().trim()=='{';
if (tr.hasClass('template')) {
tr = tr.prev();
}
id = $(tr).attr('id');
const text = is_anon_enum ? 'anonymous enum' : $(this).find('a:first,b,div.groupHeader').text();
let isMemberGroupHeader = $(tr).hasClass('groupHeader');
if ($(tr).is(":visible") && last_id!=id && id!==undefined) {
if (isMemberGroupHeader && inMemberGroup) {
ulStack.pop();
inMemberGroup=false;
}
const li2 = $('<li>').attr('id','nav-'+id);
const div2 = $('<div>').addClass('item');
const span2 = $('<span>').addClass('arrow').css({ paddingLeft:parseInt(ulStack.length*16)+'px' });
const ahref = $('<a>').attr('href','#'+id).append(escapeHtml(text));
li2.append(div2.append(span2).append(ahref));
topMapping.push(id);
if (isMemberGroupHeader) {
span2.append($('<span>').addClass('arrowhead opened'));
ulStack[ulStack.length-1].append(li2);
const ul2 = $('<ul>');
ulStack.push(ul2);
li2.append(div2).append(ul2);
inMemberGroup=true;
} else {
ulStack[ulStack.length-1].append(li2);
}
last_id=id;
}
});
// detailed documentation has h2.memtitle sections for items
item.memTitles.forEach(function(data) {
const text = $(data).contents().not($(data).children().first()).text();
const name = text.replace(/\(\)(\s*\[\d+\/\d+\])?$/, '') // func() [2/8] -> func
id = $(data).find('span.permalink a').attr('href')
if (id!==undefined && name!==undefined) {
const li2 = $('<li>').attr('id','nav-'+id.substring(1));
const div2 = $('<div>').addClass('item');
const span2 = $('<span>').addClass('arrow').css({paddingLeft:parseInt(ulStack.length*16)+'px'});
const ahref = $('<a>').attr('href',id).append(escapeHtml(name));
ulStack[ulStack.length-1].append(li2.append(div2.append(span2).append(ahref)));
topMapping.push(id.substring(1));
}
});
}
});
if (allMembersFile.length) { // add entry linking to all members page
const url = location.href;
let srcBaseUrl = '';
let dstBaseUrl = '';
if (relpath.length) { // CREATE_SUBDIRS=YES -> find target location
srcBaseUrl = url.substring(0, url.lastIndexOf('/')) + '/' + relpath;
dstBaseUrl = allMembersFile.substr(0, allMembersFile.lastIndexOf('/'))+'/';
}
const pageName = url.split('/').pop().split('#')[0].replace(/(\.[^/.]+)$/, '-members$1');
const li = $('<li>');
const div = $('<div>').addClass('item');
const span = $('<span>').addClass('arrow').css({ paddingLeft:'0' });
const ahref = $('<a>').attr('href',srcBaseUrl+dstBaseUrl+pageName).addClass('noscroll');
content.append(li.append(div.append(span).append(ahref.append(LISTOFALLMEMBERS))));
}
if (groupSections.length==0) {
// for PageDef
const sectionTree = [], sectionStack = [];
$('h1.doxsection, h2.doxsection, h3.doxsection, h4.doxsection, h5.doxsection, h6.doxsection').each(function(){
const level = parseInt(this.tagName[1]);
const anchor = $(this).find('a.anchor').attr('id');
const node = { text: $(this).html(), id: anchor, children: [] };
while (sectionStack.length && sectionStack[sectionStack.length - 1].level >= level) sectionStack.pop();
(sectionStack.length ? sectionStack[sectionStack.length - 1].children : sectionTree).push(node);
sectionStack.push({ ...node, level });
});
if (sectionTree.length>0) {
function render(nodes, level=0) {
nodes.map(n => {
const li = $('<li>').attr('id','nav-'+n.id);
const div = $('<div>').addClass('item');
const span = $('<span>').addClass('arrow').attr('style','padding-left:'+parseInt(level*16)+'px;');
if (n.children.length > 0) { span.append($('<span>').addClass('arrowhead opened')); }
const url = $('<a>').attr('href','#'+n.id);
content.append(li.append(div.append(span).append(url.append(n.text))));
topMapping.push(n.id);
render(n.children,level+1);
});
}
render(sectionTree);
}
}
toc_contents.append(content);
$(".page-outline a[href]:not(.noscroll)").click(function(e) {
e.preventDefault();
const aname = $(this).attr("href");
gotoAnchor($(aname),aname);
});
let lastScrollSourceOffset = -1;
let lastScrollTargetOffset = -1;
let lastScrollTargetId = '';
navtree_trampoline.updateContentTop = function() {
const pagenavcontents = $("#page-nav-contents");
if (pagenavcontents.length) {
const content = $("#doc-content");
const height = content.height();
const navy = pagenavcontents.offset().top;
const yc = content.offset().top;
let offsets = []
for (let i=0;i<topMapping.length;i++) {
const heading = $('#'+topMapping[i]);
if (heading.parent().hasClass('doxsection')) {
offsets.push({id:topMapping[i],y:heading.parent().offset().top-yc});
} else {
offsets.push({id:topMapping[i],y:heading.offset().top-yc});
}
}
offsets.push({id:'',y:1e10});
let scrollTarget = undefined, numItems=0;
for (let i=0;i<topMapping.length;i++) {
const ys = offsets[i].y;
const ye = offsets[i+1].y;
const id = offsets[i].id;
const nav = $('#nav-'+id);
const margin = 10; // #pixels before content show as visible
if ((ys>margin || ye>margin) && (ys<height-margin || ye<height-margin)) {
if (!scrollTarget) scrollTarget=nav;
nav.addClass('vis'); // mark navigation entry as visible within content area
numItems+=1;
} else {
nav.removeClass('vis');
}
}
const contentScrollOffset = $('div.contents').offset().top;
if (scrollTarget && lastScrollTargetId!=scrollTarget.attr('id')) { // new item to scroll to
const scrollDown = contentScrollOffset<lastScrollSourceOffset;
const range = 22*numItems;
const my = range/2-height/2;
const ulOffset = $('ul.page-outline').offset().top-navy;
const targetPos=scrollTarget.offset().top-navy-ulOffset;
const targetOffset=targetPos+my;
if ( (scrollDown && targetOffset>lastScrollTargetOffset) ||
(!scrollDown && targetOffset<lastScrollTargetOffset))
{ // force panel to scroll in the same direction as content window
pagenavcontents.stop(); // avoid build-up of history
pagenavcontents.scrollTo({ left:0, top:targetOffset },{ duration: 500, interrupt: true });
lastScrollTargetOffset = targetOffset;
}
lastScrollTargetId = scrollTarget.attr('id');
}
lastScrollSourceOffset = contentScrollOffset;
}
}
// TODO: find out how to avoid a timeout
setTimeout(() => {
navtree_trampoline.updateContentTop();
},200);
}
$(document).ready(function() { initPageToc(); initResizable(); });
}
/* @license-end */

57
Doc/html/navtreedata.js Normal file
View File

@ -0,0 +1,57 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@licend The above is the entire license notice for the JavaScript code in this file
*/
var NAVTREE =
[
[ "MyLibs", "index.html", [
[ "Topics", "topics.html", "topics" ],
[ "Classes", "annotated.html", [
[ "Class List", "annotated.html", "annotated_dup" ],
[ "Class Index", "classes.html", null ],
[ "Class Members", "functions.html", [
[ "All", "functions.html", null ],
[ "Variables", "functions_vars.html", null ]
] ]
] ],
[ "Files", "files.html", [
[ "File List", "files.html", "files_dup" ],
[ "File Members", "globals.html", [
[ "All", "globals.html", null ],
[ "Functions", "globals_func.html", null ],
[ "Enumerations", "globals_enum.html", null ],
[ "Enumerator", "globals_eval.html", null ],
[ "Macros", "globals_defs.html", null ]
] ]
] ]
] ]
];
var NAVTREEINDEX =
[
"____general__flash_8c_source.html"
];
var SYNCONMSG = 'click to disable panel synchronization';
var SYNCOFFMSG = 'click to enable panel synchronization';
var LISTOFALLMEMBERS = 'List of all members';

194
Doc/html/navtreeindex0.js Normal file
View File

@ -0,0 +1,194 @@
var NAVTREEINDEX0 =
{
"____general__flash_8c_source.html":[2,0,0,1,0],
"____general__flash_8h_source.html":[2,0,0,0,0],
"____general__spi_8c_source.html":[2,0,0,1,1],
"____general__spi_8h_source.html":[2,0,0,0,1],
"____general__tim_8c_source.html":[2,0,0,1,2],
"____general__tim_8h_source.html":[2,0,0,0,2],
"____general__uart_8c_source.html":[2,0,0,1,3],
"____general__uart_8h_source.html":[2,0,0,0,3],
"annotated.html":[1,0],
"bit__access_8h_source.html":[2,0,0,0,4],
"classes.html":[1,1],
"dir_9c80311a018e1f8cfb6659b73d634be4.html":[2,0,0,1],
"dir_9e11e9a41112194af3eee6cc728f9515.html":[2,0,0],
"dir_eb423fea8a9c4b9b32b922020ec391e1.html":[2,0,0,0],
"files.html":[2,0],
"functions.html":[1,2,0],
"functions_vars.html":[1,2,1],
"general__gpio_8c.html":[2,0,0,1,4],
"general__gpio_8c_source.html":[2,0,0,1,4],
"general__gpio_8h.html":[2,0,0,0,5],
"general__gpio_8h_source.html":[2,0,0,0,5],
"globals.html":[2,1,0],
"globals_defs.html":[2,1,4],
"globals_enum.html":[2,1,2],
"globals_eval.html":[2,1,3],
"globals_func.html":[2,1,1],
"group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html":[0,0,1,0],
"group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#ga47eb69ce9330a1c73fe8031240f02f0a":[0,0,1,0,7],
"group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#ga57dc3bb3472a66fc92312f89d42d2396":[0,0,1,0,4],
"group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#ga6a122b536ad99ae611c8cf01437af086":[0,0,1,0,5],
"group___b_i_t___a_c_c_e_s_s___d_e_f_i_n_e_s.html#gafaa2080168b1b6f7281e8bfabab022d1":[0,0,1,0,6],
"group___d_e_l_a_y_s___d_e_f_i_n_e_s.html":[0,0,1,2],
"group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga0b97e172659a59ee4fa56f851643ae85":[0,0,1,2,2],
"group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#ga8a5051b1292d1019fe8dd3fc5521ab25":[0,0,1,2,1],
"group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gabeb97579daeb622c6651ed03c4a27479":[0,0,1,2,0],
"group___d_e_l_a_y_s___d_e_f_i_n_e_s.html#gaed082c07b9fc4d1894330d885b9b5518":[0,0,1,2,3],
"group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html":[0,0,1,1],
"group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga002f4a5f5d8bb37d88f607386bc6ba2e":[0,0,1,1,3],
"group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga0b75f0bcf066acdf797b8e6730c52f86":[0,0,1,1,1],
"group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#ga944edcd2c65519578d36730b94701f64":[0,0,1,1,5],
"group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gade91c09d89a5f69003dcfe506ed0327f":[0,0,1,1,4],
"group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gae110df81afd885a390bbeb152d7b709f":[0,0,1,1,0],
"group___e_r_r_o_r___h_a_n_d_l_e_r___d_e_f_i_n_e_s.html#gae7d1cbb9075ee4b830342fd564d96be0":[0,0,1,1,2],
"group___g_p_i_o___g_e_n_e_r_a_l.html":[0,0,2,0,0],
"group___g_p_i_o___g_e_n_e_r_a_l.html#ga34242874b455a72aa6e25841678ed105":[0,0,2,0,0,1],
"group___g_p_i_o___g_e_n_e_r_a_l.html#ga962f010f783b81fcdd27eb6b53db28e6":[0,0,2,0,0,2],
"group___g_p_i_o___i_n_i_t.html":[0,0,2,0,0,0],
"group___g_p_i_o___i_n_i_t.html#ga19d9e3aced311179a2914e0c9b13d0f9":[0,0,2,0,0,0,3],
"group___g_p_i_o___i_n_i_t.html#ga1d42e219765ec526d99e306638ac0023":[0,0,2,0,0,0,0],
"group___g_p_i_o___i_n_i_t.html#ga80700bb63bd56ebabbb4728aa433fd29":[0,0,2,0,0,0,2],
"group___g_p_i_o___i_n_i_t.html#gacd8900c9ec0efde1da3253b718574067":[0,0,2,0,0,0,4],
"group___g_p_i_o___i_n_i_t.html#gaf2e697ac60e05813d45ea2c9c9e79c25":[0,0,2,0,0,0,1],
"group___g_p_i_o___l_e_d_s.html":[0,0,2,0,2],
"group___g_p_i_o___l_e_d_s.html#ga4b9572949326b050694cd55d0a7e5f6c":[0,0,2,0,2,3],
"group___g_p_i_o___l_e_d_s.html#gaa00f20021781464af3dfe74aa3e59a0a":[0,0,2,0,2,7],
"group___g_p_i_o___l_e_d_s.html#gaac2b90d8b8c9579b6aa5d3bbda9b1ff1":[0,0,2,0,2,1],
"group___g_p_i_o___l_e_d_s.html#gaadda2d4f021390a4e392210a5ace5357":[0,0,2,0,2,4],
"group___g_p_i_o___l_e_d_s.html#gac936453c7a0841c0b17bcfdae4958084":[0,0,2,0,2,2],
"group___g_p_i_o___l_e_d_s.html#gad6e6189824406c4d472b6340c7f19bb2":[0,0,2,0,2,8],
"group___g_p_i_o___l_e_d_s.html#gae78b570447d55a462a679a89dbaa8ea2":[0,0,2,0,2,5],
"group___g_p_i_o___l_e_d_s.html#gaf22f44ecaf6a1932b47edc5a845b03a9":[0,0,2,0,2,6],
"group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a2445895bed5dcbedc82ea3ef02bec6fb":[0,0,2,0,2,1,2],
"group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1a74276cd2464314e422e8a144483f74ae":[0,0,2,0,2,1,0],
"group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1aa610f6df44c939aa7d45e318036fa03b":[0,0,2,0,2,1,3],
"group___g_p_i_o___l_e_d_s.html#ggaac2b90d8b8c9579b6aa5d3bbda9b1ff1af6abfb9c5b95abbdb239590f2cd245ea":[0,0,2,0,2,1,1],
"group___g_p_i_o___s_w_i_t_c_h.html":[0,0,2,0,1],
"group___g_p_i_o___s_w_i_t_c_h.html#ga4b6b8be19a9265bfee6b2bb8a68e988f":[0,0,2,0,1,2],
"group___g_p_i_o___s_w_i_t_c_h.html#gacafee0e68877f2b25df843356871d1f7":[0,0,2,0,1,1],
"group___l_i_b_s___c_o_n_f_i_g.html":[0,0,0,1],
"group___l_i_b_s___c_o_n_f_i_g.html#ga0a3ca94b616997069dd53e2c6c2687d7":[0,0,0,1,2],
"group___l_i_b_s___c_o_n_f_i_g.html#ga181a46326e46b60afb160190832c7281":[0,0,0,1,3],
"group___l_i_b_s___c_o_n_f_i_g.html#ga4403055986b70bb02b8d37073a122e32":[0,0,0,1,1],
"group___l_i_b_s___c_o_n_f_i_g.html#gaf4ddb2a71ec0d05c2480e197cd17c0be":[0,0,0,1,0],
"group___m_y___l_i_b_s___g_p_i_o.html":[0,0,2,0],
"group___m_y_l_i_b_s___a_l_l.html":[0,0],
"group___m_y_l_i_b_s___c_o_n_f_i_g.html":[0,0,0],
"group___m_y_l_i_b_s___d_e_f_i_n_e_s.html":[0,0,1],
"group___m_y_l_i_b_s___p_e_r_i_p_h_e_r_a_l.html":[0,0,2],
"group___t_r_a_c_e.html":[0,0,1,4],
"group___t_r_a_c_e___c_o_n_f_i_g.html":[0,0,0,0],
"group___t_r_a_c_e___c_o_n_f_i_g.html#ga00ff2175bdc1fb11c8ec970ea3010dd8":[0,0,0,0,2],
"group___t_r_a_c_e___c_o_n_f_i_g.html#ga0b87e0d3bf5853bcbb0b66a7c48fdc05":[0,0,0,0,4],
"group___t_r_a_c_e___c_o_n_f_i_g.html#ga0c602733a4a359bf8c095d71cd4d0f63":[0,0,0,0,13],
"group___t_r_a_c_e___c_o_n_f_i_g.html#ga3bc1b76864e1d32cbdd174d4caae7724":[0,0,0,0,6],
"group___t_r_a_c_e___c_o_n_f_i_g.html#ga4222e0e400ad81737cefcabeb03fd23b":[0,0,0,0,15],
"group___t_r_a_c_e___c_o_n_f_i_g.html#ga47f454f804b4dbc26cae079e8d8641e6":[0,0,0,0,9],
"group___t_r_a_c_e___c_o_n_f_i_g.html#ga501312b24e322de4dd6755ad442f0ba3":[0,0,0,0,5],
"group___t_r_a_c_e___c_o_n_f_i_g.html#ga76936505ca200d2e61226b7ba68f27c6":[0,0,0,0,1],
"group___t_r_a_c_e___c_o_n_f_i_g.html#ga8e56f75d3ab8a89ddde1404ae23c3297":[0,0,0,0,7],
"group___t_r_a_c_e___c_o_n_f_i_g.html#ga92d0d14732edb7dfa21d483304bdb051":[0,0,0,0,14],
"group___t_r_a_c_e___c_o_n_f_i_g.html#gaa31234688b333a505aaa57b8ecdedf5b":[0,0,0,0,12],
"group___t_r_a_c_e___c_o_n_f_i_g.html#gab8db9704b5d11858aa879689b9d36336":[0,0,0,0,3],
"group___t_r_a_c_e___c_o_n_f_i_g.html#gac9eaedc31ab023ce7d6403999216e496":[0,0,0,0,0],
"group___t_r_a_c_e___c_o_n_f_i_g.html#gadc960255719c7eff4bdfaa850be9b313":[0,0,0,0,10],
"group___t_r_a_c_e___c_o_n_f_i_g.html#gafcc7ea03d4df8f1909e580b519a7f3ca":[0,0,0,0,11],
"group___t_r_a_c_e___c_o_n_f_i_g.html#gafeca0be3688dea07ff443f894668003d":[0,0,0,0,8],
"group___t_r_a_c_e___g_p_i_o.html":[0,0,1,4,1],
"group___t_r_a_c_e___g_p_i_o.html#ga02a6a7b273766121db8ad4a1371373eb":[0,0,1,4,1,1],
"group___t_r_a_c_e___g_p_i_o.html#ga69741d88c991112e99fe7a62e025108a":[0,0,1,4,1,0],
"group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html":[0,0,1,4,3],
"group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html#ga03f8b6f3b537ee1c8e91065c60db504f":[0,0,1,4,3,1],
"group___t_r_a_c_e___h_a_r_d_f_a_u_l_t.html#gadd8e10e7ec3b0204f7f92062ecd452f7":[0,0,1,4,3,2],
"group___t_r_a_c_e___r_t_t___f_l_a_s_h.html":[0,0,1,4,2],
"group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga21353cb4f5af666237739e62ce019cd6":[0,0,1,4,2,1],
"group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga734b2ebbf0c77699b739013878cfd146":[0,0,1,4,2,3],
"group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga79f222c8ab644de4d47f07528d1edd63":[0,0,1,4,2,2],
"group___t_r_a_c_e___r_t_t___f_l_a_s_h.html#ga8d8c6850e32b42871faefce3352012d1":[0,0,1,4,2,4],
"group___t_r_a_c_e___s_e_r_i_a_l.html":[0,0,1,4,0],
"group___t_r_a_c_e___s_e_r_i_a_l.html#ga730fb7b8d0bbb348dca73c15bd0e0b26":[0,0,1,4,0,1],
"group___t_r_a_c_e___s_e_r_i_a_l.html#gae9b9b8a611e291a2f2aa5abf99f3ebaa":[0,0,1,4,0,0],
"group___t_r_a_c_k_e_r_s.html":[0,0,1,5],
"group___t_r_a_c_k_e_r_s.html#ga063dab1067005e1600ea32531fdf3f8d":[0,0,1,5,18],
"group___t_r_a_c_k_e_r_s.html#ga1b7549afc4a1760b54a9b93b0f6d105e":[0,0,1,5,12],
"group___t_r_a_c_k_e_r_s.html#ga23de0006aa08984cfeddb6aa5e512fa1":[0,0,1,5,9],
"group___t_r_a_c_k_e_r_s.html#ga365a8c60bd13b75154feda649dd21ead":[0,0,1,5,17],
"group___t_r_a_c_k_e_r_s.html#ga39b6ffbc561f8caac276415e1ad32c30":[0,0,1,5,4],
"group___t_r_a_c_k_e_r_s.html#ga47ac59a406ee74d4cd9fe0fbaf63a758":[0,0,1,5,7],
"group___t_r_a_c_k_e_r_s.html#ga49af29ab3927cad105c1d2b018a767e9":[0,0,1,5,10],
"group___t_r_a_c_k_e_r_s.html#ga4b08632669043dfdbd219dda03502bdb":[0,0,1,5,8],
"group___t_r_a_c_k_e_r_s.html#ga50ccb119acf302969b7fdcb58f2130e4":[0,0,1,5,0],
"group___t_r_a_c_k_e_r_s.html#ga5dd8bac8c7ab5832019d55d7a68371b9":[0,0,1,5,15],
"group___t_r_a_c_k_e_r_s.html#ga704f7b9f8c65c9bcec48ce7cb77a2d3b":[0,0,1,5,14],
"group___t_r_a_c_k_e_r_s.html#ga72be24629fedb8bf70e830373d151fbc":[0,0,1,5,1],
"group___t_r_a_c_k_e_r_s.html#ga8017fb05a56a1b667244f1f786fa9c57":[0,0,1,5,11],
"group___t_r_a_c_k_e_r_s.html#ga9dc91e6b798a081f95f2ccef2c288e5e":[0,0,1,5,6],
"group___t_r_a_c_k_e_r_s.html#gaaec7ec19977bb26fa1919dfe920b82d5":[0,0,1,5,19],
"group___t_r_a_c_k_e_r_s.html#gab880911066605602a966641682090169":[0,0,1,5,5],
"group___t_r_a_c_k_e_r_s.html#gad2f4062a9ac8c2ab062a364f640ebc51":[0,0,1,5,13],
"group___t_r_a_c_k_e_r_s.html#gad91d8ca89074270fc040c0449e57cf07":[0,0,1,5,3],
"group___t_r_a_c_k_e_r_s.html#gadd7fd2c6e3a4800f1d5ddab35fd4b43e":[0,0,1,5,2],
"group___t_r_a_c_k_e_r_s.html#gae860b6947c6e317e14d40bd7b4b8eb74":[0,0,1,5,16],
"group___u_t_i_l_s___d_e_f_i_n_e_s.html":[0,0,1,3],
"group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga0f22e895ac7781c3d1b68fee182c4291":[0,0,1,3,2],
"group___u_t_i_l_s___d_e_f_i_n_e_s.html#ga996f7be338ccb40d1a2a5abc1ad61759":[0,0,1,3,3],
"group___u_t_i_l_s___d_e_f_i_n_e_s.html#gabf45f2b60eedf80cf9d1dbe4302a741e":[0,0,1,3,1],
"group___u_t_i_l_s___d_e_f_i_n_e_s.html#gaf5e598848326d48e86167e5099a029be":[0,0,1,3,0],
"index.html":[],
"mylibs__config_8h.html":[2,0,0,0,6],
"mylibs__config_8h_source.html":[2,0,0,0,6],
"mylibs__defs_8h.html":[2,0,0,0,7],
"mylibs__defs_8h_source.html":[2,0,0,0,7],
"mylibs__include_8h.html":[2,0,0,0,8],
"mylibs__include_8h_source.html":[2,0,0,0,8],
"pages.html":[],
"struct_a_d_c___tracker_type_def.html":[1,0,0],
"struct_a_d_c_channel___tracker_type_def.html":[1,0,1],
"struct_g_p_i_o___l_e_d_type_def.html":[0,0,2,0,2,0],
"struct_g_p_i_o___l_e_d_type_def.html#a684ff60e4c94daf2221524cdc6fcc978":[0,0,2,0,2,0,2],
"struct_g_p_i_o___l_e_d_type_def.html#a6cc026931a4681732f9a329ae03098ec":[0,0,2,0,2,0,4],
"struct_g_p_i_o___l_e_d_type_def.html#a831923d4d157267ecc2f1add1c49adcf":[0,0,2,0,2,0,1],
"struct_g_p_i_o___l_e_d_type_def.html#a8c43c12787f4a89f4a785f91a979ba68":[0,0,2,0,2,0,5],
"struct_g_p_i_o___l_e_d_type_def.html#abe9aadc0b28d042267f7155e187a1816":[0,0,2,0,2,0,3],
"struct_g_p_i_o___l_e_d_type_def.html#ad28d93023a00e3c5669bd3deda122435":[0,0,2,0,2,0,0],
"struct_g_p_i_o___switch_type_def.html":[0,0,2,0,1,0],
"struct_g_p_i_o___switch_type_def.html#a13f97b867ff1a77ef182c9b13d964ca6":[0,0,2,0,1,0,5],
"struct_g_p_i_o___switch_type_def.html#a245f1dc811279ce5d4598582db979a89":[0,0,2,0,1,0,3],
"struct_g_p_i_o___switch_type_def.html#a2600e599a961af2e280c721894df4c06":[0,0,2,0,1,0,4],
"struct_g_p_i_o___switch_type_def.html#a4fadf5ead3ebccad521a52c064eeb405":[0,0,2,0,1,0,2],
"struct_g_p_i_o___switch_type_def.html#a63d58d9cba49a5823175585ef2996032":[0,0,2,0,1,0,1],
"struct_g_p_i_o___switch_type_def.html#afb369df75a6065fd89ac4ba97d98ab1a":[0,0,2,0,1,0,0],
"struct_h_f___stack_frame__t.html":[0,0,1,4,3,0],
"struct_h_f___stack_frame__t.html#a16563896004751c90e41c81ae4570732":[0,0,1,4,3,0,6],
"struct_h_f___stack_frame__t.html#a286104d19185714940645a9df814ddea":[0,0,1,4,3,0,1],
"struct_h_f___stack_frame__t.html#a4146ed28926b5f234132b7112119a413":[0,0,1,4,3,0,0],
"struct_h_f___stack_frame__t.html#a453c7af42b6928a693af422e17c981d3":[0,0,1,4,3,0,3],
"struct_h_f___stack_frame__t.html#a5a52e5006dabcf68c0fa4cfb0e03335b":[0,0,1,4,3,0,2],
"struct_h_f___stack_frame__t.html#a6e51904297f7725e96d5b5fb291ef577":[0,0,1,4,3,0,5],
"struct_h_f___stack_frame__t.html#a819ee3bc518c460ece1b7c4079f8f80b":[0,0,1,4,3,0,4],
"struct_h_f___stack_frame__t.html#ae47cb051ee3c94471bfd4fe7e49c55f9":[0,0,1,4,3,0,7],
"struct_m_z_k_t___discrete_inputs_type_def.html":[1,0,7],
"struct_m_z_k_t___l_e_ds_type_def.html":[1,0,8],
"struct_measure___tracker_type_def.html":[1,0,5],
"struct_measure_handle___tracker_type_def.html":[1,0,6],
"struct_r_s___tracker_type_def.html":[1,0,9],
"struct_r_t_t___flash_header__t.html":[0,0,1,4,2,0],
"struct_r_t_t___flash_header__t.html#a844ee5470a323a749856cbb7a682dc57":[0,0,1,4,2,0,0],
"struct_r_t_t___flash_header__t.html#ae7276198385c8d6f6508f433d042d52a":[0,0,1,4,2,0,2],
"struct_r_t_t___flash_header__t.html#afd1a5c51af6f97d170c2ccbbe3e34699":[0,0,1,4,2,0,1],
"struct_s_p_i___settings_type_def.html":[1,0,11],
"struct_t_i_m___encoder_type_def.html":[1,0,12],
"struct_t_i_m___settings_type_def.html":[1,0,13],
"struct_u_a_r_t___settings_type_def.html":[1,0,14],
"topics.html":[0],
"trace_8h.html":[2,0,0,0,9],
"trace_8h_source.html":[2,0,0,0,9],
"trackers_8h.html":[2,0,0,0,10],
"trackers_8h_source.html":[2,0,0,0,10],
"unionuint16___bit_type_def.html":[0,0,1,0,1],
"unionuint32___bit_type_def.html":[0,0,1,0,2],
"unionuint64___bit_type_def.html":[0,0,1,0,3],
"unionuint8___bit_type_def.html":[0,0,1,0,0]
};

Some files were not shown because too many files have changed in this diff Show More