1 <!-- HTML header for doxygen 1.8.20-->
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml">
5 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
6 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
7 <meta name="generator" content="Doxygen 1.9.4"/>
8 <meta name="viewport" content="width=device-width, initial-scale=1"/>
9 <title>Raspberry Pi Pico SDK: pico_stdlib</title>
10 <!-- <link href="tabs.css" rel="stylesheet" type="text/css"/> -->
11 <script type="text/javascript" src="jquery.js"></script>
12 <script type="text/javascript" src="dynsections.js"></script>
13 <link href="navtree.css" rel="stylesheet" type="text/css"/>
14 <script type="text/javascript" src="resize.js"></script>
15 <script type="text/javascript" src="navtreedata.js"></script>
16 <script type="text/javascript" src="navtree.js"></script>
17 <link href="search/search.css" rel="stylesheet" type="text/css"/>
18 <script type="text/javascript" src="search/searchdata.js"></script>
19 <script type="text/javascript" src="search/search.js"></script>
20 <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap" rel="stylesheet">
21 <link href="doxygen.css" rel="stylesheet" type="text/css" />
22 <link href="normalise.css" rel="stylesheet" type="text/css"/>
23 <link href="main.css" rel="stylesheet" type="text/css"/>
24 <link href="styles.css" rel="stylesheet" type="text/css"/>
27 <div class="navigation-mobile">
28 <div class="logo--mobile">
29 <a href="/"><img src="logo-mobile.svg" alt="Raspberry Pi"></a>
31 <div class="navigation-toggle">
32 <span class="line-1"></span>
36 <span class="line-3"></span>
39 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
41 <a href="index.html"> <img src="logo.svg" alt="Raspberry Pi"></a>
42 <span style="display: inline-block; margin-top: 10px;">
46 <div class="navigation-footer">
47 <img src="logo-mobile.svg" alt="Raspberry Pi">
48 <a href="https://www.raspberrypi.com/" target="_blank">By Raspberry Pi Ltd</a>
50 <!-- <div class="search">
52 <input type="search" name="search" id="search" placeholder="Search">
53 <input type="submit" value="Search">
56 <!-- Generated by Doxygen 1.9.4 -->
57 <script type="text/javascript">
58 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
59 var searchBox = new SearchBox("searchBox", "search",'Search','.html');
62 <script type="text/javascript" src="menudata.js"></script>
63 <script type="text/javascript" src="menu.js"></script>
64 <script type="text/javascript">
65 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
67 initMenu('',true,false,'search.php','Search');
68 $(document).ready(function() { init_search(); });
72 <div id="main-nav"></div>
74 <div id="side-nav" class="ui-resizable side-nav-resizable">
76 <div id="nav-tree-contents">
77 <div id="nav-sync" class="sync"></div>
80 <div id="splitbar" style="-moz-user-select:none;"
81 class="ui-resizable-handle">
84 <script type="text/javascript">
85 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
86 $(document).ready(function(){initNavTree('group__pico__stdlib.html',''); initResizable(); });
89 <div id="doc-content">
90 <!-- window showing the filter options -->
91 <div id="MSearchSelectWindow"
92 onmouseover="return searchBox.OnSearchSelectShow()"
93 onmouseout="return searchBox.OnSearchSelectHide()"
94 onkeydown="return searchBox.OnSearchSelectKey(event)">
97 <!-- iframe showing the search results (closed by default) -->
98 <div id="MSearchResultsWindow">
99 <iframe src="javascript:void(0)" frameborder="0"
100 name="MSearchResults" id="MSearchResults">
105 <div class="summary">
106 <a href="#func-members">Functions</a> </div>
107 <div class="headertitle"><div class="title">pico_stdlib<div class="ingroups"><a class="el" href="group__high__level.html">High Level APIs</a></div></div></div>
109 <div class="contents">
111 <p>Aggregation of a core subset of Raspberry Pi Pico SDK libraries used by most executables along with some additional utility methods.
112 <a href="#details">More...</a></p>
113 <table class="memberdecls">
114 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
115 Functions</h2></td></tr>
116 <tr class="memitem:gacf31cd777510116d829aea040b034c4c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__stdlib.html#gacf31cd777510116d829aea040b034c4c">setup_default_uart</a> (void)</td></tr>
117 <tr class="memdesc:gacf31cd777510116d829aea040b034c4c"><td class="mdescLeft"> </td><td class="mdescRight">Set up the default UART and assign it to the default GPIOs. <a href="group__pico__stdlib.html#gacf31cd777510116d829aea040b034c4c">More...</a><br /></td></tr>
118 <tr class="separator:gacf31cd777510116d829aea040b034c4c"><td class="memSeparator" colspan="2"> </td></tr>
119 <tr class="memitem:ga89efe34eab0b8b96954eb0e19a38c8be"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__stdlib.html#ga89efe34eab0b8b96954eb0e19a38c8be">set_sys_clock_48mhz</a> (void)</td></tr>
120 <tr class="memdesc:ga89efe34eab0b8b96954eb0e19a38c8be"><td class="mdescLeft"> </td><td class="mdescRight">Initialise the system clock to 48MHz. <a href="group__pico__stdlib.html#ga89efe34eab0b8b96954eb0e19a38c8be">More...</a><br /></td></tr>
121 <tr class="separator:ga89efe34eab0b8b96954eb0e19a38c8be"><td class="memSeparator" colspan="2"> </td></tr>
122 <tr class="memitem:ga44d5e0845d4f75f3b0c97c733e39f4c8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__stdlib.html#ga44d5e0845d4f75f3b0c97c733e39f4c8">set_sys_clock_pll</a> (uint32_t vco_freq, uint post_div1, uint post_div2)</td></tr>
123 <tr class="memdesc:ga44d5e0845d4f75f3b0c97c733e39f4c8"><td class="mdescLeft"> </td><td class="mdescRight">Initialise the system clock. <a href="group__pico__stdlib.html#ga44d5e0845d4f75f3b0c97c733e39f4c8">More...</a><br /></td></tr>
124 <tr class="separator:ga44d5e0845d4f75f3b0c97c733e39f4c8"><td class="memSeparator" colspan="2"> </td></tr>
125 <tr class="memitem:gafa509e1c42d351a21ac87a790d7c37e0"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__stdlib.html#gafa509e1c42d351a21ac87a790d7c37e0">check_sys_clock_hz</a> (uint32_t freq_hz, uint *vco_freq_out, uint *post_div1_out, uint *post_div2_out)</td></tr>
126 <tr class="memdesc:gafa509e1c42d351a21ac87a790d7c37e0"><td class="mdescLeft"> </td><td class="mdescRight">Check if a given system clock frequency is valid/attainable. <a href="group__pico__stdlib.html#gafa509e1c42d351a21ac87a790d7c37e0">More...</a><br /></td></tr>
127 <tr class="separator:gafa509e1c42d351a21ac87a790d7c37e0"><td class="memSeparator" colspan="2"> </td></tr>
128 <tr class="memitem:ga8553a9d91b581e0d3dbccd8d83b1a1b9"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__stdlib.html#ga8553a9d91b581e0d3dbccd8d83b1a1b9">check_sys_clock_khz</a> (uint32_t freq_khz, uint *vco_freq_out, uint *post_div1_out, uint *post_div2_out)</td></tr>
129 <tr class="memdesc:ga8553a9d91b581e0d3dbccd8d83b1a1b9"><td class="mdescLeft"> </td><td class="mdescRight">Check if a given system clock frequency is valid/attainable. <a href="group__pico__stdlib.html#ga8553a9d91b581e0d3dbccd8d83b1a1b9">More...</a><br /></td></tr>
130 <tr class="separator:ga8553a9d91b581e0d3dbccd8d83b1a1b9"><td class="memSeparator" colspan="2"> </td></tr>
131 <tr class="memitem:ga28d65a360d9c9423fe5549b216b79683"><td class="memItemLeft" align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__stdlib.html#ga28d65a360d9c9423fe5549b216b79683">set_sys_clock_hz</a> (uint32_t freq_hz, bool required)</td></tr>
132 <tr class="memdesc:ga28d65a360d9c9423fe5549b216b79683"><td class="mdescLeft"> </td><td class="mdescRight">Attempt to set a system clock frequency in hz. <a href="group__pico__stdlib.html#ga28d65a360d9c9423fe5549b216b79683">More...</a><br /></td></tr>
133 <tr class="separator:ga28d65a360d9c9423fe5549b216b79683"><td class="memSeparator" colspan="2"> </td></tr>
134 <tr class="memitem:gab3a273e837ba1947bb5fd8fc97cf47e5"><td class="memItemLeft" align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__stdlib.html#gab3a273e837ba1947bb5fd8fc97cf47e5">set_sys_clock_khz</a> (uint32_t freq_khz, bool required)</td></tr>
135 <tr class="memdesc:gab3a273e837ba1947bb5fd8fc97cf47e5"><td class="mdescLeft"> </td><td class="mdescRight">Attempt to set a system clock frequency in khz. <a href="group__pico__stdlib.html#gab3a273e837ba1947bb5fd8fc97cf47e5">More...</a><br /></td></tr>
136 <tr class="separator:gab3a273e837ba1947bb5fd8fc97cf47e5"><td class="memSeparator" colspan="2"> </td></tr>
138 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
139 <p >Aggregation of a core subset of Raspberry Pi Pico SDK libraries used by most executables along with some additional utility methods. </p>
140 <p >Including pico_stdlib gives you everything you need to get a basic program running which prints to stdout or flashes a LED</p>
141 <p >This library aggregates:</p><ul>
142 <li><a class="el" href="group__hardware__divider.html">hardware_divider</a></li>
143 <li><a class="el" href="group__hardware__gpio.html">hardware_gpio</a></li>
144 <li><a class="el" href="group__hardware__uart.html">hardware_uart</a></li>
145 <li><a class="el" href="group__pico__runtime.html">pico_runtime</a></li>
146 <li><a class="el" href="group__pico__platform.html">pico_platform</a></li>
147 <li><a class="el" href="group__pico__stdio.html">pico_stdio</a></li>
148 <li><a class="el" href="group__pico__time.html">pico_time</a></li>
149 <li><a class="el" href="group__pico__util.html">pico_util</a></li>
151 <p >There are some basic default values used by these functions that will default to usable values, however, they can be customised in a board definition header via config.h or similar </p>
152 <h2 class="groupheader">Function Documentation</h2>
153 <a id="gafa509e1c42d351a21ac87a790d7c37e0" name="gafa509e1c42d351a21ac87a790d7c37e0"></a>
154 <h2 class="memtitle"><span class="permalink"><a href="#gafa509e1c42d351a21ac87a790d7c37e0">◆ </a></span>check_sys_clock_hz()</h2>
156 <div class="memitem">
157 <div class="memproto">
158 <table class="memname">
160 <td class="memname">bool check_sys_clock_hz </td>
162 <td class="paramtype">uint32_t </td>
163 <td class="paramname"><em>freq_hz</em>, </td>
166 <td class="paramkey"></td>
168 <td class="paramtype">uint * </td>
169 <td class="paramname"><em>vco_freq_out</em>, </td>
172 <td class="paramkey"></td>
174 <td class="paramtype">uint * </td>
175 <td class="paramname"><em>post_div1_out</em>, </td>
178 <td class="paramkey"></td>
180 <td class="paramtype">uint * </td>
181 <td class="paramname"><em>post_div2_out</em> </td>
189 </div><div class="memdoc">
191 <p>Check if a given system clock frequency is valid/attainable. </p>
192 <dl class="params"><dt>Parameters</dt><dd>
193 <table class="params">
194 <tr><td class="paramname">freq_hz</td><td>Requested frequency </td></tr>
195 <tr><td class="paramname">vco_freq_out</td><td>On success, the voltage controlled oscillator frequency to be used by the SYS PLL </td></tr>
196 <tr><td class="paramname">post_div1_out</td><td>On success, The first post divider for the SYS PLL </td></tr>
197 <tr><td class="paramname">post_div2_out</td><td>On success, The second post divider for the SYS PLL. </td></tr>
201 <dl class="section return"><dt>Returns</dt><dd>true if the frequency is possible and the output parameters have been written. </dd></dl>
205 <a id="ga8553a9d91b581e0d3dbccd8d83b1a1b9" name="ga8553a9d91b581e0d3dbccd8d83b1a1b9"></a>
206 <h2 class="memtitle"><span class="permalink"><a href="#ga8553a9d91b581e0d3dbccd8d83b1a1b9">◆ </a></span>check_sys_clock_khz()</h2>
208 <div class="memitem">
209 <div class="memproto">
210 <table class="memname">
212 <td class="memname">bool check_sys_clock_khz </td>
214 <td class="paramtype">uint32_t </td>
215 <td class="paramname"><em>freq_khz</em>, </td>
218 <td class="paramkey"></td>
220 <td class="paramtype">uint * </td>
221 <td class="paramname"><em>vco_freq_out</em>, </td>
224 <td class="paramkey"></td>
226 <td class="paramtype">uint * </td>
227 <td class="paramname"><em>post_div1_out</em>, </td>
230 <td class="paramkey"></td>
232 <td class="paramtype">uint * </td>
233 <td class="paramname"><em>post_div2_out</em> </td>
241 </div><div class="memdoc">
243 <p>Check if a given system clock frequency is valid/attainable. </p>
244 <dl class="params"><dt>Parameters</dt><dd>
245 <table class="params">
246 <tr><td class="paramname">freq_khz</td><td>Requested frequency </td></tr>
247 <tr><td class="paramname">vco_freq_out</td><td>On success, the voltage controlled oscillator frequency to be used by the SYS PLL </td></tr>
248 <tr><td class="paramname">post_div1_out</td><td>On success, The first post divider for the SYS PLL </td></tr>
249 <tr><td class="paramname">post_div2_out</td><td>On success, The second post divider for the SYS PLL. </td></tr>
253 <dl class="section return"><dt>Returns</dt><dd>true if the frequency is possible and the output parameters have been written. </dd></dl>
257 <a id="ga89efe34eab0b8b96954eb0e19a38c8be" name="ga89efe34eab0b8b96954eb0e19a38c8be"></a>
258 <h2 class="memtitle"><span class="permalink"><a href="#ga89efe34eab0b8b96954eb0e19a38c8be">◆ </a></span>set_sys_clock_48mhz()</h2>
260 <div class="memitem">
261 <div class="memproto">
262 <table class="memname">
264 <td class="memname">void set_sys_clock_48mhz </td>
266 <td class="paramtype">void </td>
267 <td class="paramname"></td><td>)</td>
271 </div><div class="memdoc">
273 <p>Initialise the system clock to 48MHz. </p>
274 <p >Set the system clock to 48MHz, and set the peripheral clock to match. </p>
278 <a id="ga28d65a360d9c9423fe5549b216b79683" name="ga28d65a360d9c9423fe5549b216b79683"></a>
279 <h2 class="memtitle"><span class="permalink"><a href="#ga28d65a360d9c9423fe5549b216b79683">◆ </a></span>set_sys_clock_hz()</h2>
281 <div class="memitem">
282 <div class="memproto">
283 <table class="mlabels">
285 <td class="mlabels-left">
286 <table class="memname">
288 <td class="memname">static bool set_sys_clock_hz </td>
290 <td class="paramtype">uint32_t </td>
291 <td class="paramname"><em>freq_hz</em>, </td>
294 <td class="paramkey"></td>
296 <td class="paramtype">bool </td>
297 <td class="paramname"><em>required</em> </td>
306 <td class="mlabels-right">
307 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
310 </div><div class="memdoc">
312 <p>Attempt to set a system clock frequency in hz. </p>
313 <p >Note that not all clock frequencies are possible; it is preferred that you use src/rp2_common/hardware_clocks/scripts/vcocalc.py to calculate the parameters for use with set_sys_clock_pll</p>
314 <dl class="params"><dt>Parameters</dt><dd>
315 <table class="params">
316 <tr><td class="paramname">freq_hz</td><td>Requested frequency </td></tr>
317 <tr><td class="paramname">required</td><td>if true then this function will assert if the frequency is not attainable. </td></tr>
321 <dl class="section return"><dt>Returns</dt><dd>true if the clock was configured </dd></dl>
325 <a id="gab3a273e837ba1947bb5fd8fc97cf47e5" name="gab3a273e837ba1947bb5fd8fc97cf47e5"></a>
326 <h2 class="memtitle"><span class="permalink"><a href="#gab3a273e837ba1947bb5fd8fc97cf47e5">◆ </a></span>set_sys_clock_khz()</h2>
328 <div class="memitem">
329 <div class="memproto">
330 <table class="mlabels">
332 <td class="mlabels-left">
333 <table class="memname">
335 <td class="memname">static bool set_sys_clock_khz </td>
337 <td class="paramtype">uint32_t </td>
338 <td class="paramname"><em>freq_khz</em>, </td>
341 <td class="paramkey"></td>
343 <td class="paramtype">bool </td>
344 <td class="paramname"><em>required</em> </td>
353 <td class="mlabels-right">
354 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
357 </div><div class="memdoc">
359 <p>Attempt to set a system clock frequency in khz. </p>
360 <p >Note that not all clock frequencies are possible; it is preferred that you use src/rp2_common/hardware_clocks/scripts/vcocalc.py to calculate the parameters for use with set_sys_clock_pll</p>
361 <dl class="params"><dt>Parameters</dt><dd>
362 <table class="params">
363 <tr><td class="paramname">freq_khz</td><td>Requested frequency </td></tr>
364 <tr><td class="paramname">required</td><td>if true then this function will assert if the frequency is not attainable. </td></tr>
368 <dl class="section return"><dt>Returns</dt><dd>true if the clock was configured </dd></dl>
372 <a id="ga44d5e0845d4f75f3b0c97c733e39f4c8" name="ga44d5e0845d4f75f3b0c97c733e39f4c8"></a>
373 <h2 class="memtitle"><span class="permalink"><a href="#ga44d5e0845d4f75f3b0c97c733e39f4c8">◆ </a></span>set_sys_clock_pll()</h2>
375 <div class="memitem">
376 <div class="memproto">
377 <table class="memname">
379 <td class="memname">void set_sys_clock_pll </td>
381 <td class="paramtype">uint32_t </td>
382 <td class="paramname"><em>vco_freq</em>, </td>
385 <td class="paramkey"></td>
387 <td class="paramtype">uint </td>
388 <td class="paramname"><em>post_div1</em>, </td>
391 <td class="paramkey"></td>
393 <td class="paramtype">uint </td>
394 <td class="paramname"><em>post_div2</em> </td>
402 </div><div class="memdoc">
404 <p>Initialise the system clock. </p>
405 <dl class="params"><dt>Parameters</dt><dd>
406 <table class="params">
407 <tr><td class="paramname">vco_freq</td><td>The voltage controller oscillator frequency to be used by the SYS PLL </td></tr>
408 <tr><td class="paramname">post_div1</td><td>The first post divider for the SYS PLL </td></tr>
409 <tr><td class="paramname">post_div2</td><td>The second post divider for the SYS PLL.</td></tr>
413 <p>See the PLL documentation in the datasheet for details of driving the PLLs. </p>
417 <a id="gacf31cd777510116d829aea040b034c4c" name="gacf31cd777510116d829aea040b034c4c"></a>
418 <h2 class="memtitle"><span class="permalink"><a href="#gacf31cd777510116d829aea040b034c4c">◆ </a></span>setup_default_uart()</h2>
420 <div class="memitem">
421 <div class="memproto">
422 <table class="memname">
424 <td class="memname">void setup_default_uart </td>
426 <td class="paramtype">void </td>
427 <td class="paramname"></td><td>)</td>
431 </div><div class="memdoc">
433 <p>Set up the default UART and assign it to the default GPIOs. </p>
434 <p >By default this will use UART 0, with TX to pin GPIO 0, RX to pin GPIO 1, and the baudrate to 115200</p>
435 <p >Calling this method also initializes stdin/stdout over UART if the <a class="el" href="group__pico__stdio__uart.html">pico_stdio_uart</a> library is linked.</p>
436 <p >Defaults can be changed using configuration defines, PICO_DEFAULT_UART_INSTANCE, PICO_DEFAULT_UART_BAUD_RATE PICO_DEFAULT_UART_TX_PIN PICO_DEFAULT_UART_RX_PIN </p>
440 </div><!-- contents -->
441 </div><!-- doc-content -->
443 <script src="main.js"></script>