+ </li></ul></li></ul><p>]]>
+ </li></ul></li></ul><h2 class="showhide_heading" id="Online_courses"> Online courses<a href="#Online_courses" class="heading-link"><span class="icon icon-link fa fa-link fa-fw " ></span></a></h2>]]>
+ </p><p>Please refer to <a class="wiki external" target="_blank" href="https://wiki.st.com/stm32mpu/index.php/Getting_started/STM32MP1_boards/STM32MP157x-EV1/Develop_on_Arm%C2%AE_Cortex%C2%AE-M4" rel="external">ST Wiki Article Develop on Arm® Cortex®-M4</a><img src="img/icons/green_question.png" alt="Question" width="16" height="16" name="link-external" title="Question" class="icon" /> for more information.]]>
+ </li></ul><p>ST-Link Server is an application (http://www.st.com/en/development-tools/st-link-server.html) allowing:]]>
At Ac6, we’re committed to protecting and respecting your privacy.
+
+
+This Policy explains when and why we collect personal information about people who visit our website, how we use it, the conditions under which we may disclose it to others and how we keep it secure.
+
+
+We may change this Policy from time to time so please check this page occasionally to ensure that you’re happy with any changes. By using our website, you’re agreeing to be bound by this Policy.
+
+
+Any questions regarding this Policy and our privacy practices should be sent by email to webmaster at openstm32.org or by writing to Ac6, 21 rue Pierre Curie, 92400 COURBEVOIE (France). Alternatively, you can telephone +33 1 41 16 80 10.
+
+
+Who are we?
+Ac6 is a training, consulting and Embedded tools editor based in France but providing its services worldwide. We focus on Embedded Systems technologies, both hardware and software, and partner with various other companies active in the embedded systems world, such as ST Microelectronics for which we developped System Workbench for STM32 and provide it through the OpenSTM32.org website (this site).
+
+
+How do we collect information from you?
+We obtain information about you when you create an account on our website, when you contact us about products and services or when you download System Workbench for STM32 or update it through the incuded update feature.
+
+
+What type of information is collected from you?
+The personal information we collect might include your name, address, email address, IP address, Company, type of devices you use, distributor you use, and information regarding what pages are accessed and when.
+
+
+How is your information used?
+We use your information solely to know better our users and their expectations about our products.
+
+
+We may occasionnaly contact you about additional products or services we would like to propose you, either freely or for a fee.
+
+
+Who has access to your information?
+We will not sell or rent your information to third parties.
+
+
+We will not share your information with third parties for marketing purposes; However we may share them with ST Microelectronics, which is participating in the development, evolution and promotion of System Workbench for STM32 and cooperates in animating the web site.
+
+
+Third Party Service Providers working on our behalf:
+We may pass your information to our third party service providers, agents subcontractors and other associated organisations for the purposes of completing tasks and providing services to you on our behalf. However, when we use third party service providers, we disclose only the personal information that is necessary to deliver the service and we have a contract in place that requires them to keep your information secure and not to use it for their own direct marketing purposes. Please be reassured that we will not release your information to third parties beyond the Ac6 Network for them to use for their own direct marketing purposes, unless you have requested us to do so, or we are required to do so by law, for example, by a court order or for the purposes of prevention of fraud or other crime.
+
+
+Third Party Product Providers we work in association with:
+We work closely with various third party service or product providers to bring you a range of quality and reliable products and services designed to meet the needs of the Embedded Systems designers and manufacturers. When you enquire about or purchase one or more of these products or services, the relevant third party product or service provider will use your details to provide you with information and carry out their obligations arising from any contracts you have entered into with them. In some cases, they will be acting as a data controller of your information and therefore we advise you to read their Privacy Policy. These third party product providers will share your information with us which we will use in accordance with this Privacy Policy.
+
+
+Business evolution
+We may transfer your personal information to a third party as part of a sale of some or all of our business and assets to any third party or as part of any business restructuring or reorganisation, or if we’re under a duty to disclose or share your personal data in order to comply with any legal obligation or to enforce or apply our terms of use or to protect the rights, property or safety of our supporters and customers. However, we will take steps with the aim of ensuring that your privacy rights continue to be protected.
+
+
+How you can access and update your information
+The accuracy of your information is important to us. You can access all information retained about you by editing your profile on the OpenSTM32.org website.
+
+
+Should you want to delete this information, just delete your account on OpenSTM32.org and this will automatically delete all personal information we retain about you. Note however that posts you have done on the OpenSTM32 forums will still be available and labeled by the pseudo (login name) you have used when creating your account, so you should not use a sensible information for this.
+
+
+Security precautions in place to protect the loss, misuse or alteration of your information
+When you give us personal information, we take steps to ensure that it’s treated securely. However we do not retain sensitive information so all information is currently saved and displayed in clear form, at the exception of your password for which we only store a secure hash allowing to verify your password but not to retrieve it.
+
+
+Non-sensitive details (your email address etc.) are transmitted normally over the Internet, and this can never be guaranteed to be 100% secure. As a result, while we strive to protect your personal information, we cannot guarantee the security of any information you transmit to us, and you do so at your own risk. Once we receive your information, we make our best effort to ensure its security on our systems. Where we have given (or where you have chosen) a password which enables you to access certain parts of our websites, you are responsible for keeping this password confidential. We ask you not to share your password with anyone.
+
+
+Profiling
+We may analyse your personal information to create a profile of your interests and preferences so that we can contact you with information relevant to you. We may make use of additional information about you when it is available from external sources to help us do this effectively.
+
+
+We may also use your personal information to detect and reduce the risk of abuse of our web site facilities (spamming the forums for example). In case we detect such abuse we reserve the right to immediately close your account; However in this case we may retain some personal information (like your email or IP address) to help us prevent further such attempts of abusing uour website facilities.
+
+
+Use of ‘cookies’
+Like many other websites, the Ac6 websites uses cookies. ‘Cookies’ are small pieces of information sent by an organisation to your computer and stored on your hard drive to allow that website to recognise you when you visit. They collect statistical data about your browsing actions and patterns and do not identify you as an individual. For example, we use cookies to store your country preference. This helps us improve our website and deliver a better, more personalised service.
+
+
+It is possible to switch off cookies by setting your browser preferences. For more information on how to switch off cookies on your computer, look in your browser documentation. Turning cookies off may result in a loss of functionality when using our website. Especially, if you turn off the session cookie (PHPSESSID) you will not be able to log on the website, nor to access any part of the website that requires an account (like the download area).
+
+
+Links to other websites
+Our website may contain links to other websites run by other organisations. This privacy policy applies only to our website‚ so we encourage you to read the privacy statements on the other websites you visit. We cannot be responsible for the privacy policies and practices of other sites even if you access them using links from our website.
+
+
+In addition, if you linked to our website from a third party site, we cannot be responsible for the privacy policies and practices of the owners and operators of that third party site and recommend that you check the policy of that third party site.
+
+
+Transferring your information outside of Europe
+As part of the services offered to you through this website, the information which you provide to us may be transferred to countries outside the European Union (“EU”). By way of example, this may happen if any of our servers are from time to time located in a country outside of the EU. These countries may not have similar data protection laws to the UK. By submitting your personal data, you’re agreeing to this transfer, storing or processing. If we transfer your information outside of the EU in this way, we will take steps to ensure that appropriate security measures are taken with the aim of ensuring that your privacy rights continue to be protected as outlined in this Policy.
+
+
+If you use our services while you are outside the EU, your information may be transferred outside the EU in order to provide you with those services.
+
+
+Review of this Policy
+We keep this Policy under regular review. This Policy was last updated in December 2017.
+]]>
+ <div style="text-align: center;"><!--PluginImg: User lacks permission to view image--></div>]]>
+ </li></ol><p>If not:
- <ol><li> try to add the association. Open the preferences window, click on“Window”menu then“Preferences”. In the“Preferences”view, select“System Workbench”in the tree and click on“File Association”, and“Install”button:</li></ol><div style="text-align: center;"><!--PluginImg: User lacks permission to view image--></div><ol><li> go to the next section which describes how to manually import the STM32CubeMX generated project</li></ol><p>
+ <ul><li> try to add the association. Open the preferences window, click on Window menu then Preferences. In the Preferences view, select System Workbench in the tree and click on File Association, and Install button:</li></ul><div style="text-align: center;"><!--PluginImg: User lacks permission to view image--></div><ul><li> go to the next section which describes how to manually import the STM32CubeMX generated project</li></ul><p>]]>
+ You must first look for the <strong>MEMORY</strong> section and, if it is not present, add a line looking like <pre class="codelisting" data-theme="off" data-wrap="1" dir="ltr" style="white-space:pre-wrap; white-space:-moz-pre-wrap !important; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word;" id="codebox1" >CCMRAM (rw) : ORIGIN = 0x10000000, LENGTH = 64K</pre> (of course you must check the address of the CCM block; this comes from a STM32F429i chip).
- This is quite simple; You may place all initialized data in CCRAM by changing the line that reads <pre class="codelisting" data-theme="off" data-wrap="1" dir="ltr" style="white-space:pre-wrap; white-space:-moz-pre-wrap !important; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word;" id="codebox14" >} >RAM AT> FLASH</pre> at the end of the <strong>.data</strong> section by <pre class="codelisting" data-theme="off" data-wrap="1" dir="ltr" style="white-space:pre-wrap; white-space:-moz-pre-wrap !important; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word;" id="codebox15" >} >CCMRAM AT> FLASH</pre>
+ This is quite simple; You may place all initialized data in CCRAM by changing the line that reads <pre class="codelisting" data-theme="off" data-wrap="1" dir="ltr" style="white-space:pre-wrap; white-space:-moz-pre-wrap !important; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word;" id="codebox2" >} >RAM AT> FLASH</pre> at the end of the <strong>.data</strong> section by <pre class="codelisting" data-theme="off" data-wrap="1" dir="ltr" style="white-space:pre-wrap; white-space:-moz-pre-wrap !important; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word;" id="codebox3" >} >CCMRAM AT> FLASH</pre>
- You may also place all BSS (zero initialized) data in CCRAM by changing the line that reads <pre class="codelisting" data-theme="off" data-wrap="1" dir="ltr" style="white-space:pre-wrap; white-space:-moz-pre-wrap !important; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word;" id="codebox16" >} >RAM</pre> at the end of the <strong>.bss</strong> section by <pre class="codelisting" data-theme="off" data-wrap="1" dir="ltr" style="white-space:pre-wrap; white-space:-moz-pre-wrap !important; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word;" id="codebox17" >} >RAM</pre>
+ You may also place all BSS (zero initialized) data in CCRAM by changing the line that reads <pre class="codelisting" data-theme="off" data-wrap="1" dir="ltr" style="white-space:pre-wrap; white-space:-moz-pre-wrap !important; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word;" id="codebox4" >} >RAM</pre> at the end of the <strong>.bss</strong> section by <pre class="codelisting" data-theme="off" data-wrap="1" dir="ltr" style="white-space:pre-wrap; white-space:-moz-pre-wrap !important; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word;" id="codebox5" >} >CCMRAM</pre>
- You can very simply place uninitialized variables in CCM by adding to their definition a section attribute, like, for variable <strong>in_ccmram_buffer</strong> declaring it by: <pre class="codelisting" data-theme="off" data-wrap="1" dir="ltr" style="white-space:pre-wrap; white-space:-moz-pre-wrap !important; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word;" id="codebox18" >char in_ccram_buffer[1024] __attribute__((section("ccmram")));</pre> (Yes, there is double underscores and double parentheses in this ugly syntax, mainly to be sure you do not use it by mistake...)If it does not exist, you must create the <strong>.ccmram</strong> section by:<pre class="codelisting" data-theme="off" data-wrap="1" dir="ltr" style="white-space:pre-wrap; white-space:-moz-pre-wrap !important; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word;" id="codebox19" >/* CCM-RAM section
+ You can very simply place uninitialized variables in CCM by adding to their definition a section attribute, like, for variable <strong>in_ccmram_buffer</strong> declaring it by: <pre class="codelisting" data-theme="off" data-wrap="1" dir="ltr" style="white-space:pre-wrap; white-space:-moz-pre-wrap !important; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word;" id="codebox6" >char in_ccram_buffer[1024] __attribute__((section("ccmram")));</pre> (Yes, there is double underscores and double parentheses in this ugly syntax, mainly to be sure you do not use it by mistake...)If it does not exist, you must create the <strong>.ccmram</strong> section by:<pre class="codelisting" data-theme="off" data-wrap="1" dir="ltr" style="white-space:pre-wrap; white-space:-moz-pre-wrap !important; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word;" id="codebox7" >/* CCM-RAM section
- If you needed to initilalize them to zero, you must slightly enhance the startup_stm32xxxxx.S file to add a second zero-initialization loop (using symbols <strong>_sccmram</strong> and <strong>_eccmram</strong>) by duplicating the code for the bss, just after its final <strong>bcc FillZerobss</strong>, modifying it to look like:<pre class="codelisting" data-theme="off" data-wrap="1" dir="ltr" style="white-space:pre-wrap; white-space:-moz-pre-wrap !important; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word;" id="codebox20" >ldr r2, =_sccmram
+ If you needed to initilalize them to zero, you must slightly enhance the startup_stm32xxxxx.S file to add a second zero-initialization loop (using symbols <strong>_sccmram</strong> and <strong>_eccmram</strong>) by duplicating the code for the bss, just after its final <strong>bcc FillZerobss</strong>, modifying it to look like:<pre class="codelisting" data-theme="off" data-wrap="1" dir="ltr" style="white-space:pre-wrap; white-space:-moz-pre-wrap !important; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word;" id="codebox8" >ldr r2, =_sccmram
- You must first define this section in the linker script by:<pre class="codelisting" data-theme="off" data-wrap="1" dir="ltr" style="white-space:pre-wrap; white-space:-moz-pre-wrap !important; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word;" id="codebox21" >_siccmram = LOADADDR(.ccmram); /* May be already present */
+ You must first define this section in the linker script by:<pre class="codelisting" data-theme="off" data-wrap="1" dir="ltr" style="white-space:pre-wrap; white-space:-moz-pre-wrap !important; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word;" id="codebox9" >_siccmram = LOADADDR(.ccmram); /* May be already present */
- The you must duplicate the data section copying code (using symbols <strong>_siccmram</strong>, <strong>_sccmidata</strong> and <strong>_eccmidata</strong>) just after its <strong>bcc CopyDataInit</strong>:<pre class="codelisting" data-theme="off" data-wrap="1" dir="ltr" style="white-space:pre-wrap; white-space:-moz-pre-wrap !important; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word;" id="codebox22" >/* Copy the ccm segment initializers from flash to SRAM */
+ The you must duplicate the data section copying code (using symbols <strong>_siccmram</strong>, <strong>_sccmidata</strong> and <strong>_eccmidata</strong>) just after its <strong>bcc CopyDataInit</strong>:<pre class="codelisting" data-theme="off" data-wrap="1" dir="ltr" style="white-space:pre-wrap; white-space:-moz-pre-wrap !important; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word;" id="codebox10" >/* Copy the ccm segment initializers from flash to SRAM */
- </li><li> Redefine the <strong>_estack</strong> symbol to the end of the CCMRAM by replacing <pre class="codelisting" data-theme="off" data-wrap="1" dir="ltr" style="white-space:pre-wrap; white-space:-moz-pre-wrap !important; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word;" id="codebox23" >_estack = 0x20020000; /* end of RAM */</pre> by (for example, if the CCM RAM goew from 0x10000000 to 0x1000FFFF, again specific addresses may change) <pre class="codelisting" data-theme="off" data-wrap="1" dir="ltr" style="white-space:pre-wrap; white-space:-moz-pre-wrap !important; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word;" id="codebox24" >_estack = 0x10010000; /* end of CCMRAM */</pre>
+ </li><li> Redefine the <strong>_estack</strong> symbol to the end of the CCMRAM by replacing <pre class="codelisting" data-theme="off" data-wrap="1" dir="ltr" style="white-space:pre-wrap; white-space:-moz-pre-wrap !important; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word;" id="codebox11" >_estack = 0x20020000; /* end of RAM */</pre> by (for example, if the CCM RAM goew from 0x10000000 to 0x1000FFFF, again specific addresses may change) <pre class="codelisting" data-theme="off" data-wrap="1" dir="ltr" style="white-space:pre-wrap; white-space:-moz-pre-wrap !important; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word;" id="codebox12" >_estack = 0x10010000; /* end of CCMRAM */</pre>]]>
+System Workbench is built on the [https://eclipse.org|Eclipse] platform, from the Eclipse Foundation. Eclipse is quite heavily documented; some of the documentation is available from the Help menu.
+
+
+Extensive documentation on Eclipse and all its additional components is also available on the Eclipse web site.
+
+C and C++ compilers
+The compilers used in System Workbench for STM32 are the Linaro-maintained version of the GNU C and C++ compilers; other tools from the GNU suite are also used in System Workbench fro STM32. Their documentation can be found on the web.
+
The main source of documentation is the GNU Compiler Collection
+
+
- GCC 5 manual covering the C and C++ compilers
+CPP Manual covering the C preprocessor features
+The GNU C Reference Manual describing precisely the language accepted by the GNU compiler
+GNU Assembler manual covers the assembly language processior (if you ever need to code in assembly language you also need to look at ARM documentation for the Cortex-M instruction definitions)
+GNU Link Editor manual describes the link editor, with detailed information on the syntax of link editor scripts.
+C Library
+The library provided with System Workbench for STM32, developped by the GNU ARM team and available on launchpad with the compiler, is based on the Newlib library. There is few documentation on this version of newlib, although the RedHat newlib documentation may prove useful.
+
+
+However there are a few specifics for this version of newlib; the information below is extracted from the README file for the launchpad toolchain.
+
+
+The toolchain is released with two prebuilt C libraries based on newlib:
+
+
- one is the standard newlib
+the other is newlib-nano, optimized for code size.
+To distinguish them, the size optimized libraries were renamed as:
+
+
- libc.a --> libc_s.a
+libg.a --> libg_s.a
+
+
+Nano libraries usage
+To use newlib-nano, users should provide additional gcc link time option --specs=nano.specs; Nano.specs also handles two additional gcc libraries: libstdc++_s.a and libsupc++_s.a, which are optimized for code size.
+
+
+ For example:$ arm-none-eabi-gcc src.c --specs=nano.specs $(OTHER_OPTIONS)
+
+
This option can also work together with other specs options like --specs=rdimon.specs. Please be noticed that --specs=nano.specs is a linker option. Be sure to include in linker option if compiling and linking are separated.
+
+
+Additional newlib-nano libraries usage
+
+
Newlib-nano is different from newlib in addition to the libraries’ name. Formatted input/output of floating-point number are implemented as weak symbol. If you want to use %f, you have to pull in the symbol by explicitly specifying
+
“-u” command options:
+
+
- -u _scanf_float
+-u _printf_float
+ For example to output a float, the command line is like:$ arm-none-eabi-gcc --specs=nano.specs -u _printf_float $(OTHER_LINK_OPTIONS)
+
+
+Semihosting
+Users can choose to use or not use semihosting by following instructions:
+
+
- If you need semihosting, link like:
$ arm-none-eabi-gcc --specs=rdimon.specs $(OTHER_LINK_OPTIONS)
+If you are using retarget, link like: $ arm-none-eabi-gcc --specs=nosys.specs $(OTHER_LINK_OPTIONS)
+
+]]>