diff --git a/src/ch1_00_introduction.md b/src/ch1_00_introduction.md index 8e5362e62656d387effd009228fb6a25b6942af1..a9862da9edaeaa08fb7aacbd20e8266f618d1363 100644 --- a/src/ch1_00_introduction.md +++ b/src/ch1_00_introduction.md @@ -21,6 +21,7 @@ Use-cases ranges from heavy industry to tiny sensors in your everyday life. [Rust-Embedded book](https://rust-embedded.github.io/book/) contains thorough instructions for getting going with embedded. This resource is a tiny subset of the Embedded book. +[RTFM Book](https://rtfm.rs/) contains examples and usage for the rust implementation of the RTFM framework. # Overview  diff --git a/src/ch1_01_hardware.md b/src/ch1_01_hardware.md index 44cc8635e150d9f8d532fdf1e6a8c602fc6f3181..9ef90eef071fd4192c440032c1afeb49c95acd47 100644 --- a/src/ch1_01_hardware.md +++ b/src/ch1_01_hardware.md @@ -1,5 +1,12 @@ # Introduction to the hardware +<img src="images/st-logo.svg" width="500"> + +In this course we will use the [STM32F401](https://www.st.com/en/microcontrollers-microprocessors/stm32f401.html) sponsored by ST Microelectronics. + +A big thanks to STM for this contribution! + + ## ARM While your laptop/stationary computer most likely runs some `x86_64` CPU architecture, diff --git a/src/images/st-logo.svg b/src/images/st-logo.svg new file mode 100644 index 0000000000000000000000000000000000000000..43eeaf3662e9a68676c092af7b560cdcd613370f --- /dev/null +++ b/src/images/st-logo.svg @@ -0,0 +1,132 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 23.0.6, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 467 118.9" style="enable-background:new 0 0 467 118.9;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#FFFFFF;} + .st1{fill:#001C54;} + .st2{fill:#27AAE1;} + .st3{fill:url(#SVGID_1_);} + .st4{fill:url(#SVGID_2_);} + .st5{fill:url(#SVGID_3_);} + .st6{fill:url(#SVGID_4_);} + .st7{fill:url(#SVGID_5_);} + .st8{fill:url(#SVGID_6_);} + .st9{opacity:0.1;} + .st10{fill:none;} +</style> +<g> + <path class="st0" d="M229.6,0H72.9l0,0C60.6,0,49.4,7.3,44.5,18.5L4.9,113.9c-0.2,0.5-0.3,0.9-0.3,1.4c0,2,1.7,3.6,3.7,3.6h158 + l1.7-0.1c11.4-1,21.4-8.2,25.8-18.8L233,5.1c0.2-0.4,0.3-0.9,0.3-1.4C233.3,1.6,231.6,0,229.6,0"/> +</g> +<g> + <g> + <path class="st1" d="M301.2,94.4c-3.7,0-6.4-2.7-6.4-6.4c0-4.3,3.2-6.5,6.4-6.5c3.5,0,6.3,2.9,6.3,6.5 + C307.5,91.5,304.7,94.4,301.2,94.4 M307.4,82.4c-1.9-2.7-4.9-3-6.2-3c-5.5,0-8.7,4.3-8.7,8.5c0,4.8,3.8,8.6,8.7,8.6 + c1.2,0,4.3-0.3,6.2-3v2.7h2.3V79.9h-2.3V82.4z"/> + <path class="st1" d="M326.1,88.4c0,2.9-0.8,3.9-1.6,4.7c-0.8,0.8-1.9,1.3-3.3,1.3c-1.5,0-2.8-0.5-3.6-1.5 + c-0.8-0.9-1.1-2.3-1.1-4.1v-8.9h-2.3v9c0,2.3,0.5,4.1,1.4,5.2c0.7,0.9,2.4,2.4,5.6,2.4s4.6-1.8,5.1-2.6v2.2h2.2V79.8h-2.3v8.6 + H326.1z"/> + <path class="st1" d="M339.5,94.4c-3.4,0-6.2-2.9-6.2-6.4c0-3.6,2.8-6.5,6.2-6.5c3.4,0,6.2,2.9,6.2,6.5 + C345.7,90.5,343.7,94.4,339.5,94.4 M345.6,82.5c-2-2.8-4.9-3.1-6.1-3.1c-4.1,0-8.5,3.3-8.5,8.6c0,5.2,4.4,8.4,8.5,8.4 + c2,0,4.8-0.8,6.1-3.1v1.1c0,4.3-3.1,5.9-5.7,5.9c-3.9,0-5.4-2.8-5.9-4v-0.1h-2.4v0.2c1.6,5.5,6.8,6,8.3,6c0.4,0,4.4-0.1,6.5-3 + c1.5-2,1.5-4.2,1.5-5.9V79.9h-2.3V82.5z"/> + <path class="st1" d="M368.7,79.4c-1.4,0-4.1,0.6-5.4,2.9c-1.3-2.3-4-2.9-5.4-2.9c-1.5,0-3.3,0.6-4.2,2v-1.6h-2.3v16.3h2.3v-9.4 + c0-1.7,0.3-2.5,0.7-3.3c0.7-1.2,2-1.9,3.5-1.9c1.6,0,2.8,0.7,3.5,1.9c0.4,0.8,0.7,1.6,0.7,3.3v9.4h2.3v-9.4c0-1.7,0.3-2.5,0.7-3.3 + c0.7-1.2,2-1.9,3.5-1.9c1.6,0,2.8,0.7,3.5,1.9c0.4,0.8,0.7,1.6,0.7,3.3v9.4h2.3v-9.6C375.2,80.9,371.1,79.4,368.7,79.4"/> + <path class="st1" d="M380.3,86.7c0.6-3.4,3.5-5.2,6.1-5.2c2.5,0,5.5,1.6,6.1,5.2H380.3z M386.4,79.4c-4.7,0.1-8.4,3.9-8.4,8.6 + s3.8,8.5,8.5,8.5c3.6,0,6.8-2.3,8-5.7l0.1-0.2H392v0.1c-0.6,1.7-2.5,3.6-5.6,3.7c-3.1,0-5.9-2.6-6.1-5.6h14.6v-0.1 + c0.1-1.9-0.3-3.6-1.2-5.1C392.5,81.6,390,79.4,386.4,79.4"/> + <path class="st1" d="M405.1,79.4c-2.4,0-4.1,1.2-4.9,2.3v-1.9h-2.3v16.3h2.3v-8.9c0-1.8,0.5-3.4,1.5-4.3c1.3-1.2,2.9-1.3,3.4-1.3 + s2.1,0.1,3.4,1.3c1,0.9,1.5,2.5,1.5,4.3v8.9h2.3v-8.9c0-2.5-0.7-4.5-2-5.7C408.9,80,407.3,79.4,405.1,79.4"/> + <polygon class="st1" points="420.5,74.1 418.2,74.1 418.2,79.8 414.8,79.8 414.8,81.9 418.2,81.9 418.2,96.1 420.5,96.1 + 420.5,81.9 424.3,81.9 424.3,79.8 420.5,79.8 "/> + <path class="st1" d="M428,86.7c0.6-3.4,3.5-5.2,6.1-5.2c2.5,0,5.5,1.6,6.1,5.2H428z M434.1,79.4c-4.7,0.1-8.4,3.9-8.4,8.6 + s3.8,8.5,8.5,8.5c3.6,0,6.8-2.3,8-5.7l0.1-0.2h-2.4v0.1c-0.6,1.7-2.5,3.6-5.6,3.7c-3.1,0-5.9-2.6-6.1-5.6h14.6v-0.1 + c0.1-1.9-0.3-3.6-1.2-5.1C440.2,81.5,437.7,79.4,434.1,79.4"/> + <path class="st1" d="M453.6,94.4c-3.7,0-6.4-2.7-6.4-6.4c0-4.3,3.2-6.5,6.4-6.5c3.5,0,6.3,2.9,6.3,6.5S457.1,94.4,453.6,94.4 + M459.8,74.1v8.2c-2.1-2.8-5.2-3-6.2-3c-5.5,0-8.7,4.3-8.7,8.5c0,4.8,3.8,8.6,8.7,8.6c2,0,4.6-0.8,6.2-3V96h2.3V74.1H459.8z"/> + </g> + <g> + <rect x="242.9" y="73.6" class="st2" width="2.2" height="3.3"/> + <polygon class="st2" points="235.5,74.1 230.7,74.1 230.7,76.2 233.3,76.2 233.3,94 230.5,94 230.5,96.1 238,96.1 238,94 + 235.5,94 "/> + <polygon class="st2" points="245.6,79.8 240.8,79.8 240.8,81.9 243.4,81.9 243.4,94 240.8,94 240.8,96.1 248.2,96.1 248.2,94 + 245.6,94 "/> + <path class="st2" d="M254.5,75.2c-1.4,1.3-1.5,2.7-1.5,4.5v0.1h-2.6v2.1h2.6V94h-2.6v2.1h7.4V94h-2.6V81.9h2.6v-2.1h-2.6v-0.3 + c0-1.2,0.1-2.2,1-2.9c0.5-0.4,1.2-0.7,2.1-0.7h0.1v-2h-0.1C256.6,73.9,255.4,74.4,254.5,75.2"/> + <path class="st2" d="M263.1,87c0.4-2.9,3.1-5.2,5.9-5.2c3.2,0,5.8,2.2,6.3,5.2H263.1z M269.1,79.8c-4.5,0-8.2,3.8-8.2,8.4 + c0,4.5,3.7,8.2,8.3,8.2c3.3,0,6.2-1.9,7.6-4.9l0.1-0.2h-2.3v0.1c-1.1,1.9-3,3-5.3,3c-3.2,0-5.8-2.4-6-5.5h14.3v-0.7 + C277.4,83.5,273.7,79.8,269.1,79.8"/> + <path class="st2" d="M284.8,96.5c1.6,0,2.8-1.3,2.8-2.8c0-1.6-1.3-2.8-2.8-2.8c-1.6,0-2.8,1.3-2.8,2.8S283.3,96.5,284.8,96.5"/> + </g> +</g> +<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="124.6967" y1="120.698" x2="120.8813" y2="-9.1167" gradientTransform="matrix(1 0 0 -1 0 120.476)"> + <stop offset="0" style="stop-color:#559FBE"/> + <stop offset="0.1365" style="stop-color:#004E67"/> + <stop offset="0.3613" style="stop-color:#1583B2"/> + <stop offset="0.4452" style="stop-color:#559FBE"/> + <stop offset="0.5402" style="stop-color:#1583B2"/> + <stop offset="0.6439" style="stop-color:#004E67"/> + <stop offset="0.7108" style="stop-color:#276685"/> +</linearGradient> +<path class="st3" d="M229.6,2H72.9l0,0C61,2,50.8,9.1,46.3,19.2L15.4,93.7c-0.1,0.2-0.1,0.4-0.1,0.6c0,0.9,0.7,1.6,1.6,1.6h70.8 + c5,0,7.2-4.8,3.3-8.7L65,63c-13.7-13.3-7.8-44.4,20.5-44.4H224c0.7,0,1.3-0.5,1.6-1.1l5.5-13.2c0.1-0.2,0.1-0.4,0.1-0.6 + C231.2,2.8,230.5,2,229.6,2z"/> +<radialGradient id="SVGID_2_" cx="170.0121" cy="84.8322" r="150.7058" gradientTransform="matrix(0.9381 0 0 -0.9246 -10.1139 88.5378)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#559FBE"/> + <stop offset="0.3865" style="stop-color:#1583B2"/> + <stop offset="0.9939" style="stop-color:#164E66"/> +</radialGradient> +<path class="st4" d="M85.5,16.2h138.1l5-12h-152l0,0H73c-10.8,0-20.4,6.3-24.6,16L17.9,93.6h69.8c1.4,0,2.5-0.5,2.8-1.4 + c0.4-1,0-2.2-1.1-3.3l-26-24.4c-7.7-7.6-9.9-20.4-5.4-31.2C62.5,22.4,72.5,16.2,85.5,16.2z"/> +<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="206.0699" y1="83.408" x2="154.1613" y2="-11.8581" gradientTransform="matrix(1 0 0 -1 0 120.476)"> + <stop offset="0" style="stop-color:#559FBE"/> + <stop offset="0.2301" style="stop-color:#004E67"/> + <stop offset="0.3613" style="stop-color:#1583B2"/> + <stop offset="0.4452" style="stop-color:#559FBE"/> + <stop offset="0.5402" style="stop-color:#1583B2"/> + <stop offset="0.6439" style="stop-color:#004E67"/> + <stop offset="0.7108" style="stop-color:#276685"/> +</linearGradient> +<path class="st5" d="M214,40h-26.6c-1.8,0-3.3,1.1-4,2.6l-29.8,72c-0.1,0.2-0.2,0.5-0.2,0.7c0,0.9,0.7,1.6,1.6,1.6h9.9l0,0 + c12.1,0,22.5-7.3,26.8-17.7l0,0L215.4,42c0.1-0.2,0.1-0.4,0.1-0.6C215.6,40.7,214.9,40,214,40z"/> +<radialGradient id="SVGID_4_" cx="181.5946" cy="84.8248" r="141.4337" gradientTransform="matrix(0.9381 0 0 -0.9246 -10.1139 88.5378)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#559FBE"/> + <stop offset="0.3865" style="stop-color:#1583B2"/> + <stop offset="0.9939" style="stop-color:#164E66"/> +</radialGradient> +<path class="st6" d="M161.2,114.9h3.6c10.7,0,20.2-6.2,24.5-15.8l23.6-57h-25.6c-0.8,0-1.5,0.5-1.8,1.2l-29.6,71.6L161.2,114.9 + L161.2,114.9z"/> +<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="120.7096" y1="80.7156" x2="117.2263" y2="1.271419e-02" gradientTransform="matrix(1 0 0 -1 0 120.476)"> + <stop offset="0" style="stop-color:#559FBE"/> + <stop offset="0.1365" style="stop-color:#004E67"/> + <stop offset="0.3613" style="stop-color:#1583B2"/> + <stop offset="0.4452" style="stop-color:#559FBE"/> + <stop offset="0.5402" style="stop-color:#1583B2"/> + <stop offset="0.6439" style="stop-color:#004E67"/> + <stop offset="0.7108" style="stop-color:#276685"/> +</linearGradient> +<path class="st7" d="M161.7,41.6c0-0.9-0.7-1.6-1.6-1.6H84.7c-4.1,0-7.7,5-3.3,9l24.9,23.2c0,0,10.1,9.3,7.9,22.6 + c-1.9,11.7-9.9,18.9-15.7,21.5l0,0c-0.1,0.1-0.2,0.2-0.2,0.4s0.2,0.4,0.4,0.4h29.1c1.8,0,3.3-1.1,4-2.6l29.9-72.2 + C161.6,42,161.7,41.8,161.7,41.6z"/> +<radialGradient id="SVGID_6_" cx="181.9592" cy="84.8242" r="141.4391" gradientTransform="matrix(0.9381 0 0 -0.9246 -10.1139 88.5378)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#559FBE"/> + <stop offset="0.3865" style="stop-color:#1583B2"/> + <stop offset="0.9939" style="stop-color:#164E66"/> +</radialGradient> +<path class="st8" d="M105,114.9c5.3-4.3,10-11.2,11.4-19.9c2.3-14.4-8.2-24.2-8.6-24.6L82.9,47.2c-0.8-0.7-1.6-1.8-1.1-3.1 + c0.4-1.1,1.6-1.9,2.8-1.9H159l-29.7,71.6c-0.3,0.7-1,1.2-1.8,1.2l0,0L105,114.9L105,114.9z"/> +<g class="st9"> + <path class="st0" d="M161.7,41.6c0,0.2,0,0.4-0.1,0.6l-14,33.8c-10.4,1.1-21.2,1.7-32.4,1.7c-1.6,0-3.2,0-4.8,0 + c-2.1-3.5-4.2-5.4-4.2-5.4L81.3,49c-4.3-4-0.7-9,3.3-9H160C160.9,40,161.7,40.7,161.7,41.6z"/> + <path class="st0" d="M215.6,41.6c0,0.2,0,0.4-0.1,0.6l-8.3,20.1c-10.8,4.2-23,7.6-36.1,10.2l12.3-29.9c0.6-1.6,2.2-2.6,4-2.6H214 + C214.9,40,215.6,40.7,215.6,41.6z"/> + <path class="st0" d="M231.2,3.7c0,0.2,0,0.4-0.1,0.6l-5.5,13.2c-0.2,0.6-0.8,1.1-1.6,1.1H85.5C57.2,18.6,51.3,49.7,65,63l13.2,12.4 + C59.7,73.1,42.6,69.2,27.8,64l18.5-44.7C50.8,9.2,61,2.1,72.9,2.1l0,0h156.7C230.5,2,231.2,2.8,231.2,3.7z"/> +</g> +<rect x="233.3" y="-21.4" class="st10" width="21.5" height="21.4"/> +<rect x="-17" y="-21.4" class="st10" width="21.5" height="21.4"/> +<rect x="462" y="17.1" class="st10" width="21.5" height="21.4"/> +<rect x="233.2" y="119" class="st10" width="21.5" height="21.4"/> +</svg>