Files
UKSI_TEST/AllLibs/Modbus/Doc/html/rs__message_8c_source.html
2025-12-16 17:57:59 +03:00

763 lines
134 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Modbus: E:/.WORK/STM32/Diod_Test/diode_tester/Core/Modbus/Src/rs_message.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">Modbus<span id="projectnumber">&#160;0.3</span>
</div>
<div id="projectbrief">Библиотека Modbus для STM</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('rs__message_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">rs_message.c</div></div>
</div><!--header-->
<div class="contents">
<a href="rs__message_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 rs_message.c</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">* @brief Реализация протоколов обмена по RS/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">* @details</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">Модуль реализует асинхронный обмен сообщениями через UART с использованием:</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">- Детектирования конца фрейма по IDLE линии</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="comment"></span> </div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment">@section arch Архитектура:</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"> - Инициализация приема с сообщения с максимальным размером MSG_SIZE_MAX</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> - При срабатывании прерывания IDLE - обработка полученного сообщения</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"> - Отправка запроса и переход в режим приема сообщения с максимальным размером MSG_SIZE_MAX</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment"> - При срабатывании прерывания IDLE - обработка полученного ответа</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><span class="comment">@section ithandler Необходимые обработчики:</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">- RS_UART_Handler() в UARTx_IRQHandler вместо HAL_UART_IRQHandler()</span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment">- RS_TIM_Handler() в TIMx_IRQHandler вместо HAL_TIM_IRQHandler()</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="preprocessor">#include &quot;<a class="code" href="rs__message_8h.html">rs_message.h</a>&quot;</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include &quot;<a class="code" href="modbus__diag_8h.html">modbus_diag.h</a>&quot;</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>uint8_t RS_Buffer[<a class="code hl_define" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#ga7d1e9e8bb8f40ce788836da0739f897c">MSG_SIZE_MAX</a>]; <span class="comment">// uart buffer</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="keyword">extern</span> <span class="keywordtype">void</span> RS_UART_Init(<span class="keywordtype">void</span>);</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="keyword">extern</span> <span class="keywordtype">void</span> RS_UART_DeInit(UART_HandleTypeDef *huart);</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="keyword">extern</span> <span class="keywordtype">void</span> RS_TIM_Init(<span class="keywordtype">void</span>);</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="keyword">extern</span> <span class="keywordtype">void</span> RS_TIM_DeInit(TIM_HandleTypeDef *htim);</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><span class="comment">//-------------------------------------------------------------------</span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment">//-------------------------GENERAL FUNCTIONS-------------------------</span><span class="comment"></span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="comment">/**</span></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="comment"> * @brief Начать прием по прерываниям.</span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment"> * @param hRS Указатель на хендлер RS.</span></div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="comment"> * @param RS_msg Указатель на структуру сообщения.</span></div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="comment"> * @return RS_RES Статус о состоянии RS после инициализации приема.</span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00043" data-start="{" data-end="}">
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="group___r_s___t_o_o_l_s.html#ga1b59697f4b7fad81f9d5fd9fffebac2f"> 43</a></span><a class="code hl_enumeration" href="group___r_s___t_o_o_l_s.html#ga727154b368397b4796aa892de12a2289">RS_StatusTypeDef</a> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga1b59697f4b7fad81f9d5fd9fffebac2f">RS_Receive_IT</a>(<a class="code hl_struct" href="struct_r_s___handle_type_def.html">RS_HandleTypeDef</a> *hRS, <a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> *RS_msg)</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> <a class="code hl_enumeration" href="group___r_s___t_o_o_l_s.html#ga727154b368397b4796aa892de12a2289">RS_StatusTypeDef</a> RS_RES = 0;</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> HAL_StatusTypeDef uart_res = 0;</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="comment">//-------------CHECK RS LINE----------------</span></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="comment">// check that receive isnt busy</span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">if</span>( RS_Is_RX_Busy(hRS) ) <span class="comment">// if tx busy - return busy status</span></div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">return</span> RS_BUSY; </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">//-----------INITIALIZE RECEIVE-------------</span></div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="comment">// if all OK: start receiving</span></div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <a class="code hl_define" href="group___r_s___t_o_o_l_s.html#gae0f359f0af89adf45bac275a3f5ee34d">RS_EnableReceive</a>();</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> RS_Set_Busy(hRS); <span class="comment">// set RS busy </span></div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> RS_Set_RX_Flags(hRS); <span class="comment">// initialize flags for receive</span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a6a3f47a1a3476d6e9df997e1dc9da8c4">pMessagePtr</a> = RS_msg; <span class="comment">// set pointer to message structire for filling it from UARTHandler fucntions</span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">if</span>(!hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a6fa98c2955d01e07dc59f73d072bb37e">f</a>.<a class="code hl_variable" href="struct_r_s___flags_type_def.html#a1513dc1265334c20a82b55b1090024c8">RX_Continue</a>) <span class="comment">// if not continue receiving</span></div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a495a29011412451e53459f9e1513814d">RS_Message_Size</a> = 0; <span class="comment">// set ptr to start buffer</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="comment">// start receiving</span></div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> __HAL_UART_ENABLE_IT(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#ade93e3a680f5fbc5275f58e20227198b">huart</a>, UART_IT_IDLE);</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> uart_res = HAL_UART_Receive_IT(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#ade93e3a680f5fbc5275f58e20227198b">huart</a>, &amp;hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a1bc8d1ccb57c20cad4f70a04f751a67a">pBufferPtr</a>[hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a495a29011412451e53459f9e1513814d">RS_Message_Size</a>], <a class="code hl_define" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#ga7d1e9e8bb8f40ce788836da0739f897c">MSG_SIZE_MAX</a>); <span class="comment">// receive until ByteCnt+1 byte, </span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="comment">// then in Callback restart receive for rest bytes </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> <span class="comment">// if receive isnt started - abort RS</span></div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">if</span>(uart_res != HAL_OK)</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> RS_RES = <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga1ffe808b3640f253b1783295d6990962">RS_Abort</a>(hRS, <a class="code hl_enumvalue" href="group___r_s___t_o_o_l_s.html#ggab7c55bd8bb15b0eecc8c525019d4a1cca5699efe0ab3cdfd4f6ef175ecb809306">ABORT_RS</a>);</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <a class="code hl_define" href="group___r_s___d_e_b_u_g.html#ga830a5ed90667bf50ab8c409dcadb2a39">printf_rs_err</a>(<span class="stringliteral">&quot;Failed to start RS receiving...&quot;</span>);</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <a class="code hl_define" href="group___r_s___d_e_b_u_g.html#ga49af29ab3927cad105c1d2b018a767e9">TrackerCnt_Err</a>(hRS-&gt;rs_err);</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> <span class="keywordflow">else</span></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> RS_RES = RS_OK;</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <a class="code hl_define" href="group___r_s___d_e_b_u_g.html#ga30a03e8d8912be85a203c829b581f999">printf_rs</a>(<span class="stringliteral">&quot;Start Receiving...&quot;</span>);</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <a class="code hl_define" href="group___r_s___d_e_b_u_g.html#ga23de0006aa08984cfeddb6aa5e512fa1">TrackerCnt_Ok</a>(hRS-&gt;rs_err);</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> hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a8bbcb263ae7a61790b559bcb55cd9aa9">RS_STATUS</a> = RS_RES;</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">return</span> RS_RES; <span class="comment">// returns result of receive init </span></div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span>}</div>
</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">/**</span></div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="comment"> * @brief Начать передачу по прерываниям.</span></div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="comment"> * @param hRS Указатель на хендлер RS.</span></div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="comment"> * @param RS_msg Указатель на структуру сообщения.</span></div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="comment"> * @return RS_RES Статус о состоянии RS после инициализации передачи.</span></div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00091" data-start="{" data-end="}">
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"><a class="line" href="group___r_s___t_o_o_l_s.html#ga2e69a97a8b6e0b5855116d88c0e17cb9"> 91</a></span><a class="code hl_enumeration" href="group___r_s___t_o_o_l_s.html#ga727154b368397b4796aa892de12a2289">RS_StatusTypeDef</a> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga2e69a97a8b6e0b5855116d88c0e17cb9">RS_Transmit_IT</a>(<a class="code hl_struct" href="struct_r_s___handle_type_def.html">RS_HandleTypeDef</a> *hRS, <a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> *RS_msg)</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> <a class="code hl_enumeration" href="group___r_s___t_o_o_l_s.html#ga727154b368397b4796aa892de12a2289">RS_StatusTypeDef</a> RS_RES = 0;</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> HAL_StatusTypeDef uart_res = 0;</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> <span class="comment">//-------------CHECK RS LINE----------------</span></div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="comment">// check that transmit isnt busy</span></div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">if</span>( RS_Is_TX_Busy(hRS) ) <span class="comment">// if tx busy - return busy status</span></div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">return</span> RS_BUSY;</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="comment">// check receive line</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> </div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="comment">//------------COLLECT MESSAGE---------------</span></div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> RS_RES = <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga1cd98c55f6f359e3ab93d0f9cf912ab5">RS_Collect_Message</a>(hRS, RS_msg, hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a1bc8d1ccb57c20cad4f70a04f751a67a">pBufferPtr</a>);</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">if</span> (RS_RES != RS_OK) <span class="comment">// if message isnt collect - stop RS and return error in RS_RES</span></div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> {<span class="comment">// need collect message status, so doesnt write abort to RS_RES</span></div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga1ffe808b3640f253b1783295d6990962">RS_Abort</a>(hRS, <a class="code hl_enumvalue" href="group___r_s___t_o_o_l_s.html#ggab7c55bd8bb15b0eecc8c525019d4a1cca5699efe0ab3cdfd4f6ef175ecb809306">ABORT_RS</a>);</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#gab43a3b93c85adee5e3c561922d7ea2ef">RS_Handle_Receive_Start</a>(hRS, hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a6a3f47a1a3476d6e9df997e1dc9da8c4">pMessagePtr</a>); <span class="comment">// restart receive</span></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> <span class="keywordflow">else</span> <span class="comment">// if collect successful</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> </div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="comment">//----------INITIALIZE TRANSMIT-------------</span></div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <a class="code hl_define" href="group___r_s___t_o_o_l_s.html#gaeddade966945ed376bb152151b493d6f">RS_EnableTransmit</a>();</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> RS_Set_Busy(hRS); <span class="comment">// set RS busy</span></div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> RS_Set_TX_Flags(hRS); <span class="comment">// initialize flags for transmit IT</span></div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a6a3f47a1a3476d6e9df997e1dc9da8c4">pMessagePtr</a> = RS_msg; <span class="comment">// set pointer for filling given structure from UARTHandler fucntion</span></div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">if</span>(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a495a29011412451e53459f9e1513814d">RS_Message_Size</a> &lt;= 0)</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> RS_RES = <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga1ffe808b3640f253b1783295d6990962">RS_Abort</a>(hRS, <a class="code hl_enumvalue" href="group___r_s___t_o_o_l_s.html#ggab7c55bd8bb15b0eecc8c525019d4a1cca5699efe0ab3cdfd4f6ef175ecb809306">ABORT_RS</a>);</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <a class="code hl_define" href="group___r_s___d_e_b_u_g.html#ga49af29ab3927cad105c1d2b018a767e9">TrackerCnt_Err</a>(hRS-&gt;rs_err);</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">return</span> RS_ERR;</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">// if all OK: start transmitting</span></div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> uart_res = HAL_UART_Transmit_IT(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#ade93e3a680f5fbc5275f58e20227198b">huart</a>, hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a1bc8d1ccb57c20cad4f70a04f751a67a">pBufferPtr</a>, hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a495a29011412451e53459f9e1513814d">RS_Message_Size</a>); </div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="comment">// if transmit isnt started - abort RS</span></div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">if</span>(uart_res != 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> RS_RES = <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga1ffe808b3640f253b1783295d6990962">RS_Abort</a>(hRS, <a class="code hl_enumvalue" href="group___r_s___t_o_o_l_s.html#ggab7c55bd8bb15b0eecc8c525019d4a1cca5699efe0ab3cdfd4f6ef175ecb809306">ABORT_RS</a>);</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <a class="code hl_define" href="group___r_s___d_e_b_u_g.html#ga830a5ed90667bf50ab8c409dcadb2a39">printf_rs_err</a>(<span class="stringliteral">&quot;Failed to start RS transmitting...&quot;</span>);</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <a class="code hl_define" href="group___r_s___d_e_b_u_g.html#ga49af29ab3927cad105c1d2b018a767e9">TrackerCnt_Err</a>(hRS-&gt;rs_err);</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> RS_RES = RS_OK;</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <a class="code hl_define" href="group___r_s___d_e_b_u_g.html#ga30a03e8d8912be85a203c829b581f999">printf_rs</a>(<span class="stringliteral">&quot;Start Transmitting...&quot;</span>);</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <a class="code hl_define" href="group___r_s___d_e_b_u_g.html#ga23de0006aa08984cfeddb6aa5e512fa1">TrackerCnt_Ok</a>(hRS-&gt;rs_err);</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> </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> hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a8bbcb263ae7a61790b559bcb55cd9aa9">RS_STATUS</a> = RS_RES;</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">return</span> RS_RES; <span class="comment">// returns result of transmit init </span></div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span>}</div>
</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"> * @brief Инициалазация структуры @ref RS_HandleTypeDef.</span></div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span><span class="comment"> * @param hRS Указатель на хендлер RS.</span></div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="comment"> * @param suart Указатель на структуру с настройками UART.</span></div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span><span class="comment"> * @param stim Указатель на структуру с настройками таймера.</span></div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span><span class="comment"> * @param pRS_BufferPtr Указатель на буффер для приема-передачи по UART. Если он NULL, то поставиться библиотечный буфер.</span></div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span><span class="comment"> * @return RS_RES Статус о состоянии RS после инициализации.</span></div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span><span class="comment"> * @details Инициализация перефирии и структуры для приема-передачи по RS.</span></div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00156" data-start="{" data-end="}">
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"><a class="line" href="group___r_s___t_o_o_l_s.html#gaa261bb0d37e7f18f04fb4353aa0f5c45"> 156</a></span><a class="code hl_enumeration" href="group___r_s___t_o_o_l_s.html#ga727154b368397b4796aa892de12a2289">RS_StatusTypeDef</a> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#gaa261bb0d37e7f18f04fb4353aa0f5c45">RS_Init</a>(<a class="code hl_struct" href="struct_r_s___handle_type_def.html">RS_HandleTypeDef</a> *hRS, UART_HandleTypeDef *huart, TIM_HandleTypeDef *htim, uint8_t *pRS_BufferPtr)</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">// check that hRS is defined</span></div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">if</span> (hRS == NULL)</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">return</span> RS_ERR;</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="comment">// check that huart is defined</span></div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">if</span> (huart == NULL) </div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">return</span> RS_ERR;</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> hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#ade93e3a680f5fbc5275f58e20227198b">huart</a> = huart;</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> hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#aef8875f7628f280ed88f74eb762e0d99">htim</a> = htim;</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="comment">// check that buffer is defined</span></div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">if</span> (hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a1bc8d1ccb57c20cad4f70a04f751a67a">pBufferPtr</a> == NULL)</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> hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a1bc8d1ccb57c20cad4f70a04f751a67a">pBufferPtr</a> = RS_Buffer; <span class="comment">// if no - set default</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> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a1bc8d1ccb57c20cad4f70a04f751a67a">pBufferPtr</a> = pRS_BufferPtr; <span class="comment">// if yes - set by user</span></div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> </div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">return</span> RS_OK;</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span>}</div>
</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><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><span class="comment"> * @brief Отменить прием/передачу RS/UART.</span></div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span><span class="comment"> * @param hRS Указатель на хендлер RS.</span></div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span><span class="comment"> * @param AbortMode Выбор, что надо отменить.</span></div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span><span class="comment"> - ABORT_TX: Отмена передачи по ЮАРТ, с очищением флагов TX,</span></div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span><span class="comment"> - ABORT_RX: Отмена приема по ЮАРТ, с очищением флагов RX,</span></div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span><span class="comment"> - ABORT_RX_TX: Отмена приема и передачи по ЮАРТ,</span></div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span><span class="comment"> - ABORT_RS: Отмена приема-передачи RS, с очищением всей структуры.</span></div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span><span class="comment"> * @return RS_RES Статус о состоянии RS после аборта.</span></div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span><span class="comment"> * @details Отмена работы UART в целом или отмена приема/передачи RS. </span></div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span><span class="comment"> Также очищается хендл hRS.</span></div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00193" data-start="{" data-end="}">
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"><a class="line" href="group___r_s___t_o_o_l_s.html#ga1ffe808b3640f253b1783295d6990962"> 193</a></span><a class="code hl_enumeration" href="group___r_s___t_o_o_l_s.html#ga727154b368397b4796aa892de12a2289">RS_StatusTypeDef</a> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga1ffe808b3640f253b1783295d6990962">RS_Abort</a>(<a class="code hl_struct" href="struct_r_s___handle_type_def.html">RS_HandleTypeDef</a> *hRS, <a class="code hl_enumeration" href="group___r_s___t_o_o_l_s.html#gab7c55bd8bb15b0eecc8c525019d4a1cc">RS_AbortTypeDef</a> AbortMode)</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span>{</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> HAL_StatusTypeDef uart_res = 0;</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> </div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga1de0a597d043b64d0a19bc393cc1b3fd">RS_Timeout_Stop</a>(hRS);</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>((AbortMode&amp;<a class="code hl_enumvalue" href="group___r_s___t_o_o_l_s.html#ggab7c55bd8bb15b0eecc8c525019d4a1cca5699efe0ab3cdfd4f6ef175ecb809306">ABORT_RS</a>) == 0x00)</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="keywordflow">if</span>((AbortMode&amp;<a class="code hl_enumvalue" href="group___r_s___t_o_o_l_s.html#ggab7c55bd8bb15b0eecc8c525019d4a1ccaf0519a0ddda6fff97dd61ce0f3320df9">ABORT_RX</a>) == <a class="code hl_enumvalue" href="group___r_s___t_o_o_l_s.html#ggab7c55bd8bb15b0eecc8c525019d4a1ccaf0519a0ddda6fff97dd61ce0f3320df9">ABORT_RX</a>)</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> {</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> uart_res = HAL_UART_AbortReceive(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#ade93e3a680f5fbc5275f58e20227198b">huart</a>); <span class="comment">// abort receive</span></div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> RS_Reset_RX_Flags(hRS);</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> }</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> <span class="keywordflow">if</span>((AbortMode&amp;<a class="code hl_enumvalue" href="group___r_s___t_o_o_l_s.html#ggab7c55bd8bb15b0eecc8c525019d4a1cca95c6ce0fee466ba98e43213d001ecc16">ABORT_TX</a>) == <a class="code hl_enumvalue" href="group___r_s___t_o_o_l_s.html#ggab7c55bd8bb15b0eecc8c525019d4a1cca95c6ce0fee466ba98e43213d001ecc16">ABORT_TX</a>)</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> {</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> uart_res = HAL_UART_AbortTransmit(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#ade93e3a680f5fbc5275f58e20227198b">huart</a>); <span class="comment">// abort transmit</span></div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> RS_Reset_TX_Flags(hRS);</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> }</div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">else</span></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> uart_res = HAL_UART_Abort(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#ade93e3a680f5fbc5275f58e20227198b">huart</a>);</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> RS_Clear_All(hRS);</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> hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a8bbcb263ae7a61790b559bcb55cd9aa9">RS_STATUS</a> = RS_ABORTED;</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">return</span> RS_ABORTED;</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span>}</div>
</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> </div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span><span class="comment">//-------------------------GENERAL FUNCTIONS-------------------------</span></div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span><span class="comment">//-------------------------------------------------------------------</span></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> </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">//-------------------------------------------------------------------</span></div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span><span class="comment">//--------------------CALLBACK/HANDLER FUNCTIONS---------------------</span><span class="comment"></span></div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span><span class="comment">/**</span></div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span><span class="comment"> * @brief Обработчик для начала приема.</span></div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span><span class="comment"> * @param hRS Указатель на хендлер RS.</span></div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span><span class="comment"> * @param RS_msg Указатель на структуру сообщения.</span></div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span><span class="comment"> * @return RS_RES Статус о состоянии RS после инициализации приема или окончания общения.</span></div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span><span class="comment"> * @details Определяет начинать прием команды/ответа или нет.</span></div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00237" data-start="{" data-end="}">
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"><a class="line" href="group___r_s___t_o_o_l_s.html#gab43a3b93c85adee5e3c561922d7ea2ef"> 237</a></span><a class="code hl_enumeration" href="group___r_s___t_o_o_l_s.html#ga727154b368397b4796aa892de12a2289">RS_StatusTypeDef</a> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#gab43a3b93c85adee5e3c561922d7ea2ef">RS_Handle_Receive_Start</a>(<a class="code hl_struct" href="struct_r_s___handle_type_def.html">RS_HandleTypeDef</a> *hRS, <a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> *RS_msg)</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> <a class="code hl_enumeration" href="group___r_s___t_o_o_l_s.html#ga727154b368397b4796aa892de12a2289">RS_StatusTypeDef</a> RS_RES = 0;</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> </div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">switch</span>(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a82f0ad79cd234cd26076bfcfbc5c1194">sRS_Mode</a>)</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> <span class="comment">// В режиме мастер</span></div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="group___r_s___t_o_o_l_s.html#gga13e1c056947b06c7dc29b90d22f683a7a15953c59b7f547b318edab14070873c5">RS_MASTER_REQUEST</a>: </div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#gac3a7bbc060a4250c160d51f0a0ca6cf8">RS_Timeout_Start</a>(hRS); <span class="comment">// сразу запускаем таймаут и начинаем прием</span></div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> <span class="comment">// В режиме слейв</span></div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="group___r_s___t_o_o_l_s.html#gga13e1c056947b06c7dc29b90d22f683a7aee8cfd8ce9edacc055a195ed454a49dc">RS_SLAVE_ALWAYS_WAIT</a>:</div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> RS_RES = <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga1b59697f4b7fad81f9d5fd9fffebac2f">RS_Receive_IT</a>(hRS, RS_msg); <span class="comment">// Просто запускаем фоновый прием</span></div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">break</span>; </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">case</span> <a class="code hl_enumvalue" href="group___r_s___t_o_o_l_s.html#gga13e1c056947b06c7dc29b90d22f683a7ad118e897a520ddc9c77a905684079550">RS_RESERVED</a>:</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> RS_Set_Free(hRS); RS_RES = RS_OK; <span class="keywordflow">break</span>; <span class="comment">// end RS communication (set RS unbusy)</span></div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> }</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="keywordflow">if</span>(RS_RES != RS_OK)</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> <a class="code hl_define" href="group___r_s___d_e_b_u_g.html#ga49af29ab3927cad105c1d2b018a767e9">TrackerCnt_Err</a>(hRS-&gt;rs_err);</div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> }</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">return</span> RS_RES;</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span>}<span class="comment"></span></div>
</div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span><span class="comment">/** </span></div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span><span class="comment"> * @brief Обработчик для начала передачи.</span></div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span><span class="comment"> * @param hRS Указатель на хендлер RS.</span></div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span><span class="comment"> * @param RS_msg Указатель на структуру сообщения.</span></div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span><span class="comment"> * @return RS_RES Статус о состоянии RS после инициализации передачи.</span></div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span><span class="comment"> * @details Определяет отвечать ли на команду или нет.</span></div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00269" data-start="{" data-end="}">
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"><a class="line" href="group___r_s___t_o_o_l_s.html#ga330f6cfcdaab1f239054c0d91be3c5bc"> 269</a></span><a class="code hl_enumeration" href="group___r_s___t_o_o_l_s.html#ga727154b368397b4796aa892de12a2289">RS_StatusTypeDef</a> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga330f6cfcdaab1f239054c0d91be3c5bc">RS_Handle_Transmit_Start</a>(<a class="code hl_struct" href="struct_r_s___handle_type_def.html">RS_HandleTypeDef</a> *hRS, <a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> *RS_msg)</div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span>{ </div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> <a class="code hl_enumeration" href="group___r_s___t_o_o_l_s.html#ga727154b368397b4796aa892de12a2289">RS_StatusTypeDef</a> RS_RES = 0;</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="keywordflow">switch</span>(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a82f0ad79cd234cd26076bfcfbc5c1194">sRS_Mode</a>)</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">case</span> <a class="code hl_enumvalue" href="group___r_s___t_o_o_l_s.html#gga13e1c056947b06c7dc29b90d22f683a7aee8cfd8ce9edacc055a195ed454a49dc">RS_SLAVE_ALWAYS_WAIT</a>: <span class="comment">// in slave mode always response</span></div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="group___r_s___t_o_o_l_s.html#gga13e1c056947b06c7dc29b90d22f683a7ad118e897a520ddc9c77a905684079550">RS_RESERVED</a>: <span class="comment">// transmit response</span></div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="group___r_s___t_o_o_l_s.html#gga13e1c056947b06c7dc29b90d22f683a7a15953c59b7f547b318edab14070873c5">RS_MASTER_REQUEST</a>: <span class="comment">// transmit response</span></div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> RS_RES = <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga2e69a97a8b6e0b5855116d88c0e17cb9">RS_Transmit_IT</a>(hRS, RS_msg); <span class="keywordflow">break</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> </div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">if</span>(RS_RES != RS_OK)</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="keywordflow">if</span>(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a82f0ad79cd234cd26076bfcfbc5c1194">sRS_Mode</a> &lt; <a class="code hl_define" href="group___r_s___t_o_o_l_s.html#ga9560ee688d4bcdd90a47c110be4ecf92">RS_MASTER_MODE_START</a>)</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> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#gab43a3b93c85adee5e3c561922d7ea2ef">RS_Handle_Receive_Start</a>(hRS, RS_msg);</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> </div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> <a class="code hl_define" href="group___r_s___d_e_b_u_g.html#ga49af29ab3927cad105c1d2b018a767e9">TrackerCnt_Err</a>(hRS-&gt;rs_err);</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> }</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> RS_RES;</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span>}</div>
</div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span><span class="comment"></span> </div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span><span class="comment">/** </span></div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span><span class="comment"> * @brief UART TX Callback: коллбек после окончания передачи.</span></div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span><span class="comment"> * @param hRS Указатель на хендлер RS.</span></div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span><span class="comment"> * @return RS_RES Статус о состоянии RS после обработки приема.</span></div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span><span class="comment"> * @details Определяет поведение RS после передачи сообщения.</span></div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00300" data-start="{" data-end="}">
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"><a class="line" href="group___r_s___t_o_o_l_s.html#ga7180b913ba795c07637680982d7f45ac"> 300</a></span><a class="code hl_enumeration" href="group___r_s___t_o_o_l_s.html#ga727154b368397b4796aa892de12a2289">RS_StatusTypeDef</a> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga7180b913ba795c07637680982d7f45ac">RS_UART_TxCpltCallback</a>(<a class="code hl_struct" href="struct_r_s___handle_type_def.html">RS_HandleTypeDef</a> *hRS)</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> <a class="code hl_enumeration" href="group___r_s___t_o_o_l_s.html#ga727154b368397b4796aa892de12a2289">RS_StatusTypeDef</a> RS_RES = RS_OK;</div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> HAL_StatusTypeDef uart_res = 0;</div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> </div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> <span class="comment">//--------------ENDING TRANSMITTING-------------</span></div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> RS_Set_TX_End(hRS);</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="comment">//-----------START RECEIVING or END RS----------</span></div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> RS_RES = <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#gab43a3b93c85adee5e3c561922d7ea2ef">RS_Handle_Receive_Start</a>(hRS, hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a6a3f47a1a3476d6e9df997e1dc9da8c4">pMessagePtr</a>);</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="keywordflow">return</span> RS_RES;</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span>}</div>
</div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span><span class="comment"></span> </div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span><span class="comment">/** </span></div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span><span class="comment">* @brief Обработчик прерывания UART.</span></div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span><span class="comment"> * @param hRS Указатель на хендлер RS.</span></div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span><span class="comment"> * @details Обрабатывает ошибки если есть и вызывает RS Коллбеки.</span></div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span><span class="comment"> * Добавить вызов этой функции в UARTx_IRQHandler() ВМЕСТО HAL_UART_IRQHandler().</span></div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00320" data-start="{" data-end="}">
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"><a class="line" href="group___r_s___t_o_o_l_s.html#gab27567456df0329130c7fe4fc43c6ee1"> 320</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#gab27567456df0329130c7fe4fc43c6ee1">RS_UART_Handler</a>(<a class="code hl_struct" href="struct_r_s___handle_type_def.html">RS_HandleTypeDef</a> *hRS)</div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span>{</div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> <span class="keywordflow">if</span>(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#ade93e3a680f5fbc5275f58e20227198b">huart</a> == NULL)</div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> {</div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> } </div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> <a class="code hl_define" href="group___r_s___d_e_b_u_g.html#ga8c401e4d5d440001c1d879984107bb79">RS_UART_Handler_ENTER</a>();</div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> <span class="comment">//-------------CHECK IDLE FLAG FIRST------------- </span></div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> <span class="comment">/* Проверяем флаг IDLE в первую очередь - это гарантирует обработку только после idle */</span></div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> <span class="keywordflow">if</span>(__HAL_UART_GET_FLAG(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#ade93e3a680f5fbc5275f58e20227198b">huart</a>, UART_FLAG_IDLE) &amp;&amp; __HAL_UART_GET_IT_SOURCE(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#ade93e3a680f5fbc5275f58e20227198b">huart</a>, UART_IT_IDLE))</div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> {</div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> __HAL_UART_CLEAR_IDLEFLAG(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#ade93e3a680f5fbc5275f58e20227198b">huart</a>); <span class="comment">// Важно: очистить флаг IDLE</span></div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> <span class="comment">//-------------STANDARD UART HANDLING-------------</span></div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> HAL_UART_IRQHandler(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#ade93e3a680f5fbc5275f58e20227198b">huart</a>);</div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a6fa98c2955d01e07dc59f73d072bb37e">f</a>.<a class="code hl_variable" href="struct_r_s___flags_type_def.html#a1513dc1265334c20a82b55b1090024c8">RX_Continue</a> = 0;</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> </div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <span class="comment">// Если прием активен и мы получили IDLE - это конец фрейма</span></div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> <span class="keywordflow">if</span>(RS_Is_RX_Busy(hRS) &amp;&amp; hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a6fa98c2955d01e07dc59f73d072bb37e">f</a>.<a class="code hl_variable" href="struct_r_s___flags_type_def.html#adfc04070a08e90f514072fff20efc744">RX_Ongoing</a>)</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="comment">// Получаем количество фактически принятых байтов</span></div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a495a29011412451e53459f9e1513814d">RS_Message_Size</a> += hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#ade93e3a680f5fbc5275f58e20227198b">huart</a>-&gt;RxXferSize - hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#ade93e3a680f5fbc5275f58e20227198b">huart</a>-&gt;RxXferCount;</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> </div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">if</span>(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a495a29011412451e53459f9e1513814d">RS_Message_Size</a> &gt; 0)</div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> { </div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> <span class="comment">// Принудительно завершаем прием (получили сообщение)</span></div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> HAL_UART_AbortReceive(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#ade93e3a680f5fbc5275f58e20227198b">huart</a>); <span class="comment">// abort receive </span></div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</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> RS_Set_RX_End(hRS);</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> <span class="comment">// Парсим наше сообщение</span></div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a8bbcb263ae7a61790b559bcb55cd9aa9">RS_STATUS</a> = <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga3500b3fa91d05a94cf8da5cc5ce338f5">RS_Parse_Message</a>(hRS, hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a6a3f47a1a3476d6e9df997e1dc9da8c4">pMessagePtr</a>, hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a1bc8d1ccb57c20cad4f70a04f751a67a">pBufferPtr</a>);</div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> </div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> <span class="comment">// Если сообещине принято корректно</span></div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> <span class="keywordflow">if</span>(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a8bbcb263ae7a61790b559bcb55cd9aa9">RS_STATUS</a> == RS_OK) </div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> {</div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga1de0a597d043b64d0a19bc393cc1b3fd">RS_Timeout_Stop</a>(hRS);</div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> </div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a3b377cb0eabf384a7e715fb030218290">lastPacketTick</a> = local_time();</div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> <span class="keywordflow">if</span>(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a82f0ad79cd234cd26076bfcfbc5c1194">sRS_Mode</a> &lt; <a class="code hl_define" href="group___r_s___t_o_o_l_s.html#ga9560ee688d4bcdd90a47c110be4ecf92">RS_MASTER_MODE_START</a>)</div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> {</div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga8b7bcc84cb8192a58fe87b662fbd9690">RS_Response</a>(hRS, hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a6a3f47a1a3476d6e9df997e1dc9da8c4">pMessagePtr</a>); <span class="comment">// отвечаем на запрос</span></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> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> {</div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> RS_Set_Free(hRS); <span class="comment">// освобожднаем RS</span></div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> <span class="keywordflow">if</span>(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a6e584c7559c702d3382dbb9aa572b71b">pCallback</a>)</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> hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a6e584c7559c702d3382dbb9aa572b71b">pCallback</a>(hRS, hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a6a3f47a1a3476d6e9df997e1dc9da8c4">pMessagePtr</a>); <span class="comment">// обрабатываем ответ</span></div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> }</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> }</div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">else</span></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> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#gab43a3b93c85adee5e3c561922d7ea2ef">RS_Handle_Receive_Start</a>(hRS, hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a6a3f47a1a3476d6e9df997e1dc9da8c4">pMessagePtr</a>); <span class="comment">// если сообщение пришло не полностью - продолжаем прием до таймаута</span></div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> }</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="keywordflow">return</span>; <span class="comment">// Выходим после обработки IDLE</span></div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> }</div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> <span class="keywordflow">else</span></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">//-------------STANDARD UART HANDLING-------------</span></div>
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> HAL_UART_IRQHandler(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#ade93e3a680f5fbc5275f58e20227198b">huart</a>);</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> </div>
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> </div>
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> <span class="comment">//-------------CALL RS CALLBACKS------------ </span></div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> <span class="comment">/* IF NO ERROR OCCURS */</span></div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> <span class="keywordflow">if</span>(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#ade93e3a680f5fbc5275f58e20227198b">huart</a>-&gt;ErrorCode == 0) </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="comment">// if first byte is received and receive is active</span></div>
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> <span class="keywordflow">if</span>((hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#ade93e3a680f5fbc5275f58e20227198b">huart</a>-&gt;RxXferCount+1 == hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#ade93e3a680f5fbc5275f58e20227198b">huart</a>-&gt;RxXferSize) &amp;&amp; RS_Is_RX_Busy(hRS)) </div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> {</div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#gac3a7bbc060a4250c160d51f0a0ca6cf8">RS_Timeout_Start</a>(hRS);</div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> }</div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#gad3d2e8fb9c2879e1ddb967cff6124521">RS_Timeout_Update</a>(hRS);</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">/* RX Callback - теперь НЕ вызываем здесь, ждем IDLE */</span></div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> </div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> <span class="comment">/* TX Callback */</span></div>
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> <span class="keywordflow">if</span> ((hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#ade93e3a680f5fbc5275f58e20227198b">huart</a>-&gt;TxXferCount == 0U) &amp;&amp; RS_Is_TX_Busy(hRS) &amp;&amp; <span class="comment">// if all bytes are transmited and transmit is active</span></div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#ade93e3a680f5fbc5275f58e20227198b">huart</a>-&gt;gState != HAL_UART_STATE_BUSY_TX) <span class="comment">// also check that receive &quot;REALLY&quot; isnt busy</span></div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga7180b913ba795c07637680982d7f45ac">RS_UART_TxCpltCallback</a>(hRS);</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="comment">/* NOTE: RX Callback больше не вызывается здесь - ждем IDLE для гарантии конца фрейма */</span></div>
<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> }</div>
<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> <span class="comment">//----------------ERRORS HANDLER----------------</span></div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> {</div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> <span class="keywordflow">if</span> (hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#ade93e3a680f5fbc5275f58e20227198b">huart</a>-&gt;ErrorCode &amp; HAL_UART_ERROR_ORE)</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> <a class="code hl_function" href="group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s.html#gaff7c464d7d66399232770bac78b653a4">MB_Diagnostics_CharacterOverrunCnt</a>(); <span class="comment">// &lt;-- Обнаружено переполнение</span></div>
<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> }</div>
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> <span class="comment">//TrackerCnt_Err(hRS-&gt;rs_err);</span></div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> <span class="comment">/* de-init uart transfer */</span></div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga1ffe808b3640f253b1783295d6990962">RS_Abort</a>(hRS, <a class="code hl_enumvalue" href="group___r_s___t_o_o_l_s.html#ggab7c55bd8bb15b0eecc8c525019d4a1cca5699efe0ab3cdfd4f6ef175ecb809306">ABORT_RS</a>);</div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#gab43a3b93c85adee5e3c561922d7ea2ef">RS_Handle_Receive_Start</a>(hRS, hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a6a3f47a1a3476d6e9df997e1dc9da8c4">pMessagePtr</a>);</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="comment">// later, maybe, will be added specific handlers for err </span></div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> }</div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> <a class="code hl_define" href="group___r_s___d_e_b_u_g.html#gade69fd26928788dd6f0278fcd15885ff">RS_UART_Handler_EXIT</a>();</div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span>}</div>
</div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> </div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span><span class="comment"></span> </div>
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span><span class="comment">/**</span></div>
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span><span class="comment"> * @brief Обработчик прерывания TIM.</span></div>
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span><span class="comment"> * @param hRS Указатель на хендлер RS.</span></div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span><span class="comment"> * @details Попадание сюда = таймаут и перезапуск RS приема</span></div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span><span class="comment"> * Добавить вызов этой функции в TIMx_IRQHandler() ВМЕСТО HAL_TIM_IRQHandler().</span></div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00433" data-start="{" data-end="}">
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"><a class="line" href="group___r_s___t_o_o_l_s.html#ga2d356b2a0b4af43460bb2cacb81779ce"> 433</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga2d356b2a0b4af43460bb2cacb81779ce">RS_TIM_Handler</a>(<a class="code hl_struct" href="struct_r_s___handle_type_def.html">RS_HandleTypeDef</a> *hRS)</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="keywordflow">if</span>(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#aef8875f7628f280ed88f74eb762e0d99">htim</a> == NULL)</div>
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> {</div>
<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> <span class="keywordflow">return</span>;</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> <a class="code hl_define" href="group___r_s___d_e_b_u_g.html#gab9d308969f924234bc879a93ffb80473">RS_TIM_Handler_ENTER</a>();</div>
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> </div>
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> HAL_TIM_IRQHandler(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#aef8875f7628f280ed88f74eb762e0d99">htim</a>);</div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> </div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga1ffe808b3640f253b1783295d6990962">RS_Abort</a>(hRS, <a class="code hl_enumvalue" href="group___r_s___t_o_o_l_s.html#ggab7c55bd8bb15b0eecc8c525019d4a1cca5699efe0ab3cdfd4f6ef175ecb809306">ABORT_RS</a>);</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> hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a8bbcb263ae7a61790b559bcb55cd9aa9">RS_STATUS</a> = RS_TIMEOUT;</div>
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> </div>
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> <span class="keywordflow">if</span>(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a82f0ad79cd234cd26076bfcfbc5c1194">sRS_Mode</a> &lt; <a class="code hl_define" href="group___r_s___t_o_o_l_s.html#ga9560ee688d4bcdd90a47c110be4ecf92">RS_MASTER_MODE_START</a>)</div>
<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span> <span class="keywordflow">if</span>(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a6a3f47a1a3476d6e9df997e1dc9da8c4">pMessagePtr</a>-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a277ed439b65aedbf03bd112c073e6a32">MbAddr</a> == hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a01e2c95a23aa3eed1f002e2329a10942">ID</a>) <span class="comment">// ошибка если таймаут по нашему сообщению</span></div>
<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span> <a class="code hl_define" href="group___r_s___d_e_b_u_g.html#ga49af29ab3927cad105c1d2b018a767e9">TrackerCnt_Err</a>(hRS-&gt;rs_err);</div>
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> </div>
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> <span class="keywordflow">if</span>(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a82f0ad79cd234cd26076bfcfbc5c1194">sRS_Mode</a> &gt;= <a class="code hl_define" href="group___r_s___t_o_o_l_s.html#ga9560ee688d4bcdd90a47c110be4ecf92">RS_MASTER_MODE_START</a>) </div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> { <span class="comment">// Мастер: коллбек и освобождение для нового запроса</span></div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> RS_Set_Free(hRS);</div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> <span class="keywordflow">if</span>(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a6e584c7559c702d3382dbb9aa572b71b">pCallback</a>)</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> hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a6e584c7559c702d3382dbb9aa572b71b">pCallback</a>(hRS, hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a6a3f47a1a3476d6e9df997e1dc9da8c4">pMessagePtr</a>); <span class="comment">// обрабатываем ответ</span></div>
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> }</div>
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> <span class="comment">// Слейв: перезапускаем прием</span></div>
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#gab43a3b93c85adee5e3c561922d7ea2ef">RS_Handle_Receive_Start</a>(hRS, hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a6a3f47a1a3476d6e9df997e1dc9da8c4">pMessagePtr</a>);</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> <a class="code hl_define" href="group___r_s___d_e_b_u_g.html#gaa026e9bf8672373cfe265f96ea0f6061">RS_TIM_Handler_EXIT</a>();</div>
<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span>}</div>
</div>
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span><span class="comment"></span> </div>
<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span><span class="comment">/**</span></div>
<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span><span class="comment"> * @brief Запуск таймаута приема.</span></div>
<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span><span class="comment"> * @param hRS Указатель на хендлер RS.</span></div>
<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span><span class="comment"> * @return RS_RES Статус операции.</span></div>
<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span><span class="comment"> * @details Запускает таймер для отсчета времени ожидания следующего байта.</span></div>
<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00471" data-start="{" data-end="}">
<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"><a class="line" href="group___r_s___t_o_o_l_s.html#gac3a7bbc060a4250c160d51f0a0ca6cf8"> 471</a></span><a class="code hl_enumeration" href="group___r_s___t_o_o_l_s.html#ga727154b368397b4796aa892de12a2289">RS_StatusTypeDef</a> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#gac3a7bbc060a4250c160d51f0a0ca6cf8">RS_Timeout_Start</a>(<a class="code hl_struct" href="struct_r_s___handle_type_def.html">RS_HandleTypeDef</a> *hRS)</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> <span class="keywordflow">if</span>(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#aef8875f7628f280ed88f74eb762e0d99">htim</a>)</div>
<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> {</div>
<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#aef8875f7628f280ed88f74eb762e0d99">htim</a>-&gt;Instance-&gt;CNT = 0; <span class="comment">// reset cnt;</span></div>
<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> <span class="keywordflow">if</span>(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#aa6da72b8ad446f76484783ca8af0e565">sRS_Timeout</a>) <span class="comment">// if timeout setted</span></div>
<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> {</div>
<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#aef8875f7628f280ed88f74eb762e0d99">htim</a>-&gt;Instance-&gt;ARR = hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#aa6da72b8ad446f76484783ca8af0e565">sRS_Timeout</a>;</div>
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> HAL_TIM_Base_Start_IT(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#aef8875f7628f280ed88f74eb762e0d99">htim</a>);</div>
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> RS_Set_RX_Active_Flags(hRS);</div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> }</div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> }</div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> <span class="keywordflow">return</span> RS_OK;</div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span>}<span class="comment"></span></div>
</div>
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span><span class="comment">/**</span></div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span><span class="comment"> * @brief Остановка таймаута приема.</span></div>
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span><span class="comment"> * @param hRS Указатель на хендлер RS.</span></div>
<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span><span class="comment"> * @return RS_RES Статус операции.</span></div>
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span><span class="comment"> * @details Останавливает таймер ожидания.</span></div>
<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00491" data-start="{" data-end="}">
<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"><a class="line" href="group___r_s___t_o_o_l_s.html#ga1de0a597d043b64d0a19bc393cc1b3fd"> 491</a></span><a class="code hl_enumeration" href="group___r_s___t_o_o_l_s.html#ga727154b368397b4796aa892de12a2289">RS_StatusTypeDef</a> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga1de0a597d043b64d0a19bc393cc1b3fd">RS_Timeout_Stop</a>(<a class="code hl_struct" href="struct_r_s___handle_type_def.html">RS_HandleTypeDef</a> *hRS)</div>
<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span>{</div>
<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> <span class="keywordflow">if</span>(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#aef8875f7628f280ed88f74eb762e0d99">htim</a>)</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">// Останавливаем таймаут</span></div>
<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> <span class="keywordflow">if</span>(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#aa6da72b8ad446f76484783ca8af0e565">sRS_Timeout</a>) </div>
<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> HAL_TIM_Base_Stop_IT(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#aef8875f7628f280ed88f74eb762e0d99">htim</a>);</div>
<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#aef8875f7628f280ed88f74eb762e0d99">htim</a>-&gt;Instance-&gt;CNT = 0;</div>
<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> __HAL_TIM_CLEAR_IT(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#aef8875f7628f280ed88f74eb762e0d99">htim</a>, TIM_IT_UPDATE);</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> <span class="keywordflow">return</span> RS_OK;</div>
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span>}<span class="comment"></span></div>
</div>
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span><span class="comment">/**</span></div>
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span><span class="comment"> * @brief Обновление (сброс) таймаута приема.</span></div>
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span><span class="comment"> * @param hRS Указатель на хендлер RS.</span></div>
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span><span class="comment"> * @return RS_RES Статус операции.</span></div>
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span><span class="comment"> * @details Сбрасывает счетчик таймера в 0.</span></div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00509" data-start="{" data-end="}">
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"><a class="line" href="group___r_s___t_o_o_l_s.html#gad3d2e8fb9c2879e1ddb967cff6124521"> 509</a></span><a class="code hl_enumeration" href="group___r_s___t_o_o_l_s.html#ga727154b368397b4796aa892de12a2289">RS_StatusTypeDef</a> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#gad3d2e8fb9c2879e1ddb967cff6124521">RS_Timeout_Update</a>(<a class="code hl_struct" href="struct_r_s___handle_type_def.html">RS_HandleTypeDef</a> *hRS)</div>
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span>{</div>
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> <span class="keywordflow">if</span>(hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#aef8875f7628f280ed88f74eb762e0d99">htim</a>)</div>
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> {</div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> hRS-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#aef8875f7628f280ed88f74eb762e0d99">htim</a>-&gt;Instance-&gt;CNT = 0; <span class="comment">// reset cnt;</span></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> <span class="keywordflow">return</span> RS_OK;</div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span>}</div>
</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><span class="comment">//--------------------CALLBACK/HANDLER FUNCTIONS---------------------</span></div>
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span><span class="comment">//-------------------------------------------------------------------</span></div>
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> </div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> </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">//-------------------------------------------------------------------</span></div>
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span><span class="comment">//--------------WEAK PROTOTYPES FOR PROCESSING MESSAGE---------------</span><span class="comment"></span></div>
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span><span class="comment">/** </span></div>
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span><span class="comment"> * @brief Пользовательская функция для ответа на запрос по UART.</span></div>
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span><span class="comment"> * @param hRS Указатель на хендлер RS.</span></div>
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span><span class="comment"> * @param RS_msg Указатель на структуру сообщения.</span></div>
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span><span class="comment"> * @return RS_RES Статус о результате ответа на комманду.</span></div>
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00531" data-start="{" data-end="}">
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"><a class="line" href="group___r_s___t_o_o_l_s.html#ga8b7bcc84cb8192a58fe87b662fbd9690"> 531</a></span>__weak <a class="code hl_enumeration" href="group___r_s___t_o_o_l_s.html#ga727154b368397b4796aa892de12a2289">RS_StatusTypeDef</a> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga8b7bcc84cb8192a58fe87b662fbd9690">RS_Response</a>(<a class="code hl_struct" href="struct_r_s___handle_type_def.html">RS_HandleTypeDef</a> *hRS, <a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> *RS_msg)</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="comment">/* Redefine function for user purposes */</span></div>
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> <span class="keywordflow">return</span> RS_ERR;</div>
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span>}</div>
</div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span><span class="comment"></span> </div>
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span><span class="comment">/** </span></div>
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span><span class="comment"> * @brief Пользовательская функция для сбора сообщения в буфер UART.</span></div>
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span><span class="comment"> * @param hRS Указатель на хендлер RS.</span></div>
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span><span class="comment"> * @param RS_msg Указатель на структуру сообщения.</span></div>
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span><span class="comment"> * @param msg_uart_buff Указатель на буффер UART.</span></div>
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span><span class="comment"> * @return RS_RES Статус о результате заполнения буфера.</span></div>
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00544" data-start="{" data-end="}">
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"><a class="line" href="group___r_s___t_o_o_l_s.html#ga1cd98c55f6f359e3ab93d0f9cf912ab5"> 544</a></span>__weak <a class="code hl_enumeration" href="group___r_s___t_o_o_l_s.html#ga727154b368397b4796aa892de12a2289">RS_StatusTypeDef</a> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga1cd98c55f6f359e3ab93d0f9cf912ab5">RS_Collect_Message</a>(<a class="code hl_struct" href="struct_r_s___handle_type_def.html">RS_HandleTypeDef</a> *hRS, <a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> *RS_msg, uint8_t *msg_uart_buff)</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> <span class="comment">/* Redefine function for user purposes */</span></div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> <span class="keywordflow">return</span> RS_ERR;</div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span>}</div>
</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">/** </span></div>
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span><span class="comment"> * @brief Пользовательская функция для парса сообщения из буфера UART.</span></div>
<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span><span class="comment"> * @param hRS Указатель на хендлер RS.</span></div>
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span><span class="comment"> * @param RS_msg Указатель на структуру сообщения.</span></div>
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span><span class="comment"> * @param msg_uart_buff Указатель на буффер UART.</span></div>
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span><span class="comment"> * @return RS_RES Статус о результате заполнения структуры.</span></div>
<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00557" data-start="{" data-end="}">
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"><a class="line" href="group___r_s___t_o_o_l_s.html#ga3500b3fa91d05a94cf8da5cc5ce338f5"> 557</a></span>__weak <a class="code hl_enumeration" href="group___r_s___t_o_o_l_s.html#ga727154b368397b4796aa892de12a2289">RS_StatusTypeDef</a> <a class="code hl_function" href="group___r_s___t_o_o_l_s.html#ga3500b3fa91d05a94cf8da5cc5ce338f5">RS_Parse_Message</a>(<a class="code hl_struct" href="struct_r_s___handle_type_def.html">RS_HandleTypeDef</a> *hRS, <a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> *RS_msg, uint8_t *msg_uart_buff)</div>
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span>{</div>
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> <span class="comment">/* Redefine function for user purposes */</span></div>
<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> <span class="keywordflow">return</span> RS_ERR;</div>
<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span>}</div>
</div>
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span><span class="comment">//--------------WEAK PROTOTYPES FOR PROCESSING MESSAGE---------------</span></div>
<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span><span class="comment">//-------------------------------------------------------------------</span></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_html_gaff7c464d7d66399232770bac78b653a4"><div class="ttname"><a href="group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s.html#gaff7c464d7d66399232770bac78b653a4">MB_Diagnostics_CharacterOverrunCnt</a></div><div class="ttdeci">void MB_Diagnostics_CharacterOverrunCnt(void)</div><div class="ttdoc">Увеличивает счетчик переполнения символов</div><div class="ttdef"><b>Definition</b> <a href="modbus__diag_8c_source.html#l00241">modbus_diag.c:241</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_html_ga7d1e9e8bb8f40ce788836da0739f897c"><div class="ttname"><a href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#ga7d1e9e8bb8f40ce788836da0739f897c">MSG_SIZE_MAX</a></div><div class="ttdeci">#define MSG_SIZE_MAX</div><div class="ttdoc">Size of buffer: max size of whole message.</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00069">modbus_core.h:69</a></div></div>
<div class="ttc" id="agroup___r_s___d_e_b_u_g_html_ga23de0006aa08984cfeddb6aa5e512fa1"><div class="ttname"><a href="group___r_s___d_e_b_u_g.html#ga23de0006aa08984cfeddb6aa5e512fa1">TrackerCnt_Ok</a></div><div class="ttdeci">#define TrackerCnt_Ok(_cntstruct_)</div><div class="ttdoc">Инкрементировать переменную - успешных событий</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00106">rs_message.h:106</a></div></div>
<div class="ttc" id="agroup___r_s___d_e_b_u_g_html_ga30a03e8d8912be85a203c829b581f999"><div class="ttname"><a href="group___r_s___d_e_b_u_g.html#ga30a03e8d8912be85a203c829b581f999">printf_rs</a></div><div class="ttdeci">#define printf_rs(...)</div><div class="ttdoc">Printf обычных событий RS/UART/TIM.</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00116">rs_message.h:116</a></div></div>
<div class="ttc" id="agroup___r_s___d_e_b_u_g_html_ga49af29ab3927cad105c1d2b018a767e9"><div class="ttname"><a href="group___r_s___d_e_b_u_g.html#ga49af29ab3927cad105c1d2b018a767e9">TrackerCnt_Err</a></div><div class="ttdeci">#define TrackerCnt_Err(_cntstruct_)</div><div class="ttdoc">Инкрементировать переменную - ошибок</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00108">rs_message.h:108</a></div></div>
<div class="ttc" id="agroup___r_s___d_e_b_u_g_html_ga830a5ed90667bf50ab8c409dcadb2a39"><div class="ttname"><a href="group___r_s___d_e_b_u_g.html#ga830a5ed90667bf50ab8c409dcadb2a39">printf_rs_err</a></div><div class="ttdeci">#define printf_rs_err(...)</div><div class="ttdoc">Printf ошибок RS/UART/TIM.</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00121">rs_message.h:121</a></div></div>
<div class="ttc" id="agroup___r_s___d_e_b_u_g_html_ga8c401e4d5d440001c1d879984107bb79"><div class="ttname"><a href="group___r_s___d_e_b_u_g.html#ga8c401e4d5d440001c1d879984107bb79">RS_UART_Handler_ENTER</a></div><div class="ttdeci">#define RS_UART_Handler_ENTER()</div><div class="ttdoc">Действия при заходе в прерывания UART.</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00136">rs_message.h:136</a></div></div>
<div class="ttc" id="agroup___r_s___d_e_b_u_g_html_gaa026e9bf8672373cfe265f96ea0f6061"><div class="ttname"><a href="group___r_s___d_e_b_u_g.html#gaa026e9bf8672373cfe265f96ea0f6061">RS_TIM_Handler_EXIT</a></div><div class="ttdeci">#define RS_TIM_Handler_EXIT()</div><div class="ttdoc">Действия при выходе из прерывания таймера</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00131">rs_message.h:131</a></div></div>
<div class="ttc" id="agroup___r_s___d_e_b_u_g_html_gab9d308969f924234bc879a93ffb80473"><div class="ttname"><a href="group___r_s___d_e_b_u_g.html#gab9d308969f924234bc879a93ffb80473">RS_TIM_Handler_ENTER</a></div><div class="ttdeci">#define RS_TIM_Handler_ENTER()</div><div class="ttdoc">Действия при заходе в прерывания таймера</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00127">rs_message.h:127</a></div></div>
<div class="ttc" id="agroup___r_s___d_e_b_u_g_html_gade69fd26928788dd6f0278fcd15885ff"><div class="ttname"><a href="group___r_s___d_e_b_u_g.html#gade69fd26928788dd6f0278fcd15885ff">RS_UART_Handler_EXIT</a></div><div class="ttdeci">#define RS_UART_Handler_EXIT()</div><div class="ttdoc">Действия при выходе из прерывания UART.</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00140">rs_message.h:140</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_ga1b59697f4b7fad81f9d5fd9fffebac2f"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#ga1b59697f4b7fad81f9d5fd9fffebac2f">RS_Receive_IT</a></div><div class="ttdeci">RS_StatusTypeDef RS_Receive_IT(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)</div><div class="ttdoc">Начать прием по прерываниям.</div><div class="ttdef"><b>Definition</b> <a href="#l00043">rs_message.c:43</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_ga1cd98c55f6f359e3ab93d0f9cf912ab5"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#ga1cd98c55f6f359e3ab93d0f9cf912ab5">RS_Collect_Message</a></div><div class="ttdeci">__weak RS_StatusTypeDef RS_Collect_Message(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg, uint8_t *msg_uart_buff)</div><div class="ttdoc">Пользовательская функция для сбора сообщения в буфер UART.</div><div class="ttdef"><b>Definition</b> <a href="#l00544">rs_message.c:544</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_ga1de0a597d043b64d0a19bc393cc1b3fd"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#ga1de0a597d043b64d0a19bc393cc1b3fd">RS_Timeout_Stop</a></div><div class="ttdeci">RS_StatusTypeDef RS_Timeout_Stop(RS_HandleTypeDef *hRS)</div><div class="ttdoc">Остановка таймаута приема.</div><div class="ttdef"><b>Definition</b> <a href="#l00491">rs_message.c:491</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_ga1ffe808b3640f253b1783295d6990962"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#ga1ffe808b3640f253b1783295d6990962">RS_Abort</a></div><div class="ttdeci">RS_StatusTypeDef RS_Abort(RS_HandleTypeDef *hRS, RS_AbortTypeDef AbortMode)</div><div class="ttdoc">Отменить прием/передачу RS/UART.</div><div class="ttdef"><b>Definition</b> <a href="#l00193">rs_message.c:193</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_ga2d356b2a0b4af43460bb2cacb81779ce"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#ga2d356b2a0b4af43460bb2cacb81779ce">RS_TIM_Handler</a></div><div class="ttdeci">void RS_TIM_Handler(RS_HandleTypeDef *hRS)</div><div class="ttdoc">Обработчик прерывания TIM.</div><div class="ttdef"><b>Definition</b> <a href="#l00433">rs_message.c:433</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_ga2e69a97a8b6e0b5855116d88c0e17cb9"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#ga2e69a97a8b6e0b5855116d88c0e17cb9">RS_Transmit_IT</a></div><div class="ttdeci">RS_StatusTypeDef RS_Transmit_IT(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)</div><div class="ttdoc">Начать передачу по прерываниям.</div><div class="ttdef"><b>Definition</b> <a href="#l00091">rs_message.c:91</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_ga330f6cfcdaab1f239054c0d91be3c5bc"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#ga330f6cfcdaab1f239054c0d91be3c5bc">RS_Handle_Transmit_Start</a></div><div class="ttdeci">RS_StatusTypeDef RS_Handle_Transmit_Start(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)</div><div class="ttdoc">Обработчик для начала передачи.</div><div class="ttdef"><b>Definition</b> <a href="#l00269">rs_message.c:269</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_ga3500b3fa91d05a94cf8da5cc5ce338f5"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#ga3500b3fa91d05a94cf8da5cc5ce338f5">RS_Parse_Message</a></div><div class="ttdeci">__weak RS_StatusTypeDef RS_Parse_Message(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg, uint8_t *msg_uart_buff)</div><div class="ttdoc">Пользовательская функция для парса сообщения из буфера UART.</div><div class="ttdef"><b>Definition</b> <a href="#l00557">rs_message.c:557</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_ga7180b913ba795c07637680982d7f45ac"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#ga7180b913ba795c07637680982d7f45ac">RS_UART_TxCpltCallback</a></div><div class="ttdeci">RS_StatusTypeDef RS_UART_TxCpltCallback(RS_HandleTypeDef *hRS)</div><div class="ttdoc">UART TX Callback: коллбек после окончания передачи.</div><div class="ttdef"><b>Definition</b> <a href="#l00300">rs_message.c:300</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_ga727154b368397b4796aa892de12a2289"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#ga727154b368397b4796aa892de12a2289">RS_StatusTypeDef</a></div><div class="ttdeci">RS_StatusTypeDef</div><div class="ttdoc">Enums for respond CMD about RS status.</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00163">rs_message.h:164</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_ga8b7bcc84cb8192a58fe87b662fbd9690"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#ga8b7bcc84cb8192a58fe87b662fbd9690">RS_Response</a></div><div class="ttdeci">__weak RS_StatusTypeDef RS_Response(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)</div><div class="ttdoc">Пользовательская функция для ответа на запрос по UART.</div><div class="ttdef"><b>Definition</b> <a href="#l00531">rs_message.c:531</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_ga9560ee688d4bcdd90a47c110be4ecf92"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#ga9560ee688d4bcdd90a47c110be4ecf92">RS_MASTER_MODE_START</a></div><div class="ttdeci">#define RS_MASTER_MODE_START</div><div class="ttdoc">Начало режимов мастера (до него - режим слейв)</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00181">rs_message.h:181</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_gaa261bb0d37e7f18f04fb4353aa0f5c45"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#gaa261bb0d37e7f18f04fb4353aa0f5c45">RS_Init</a></div><div class="ttdeci">RS_StatusTypeDef RS_Init(RS_HandleTypeDef *hRS, UART_HandleTypeDef *huart, TIM_HandleTypeDef *htim, uint8_t *pRS_BufferPtr)</div><div class="ttdoc">Инициалазация структуры RS_HandleTypeDef.</div><div class="ttdef"><b>Definition</b> <a href="#l00156">rs_message.c:156</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_gab27567456df0329130c7fe4fc43c6ee1"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#gab27567456df0329130c7fe4fc43c6ee1">RS_UART_Handler</a></div><div class="ttdeci">void RS_UART_Handler(RS_HandleTypeDef *hRS)</div><div class="ttdoc">Обработчик прерывания UART.</div><div class="ttdef"><b>Definition</b> <a href="#l00320">rs_message.c:320</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_gab43a3b93c85adee5e3c561922d7ea2ef"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#gab43a3b93c85adee5e3c561922d7ea2ef">RS_Handle_Receive_Start</a></div><div class="ttdeci">RS_StatusTypeDef RS_Handle_Receive_Start(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)</div><div class="ttdoc">Обработчик для начала приема.</div><div class="ttdef"><b>Definition</b> <a href="#l00237">rs_message.c:237</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_gab7c55bd8bb15b0eecc8c525019d4a1cc"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#gab7c55bd8bb15b0eecc8c525019d4a1cc">RS_AbortTypeDef</a></div><div class="ttdeci">RS_AbortTypeDef</div><div class="ttdoc">Enums for Abort modes.</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00192">rs_message.h:193</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_gac3a7bbc060a4250c160d51f0a0ca6cf8"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#gac3a7bbc060a4250c160d51f0a0ca6cf8">RS_Timeout_Start</a></div><div class="ttdeci">RS_StatusTypeDef RS_Timeout_Start(RS_HandleTypeDef *hRS)</div><div class="ttdoc">Запуск таймаута приема.</div><div class="ttdef"><b>Definition</b> <a href="#l00471">rs_message.c:471</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_gad3d2e8fb9c2879e1ddb967cff6124521"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#gad3d2e8fb9c2879e1ddb967cff6124521">RS_Timeout_Update</a></div><div class="ttdeci">RS_StatusTypeDef RS_Timeout_Update(RS_HandleTypeDef *hRS)</div><div class="ttdoc">Обновление (сброс) таймаута приема.</div><div class="ttdef"><b>Definition</b> <a href="#l00509">rs_message.c:509</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_gae0f359f0af89adf45bac275a3f5ee34d"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#gae0f359f0af89adf45bac275a3f5ee34d">RS_EnableReceive</a></div><div class="ttdeci">#define RS_EnableReceive()</div><div class="ttdoc">Функция изменения направления передачи на ПРИЕМ для RS-485.</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00150">rs_message.h:150</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_gaeddade966945ed376bb152151b493d6f"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#gaeddade966945ed376bb152151b493d6f">RS_EnableTransmit</a></div><div class="ttdeci">#define RS_EnableTransmit()</div><div class="ttdoc">Функция изменения направления передачи на ПЕРЕДАЧУ для RS-485.</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00153">rs_message.h:153</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_gga13e1c056947b06c7dc29b90d22f683a7a15953c59b7f547b318edab14070873c5"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#gga13e1c056947b06c7dc29b90d22f683a7a15953c59b7f547b318edab14070873c5">RS_MASTER_REQUEST</a></div><div class="ttdeci">@ RS_MASTER_REQUEST</div><div class="ttdoc">Мастер с ручным запросом</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00187">rs_message.h:187</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_gga13e1c056947b06c7dc29b90d22f683a7ad118e897a520ddc9c77a905684079550"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#gga13e1c056947b06c7dc29b90d22f683a7ad118e897a520ddc9c77a905684079550">RS_RESERVED</a></div><div class="ttdeci">@ RS_RESERVED</div><div class="ttdoc">резерв</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00186">rs_message.h:186</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_gga13e1c056947b06c7dc29b90d22f683a7aee8cfd8ce9edacc055a195ed454a49dc"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#gga13e1c056947b06c7dc29b90d22f683a7aee8cfd8ce9edacc055a195ed454a49dc">RS_SLAVE_ALWAYS_WAIT</a></div><div class="ttdeci">@ RS_SLAVE_ALWAYS_WAIT</div><div class="ttdoc">Слейв в постоянном ожидании</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00185">rs_message.h:185</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_ggab7c55bd8bb15b0eecc8c525019d4a1cca5699efe0ab3cdfd4f6ef175ecb809306"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#ggab7c55bd8bb15b0eecc8c525019d4a1cca5699efe0ab3cdfd4f6ef175ecb809306">ABORT_RS</a></div><div class="ttdeci">@ ABORT_RS</div><div class="ttdoc">Отменить любую работу UART в целом</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00197">rs_message.h:197</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_ggab7c55bd8bb15b0eecc8c525019d4a1cca95c6ce0fee466ba98e43213d001ecc16"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#ggab7c55bd8bb15b0eecc8c525019d4a1cca95c6ce0fee466ba98e43213d001ecc16">ABORT_TX</a></div><div class="ttdeci">@ ABORT_TX</div><div class="ttdoc">Отменить передачу</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00194">rs_message.h:194</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_ggab7c55bd8bb15b0eecc8c525019d4a1ccaf0519a0ddda6fff97dd61ce0f3320df9"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#ggab7c55bd8bb15b0eecc8c525019d4a1ccaf0519a0ddda6fff97dd61ce0f3320df9">ABORT_RX</a></div><div class="ttdeci">@ ABORT_RX</div><div class="ttdoc">Отменить прием</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00195">rs_message.h:195</a></div></div>
<div class="ttc" id="amodbus__diag_8h_html"><div class="ttname"><a href="modbus__diag_8h.html">modbus_diag.h</a></div><div class="ttdoc">Диагностика устройства Modbus.</div></div>
<div class="ttc" id="ars__message_8h_html"><div class="ttname"><a href="rs__message_8h.html">rs_message.h</a></div><div class="ttdoc">Библиотека обмена сообщениями по RS-интерфейсу</div></div>
<div class="ttc" id="astruct_r_s___flags_type_def_html_a1513dc1265334c20a82b55b1090024c8"><div class="ttname"><a href="struct_r_s___flags_type_def.html#a1513dc1265334c20a82b55b1090024c8">RS_FlagsTypeDef::RX_Continue</a></div><div class="ttdeci">unsigned RX_Continue</div><div class="ttdoc">0 - Продолжить принимать, 0 - Начать прием сначала</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00214">rs_message.h:214</a></div></div>
<div class="ttc" id="astruct_r_s___flags_type_def_html_adfc04070a08e90f514072fff20efc744"><div class="ttname"><a href="struct_r_s___flags_type_def.html#adfc04070a08e90f514072fff20efc744">RS_FlagsTypeDef::RX_Ongoing</a></div><div class="ttdeci">unsigned RX_Ongoing</div><div class="ttdoc">1 - Прием данных в активном состоянии, 0 - Ожидаем начало приема данных</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00205">rs_message.h:205</a></div></div>
<div class="ttc" id="astruct_r_s___handle_type_def_html"><div class="ttname"><a href="struct_r_s___handle_type_def.html">RS_HandleTypeDef</a></div><div class="ttdoc">Handle for RS communication.</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00227">rs_message.h:228</a></div></div>
<div class="ttc" id="astruct_r_s___handle_type_def_html_a01e2c95a23aa3eed1f002e2329a10942"><div class="ttname"><a href="struct_r_s___handle_type_def.html#a01e2c95a23aa3eed1f002e2329a10942">RS_HandleTypeDef::ID</a></div><div class="ttdeci">uint8_t ID</div><div class="ttdoc">ID хендла</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00230">rs_message.h:230</a></div></div>
<div class="ttc" id="astruct_r_s___handle_type_def_html_a1bc8d1ccb57c20cad4f70a04f751a67a"><div class="ttname"><a href="struct_r_s___handle_type_def.html#a1bc8d1ccb57c20cad4f70a04f751a67a">RS_HandleTypeDef::pBufferPtr</a></div><div class="ttdeci">uint8_t * pBufferPtr</div><div class="ttdoc">Указатеь на буфер UART.</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00232">rs_message.h:232</a></div></div>
<div class="ttc" id="astruct_r_s___handle_type_def_html_a3b377cb0eabf384a7e715fb030218290"><div class="ttname"><a href="struct_r_s___handle_type_def.html#a3b377cb0eabf384a7e715fb030218290">RS_HandleTypeDef::lastPacketTick</a></div><div class="ttdeci">uint32_t lastPacketTick</div><div class="ttdoc">Время последнего принятого пакета</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00246">rs_message.h:246</a></div></div>
<div class="ttc" id="astruct_r_s___handle_type_def_html_a495a29011412451e53459f9e1513814d"><div class="ttname"><a href="struct_r_s___handle_type_def.html#a495a29011412451e53459f9e1513814d">RS_HandleTypeDef::RS_Message_Size</a></div><div class="ttdeci">int32_t RS_Message_Size</div><div class="ttdoc">size of whole message, not only data</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00233">rs_message.h:233</a></div></div>
<div class="ttc" id="astruct_r_s___handle_type_def_html_a6a3f47a1a3476d6e9df997e1dc9da8c4"><div class="ttname"><a href="struct_r_s___handle_type_def.html#a6a3f47a1a3476d6e9df997e1dc9da8c4">RS_HandleTypeDef::pMessagePtr</a></div><div class="ttdeci">RS_MsgTypeDef * pMessagePtr</div><div class="ttdoc">Указатель на структуру протокола</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00231">rs_message.h:231</a></div></div>
<div class="ttc" id="astruct_r_s___handle_type_def_html_a6e584c7559c702d3382dbb9aa572b71b"><div class="ttname"><a href="struct_r_s___handle_type_def.html#a6e584c7559c702d3382dbb9aa572b71b">RS_HandleTypeDef::pCallback</a></div><div class="ttdeci">void(* pCallback)(void *, void *)</div><div class="ttdoc">Указатель на коллбек: принят ответ в режиме мастер</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00240">rs_message.h:240</a></div></div>
<div class="ttc" id="astruct_r_s___handle_type_def_html_a6fa98c2955d01e07dc59f73d072bb37e"><div class="ttname"><a href="struct_r_s___handle_type_def.html#a6fa98c2955d01e07dc59f73d072bb37e">RS_HandleTypeDef::f</a></div><div class="ttdeci">RS_FlagsTypeDef f</div><div class="ttdoc">Флаги для контроля приема/передачи</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00243">rs_message.h:243</a></div></div>
<div class="ttc" id="astruct_r_s___handle_type_def_html_a82f0ad79cd234cd26076bfcfbc5c1194"><div class="ttname"><a href="struct_r_s___handle_type_def.html#a82f0ad79cd234cd26076bfcfbc5c1194">RS_HandleTypeDef::sRS_Mode</a></div><div class="ttdeci">RS_ModeTypeDef sRS_Mode</div><div class="ttdoc">Настройка: слейв/мастер RS_ModeTypeDef.</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00238">rs_message.h:238</a></div></div>
<div class="ttc" id="astruct_r_s___handle_type_def_html_a8bbcb263ae7a61790b559bcb55cd9aa9"><div class="ttname"><a href="struct_r_s___handle_type_def.html#a8bbcb263ae7a61790b559bcb55cd9aa9">RS_HandleTypeDef::RS_STATUS</a></div><div class="ttdeci">RS_StatusTypeDef RS_STATUS</div><div class="ttdoc">Статус RS.</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00247">rs_message.h:247</a></div></div>
<div class="ttc" id="astruct_r_s___handle_type_def_html_aa6da72b8ad446f76484783ca8af0e565"><div class="ttname"><a href="struct_r_s___handle_type_def.html#aa6da72b8ad446f76484783ca8af0e565">RS_HandleTypeDef::sRS_Timeout</a></div><div class="ttdeci">uint16_t sRS_Timeout</div><div class="ttdoc">Настройка: Таймаут в тиках таймера</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00239">rs_message.h:239</a></div></div>
<div class="ttc" id="astruct_r_s___handle_type_def_html_ade93e3a680f5fbc5275f58e20227198b"><div class="ttname"><a href="struct_r_s___handle_type_def.html#ade93e3a680f5fbc5275f58e20227198b">RS_HandleTypeDef::huart</a></div><div class="ttdeci">UART_HandleTypeDef * huart</div><div class="ttdoc">Хендл UART.</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00236">rs_message.h:236</a></div></div>
<div class="ttc" id="astruct_r_s___handle_type_def_html_aef8875f7628f280ed88f74eb762e0d99"><div class="ttname"><a href="struct_r_s___handle_type_def.html#aef8875f7628f280ed88f74eb762e0d99">RS_HandleTypeDef::htim</a></div><div class="ttdeci">TIM_HandleTypeDef * htim</div><div class="ttdoc">Хендл TIM.</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00237">rs_message.h:237</a></div></div>
<div class="ttc" id="astruct_r_s___msg_type_def_html"><div class="ttname"><a href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a></div><div class="ttdoc">Structure for modbus messsage.</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00176">modbus_core.h:177</a></div></div>
<div class="ttc" id="astruct_r_s___msg_type_def_html_a277ed439b65aedbf03bd112c073e6a32"><div class="ttname"><a href="struct_r_s___msg_type_def.html#a277ed439b65aedbf03bd112c073e6a32">RS_MsgTypeDef::MbAddr</a></div><div class="ttdeci">uint8_t MbAddr</div><div class="ttdoc">Modbus Slave Address.</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00184">modbus_core.h:184</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_413f4e031a85da0d68269c6fd2f76e1c.html">Src</a></li><li class="navelem"><a href="rs__message_8c.html">rs_message.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>