|
@@ -0,0 +1,135 @@
|
|
|
+# `cortex-m-quickstart`
|
|
|
+
|
|
|
+> A template for building applications for ARM Cortex-M microcontrollers
|
|
|
+
|
|
|
+This project is developed and maintained by the [Cortex-M team][team].
|
|
|
+
|
|
|
+## Dependencies
|
|
|
+
|
|
|
+To build embedded programs using this template you'll need:
|
|
|
+
|
|
|
+- Rust 1.31, 1.30-beta, nightly-2018-09-13 or a newer toolchain. e.g. `rustup
|
|
|
+ default beta`
|
|
|
+
|
|
|
+- The `cargo generate` subcommand. [Installation
|
|
|
+ instructions](https://github.com/ashleygwilliams/cargo-generate#installation).
|
|
|
+
|
|
|
+- `rust-std` components (pre-compiled `core` crate) for the ARM Cortex-M
|
|
|
+ targets. Run:
|
|
|
+
|
|
|
+``` console
|
|
|
+$ rustup target add thumbv6m-none-eabi thumbv7m-none-eabi thumbv7em-none-eabi thumbv7em-none-eabihf
|
|
|
+```
|
|
|
+
|
|
|
+## Using this template
|
|
|
+
|
|
|
+**NOTE**: This is the very short version that only covers building programs. For
|
|
|
+the long version, which additionally covers flashing, running and debugging
|
|
|
+programs, check [the embedded Rust book][book].
|
|
|
+
|
|
|
+[book]: https://rust-embedded.github.io/book
|
|
|
+
|
|
|
+0. Before we begin you need to identify some characteristics of the target
|
|
|
+ device as these will be used to configure the project:
|
|
|
+
|
|
|
+- The ARM core. e.g. Cortex-M3.
|
|
|
+
|
|
|
+- Does the ARM core include an FPU? Cortex-M4**F** and Cortex-M7**F** cores do.
|
|
|
+
|
|
|
+- How much Flash memory and RAM does the target device has? e.g. 256 KiB of
|
|
|
+ Flash and 32 KiB of RAM.
|
|
|
+
|
|
|
+- Where are Flash memory and RAM mapped in the address space? e.g. RAM is
|
|
|
+ commonly located at address `0x2000_0000`.
|
|
|
+
|
|
|
+You can find this information in the data sheet or the reference manual of your
|
|
|
+device.
|
|
|
+
|
|
|
+In this example we'll be using the STM32F3DISCOVERY. This board contains an
|
|
|
+STM32F303VCT6 microcontroller. This microcontroller has:
|
|
|
+
|
|
|
+- A Cortex-M4F core that includes a single precision FPU
|
|
|
+
|
|
|
+- 256 KiB of Flash located at address 0x0800_0000.
|
|
|
+
|
|
|
+- 40 KiB of RAM located at address 0x2000_0000. (There's another RAM region but
|
|
|
+ for simplicity we'll ignore it).
|
|
|
+
|
|
|
+1. Instantiate the template.
|
|
|
+
|
|
|
+``` console
|
|
|
+$ cargo generate --git https://github.com/rust-embedded/cortex-m-quickstart
|
|
|
+ Project Name: app
|
|
|
+ Creating project called `app`...
|
|
|
+ Done! New project created /tmp/app
|
|
|
+
|
|
|
+$ cd app
|
|
|
+```
|
|
|
+
|
|
|
+2. Set a default compilation target. There are four options as mentioned at the
|
|
|
+ bottom of `.cargo/config`. For the STM32F303VCT6, which has a Cortex-M4F
|
|
|
+ core, we'll pick the `thumbv7em-none-eabihf` target.
|
|
|
+
|
|
|
+``` console
|
|
|
+$ tail -n6 .cargo/config
|
|
|
+```
|
|
|
+
|
|
|
+``` toml
|
|
|
+[build]
|
|
|
+# Pick ONE of these compilation targets
|
|
|
+# target = "thumbv6m-none-eabi" # Cortex-M0 and Cortex-M0+
|
|
|
+# target = "thumbv7m-none-eabi" # Cortex-M3
|
|
|
+# target = "thumbv7em-none-eabi" # Cortex-M4 and Cortex-M7 (no FPU)
|
|
|
+target = "thumbv7em-none-eabihf" # Cortex-M4F and Cortex-M7F (with FPU)
|
|
|
+```
|
|
|
+
|
|
|
+3. Enter the memory region information into the `memory.x` file.
|
|
|
+
|
|
|
+``` console
|
|
|
+$ cat memory.x
|
|
|
+/* Linker script for the STM32F303VCT6 */
|
|
|
+MEMORY
|
|
|
+{
|
|
|
+ /* NOTE 1 K = 1 KiBi = 1024 bytes */
|
|
|
+ FLASH : ORIGIN = 0x08000000, LENGTH = 256K
|
|
|
+ RAM : ORIGIN = 0x20000000, LENGTH = 40K
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+4. Build the template application or one of the examples.
|
|
|
+
|
|
|
+``` console
|
|
|
+$ cargo build
|
|
|
+```
|
|
|
+
|
|
|
+## VS Code
|
|
|
+
|
|
|
+This template includes launch configurations for debugging CortexM programs with Visual Studio Code located in the `.vscode/` directory.
|
|
|
+See [.vscode/README.md](./.vscode/README.md) for more information.
|
|
|
+If you're not using VS Code, you can safely delete the directory from the generated project.
|
|
|
+
|
|
|
+# License
|
|
|
+
|
|
|
+This template is licensed under either of
|
|
|
+
|
|
|
+- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or
|
|
|
+ http://www.apache.org/licenses/LICENSE-2.0)
|
|
|
+
|
|
|
+- MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
|
|
|
+
|
|
|
+at your option.
|
|
|
+
|
|
|
+## Contribution
|
|
|
+
|
|
|
+Unless you explicitly state otherwise, any contribution intentionally submitted
|
|
|
+for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
|
|
|
+dual licensed as above, without any additional terms or conditions.
|
|
|
+
|
|
|
+## Code of Conduct
|
|
|
+
|
|
|
+Contribution to this crate is organized under the terms of the [Rust Code of
|
|
|
+Conduct][CoC], the maintainer of this crate, the [Cortex-M team][team], promises
|
|
|
+to intervene to uphold that code of conduct.
|
|
|
+
|
|
|
+[CoC]: https://www.rust-lang.org/policies/code-of-conduct
|
|
|
+[team]: https://github.com/rust-embedded/wg#the-cortex-m-team
|