Compare commits
4 commits
e8fd234f57
...
eb80d0365b
| Author | SHA1 | Date | |
|---|---|---|---|
| eb80d0365b | |||
| 96d3dd7b91 | |||
| 9c77f7e0a4 | |||
| 6a274c476f |
11 changed files with 110 additions and 56 deletions
5
firmware/Cargo.lock
generated
5
firmware/Cargo.lock
generated
|
|
@ -130,8 +130,7 @@ dependencies = [
|
|||
"cfg-if",
|
||||
"cortex-m",
|
||||
"cortex-m-rt",
|
||||
"defmt 1.0.1",
|
||||
"defmt-rtt",
|
||||
"embassy-boot",
|
||||
"embassy-boot-stm32",
|
||||
"embassy-executor",
|
||||
"embassy-stm32",
|
||||
|
|
@ -320,7 +319,6 @@ name = "embassy-boot"
|
|||
version = "0.4.0"
|
||||
source = "git+https://github.com/embassy-rs/embassy#56572ef0adffd6258adc10fb424e37a8b4ddc19c"
|
||||
dependencies = [
|
||||
"defmt 1.0.1",
|
||||
"digest",
|
||||
"embassy-embedded-hal",
|
||||
"embassy-sync",
|
||||
|
|
@ -337,7 +335,6 @@ dependencies = [
|
|||
"cfg-if",
|
||||
"cortex-m",
|
||||
"cortex-m-rt",
|
||||
"defmt 1.0.1",
|
||||
"embassy-boot",
|
||||
"embassy-stm32",
|
||||
"embassy-sync",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ resolver = "3"
|
|||
members = ["app", "boot"]
|
||||
|
||||
[patch.crates-io]
|
||||
embassy-boot = { git = "https://github.com/embassy-rs/embassy" }
|
||||
embassy-boot-stm32 = { git = "https://github.com/embassy-rs/embassy" }
|
||||
embassy-executor = { git = "https://github.com/embassy-rs/embassy" }
|
||||
embassy-futures = { git = "https://github.com/embassy-rs/embassy" }
|
||||
|
|
|
|||
|
|
@ -1,13 +1,3 @@
|
|||
[target.'cfg(all(target_arch = "arm", target_os = "none"))']
|
||||
runner = [
|
||||
"probe-rs",
|
||||
"run",
|
||||
"--chip",
|
||||
"STM32G070KB",
|
||||
"--log-format",
|
||||
"{t} {m} {s}",
|
||||
]
|
||||
|
||||
[build]
|
||||
target = "thumbv6m-none-eabi"
|
||||
rustdocflags = ["--document-private-items"]
|
||||
|
|
|
|||
|
|
@ -1,13 +1,19 @@
|
|||
use embassy_executor::Spawner;
|
||||
use embassy_stm32::usart;
|
||||
use micropb::heapless::Vec;
|
||||
use static_cell::StaticCell;
|
||||
|
||||
type UartRxBuf = Vec<u8, 32>;
|
||||
type UartTxBuf = Vec<u8, 32>;
|
||||
struct UartBuf {
|
||||
buffer: [u8; 32],
|
||||
}
|
||||
|
||||
static UART_RX_BUF: StaticCell<UartRxBuf> = StaticCell::new();
|
||||
static UART_TX_BUF: StaticCell<UartTxBuf> = StaticCell::new();
|
||||
impl Default for UartBuf {
|
||||
fn default() -> UartBuf {
|
||||
unsafe { core::mem::zeroed() }
|
||||
}
|
||||
}
|
||||
|
||||
static UART_TX_BUF: StaticCell<UartBuf> = StaticCell::new();
|
||||
static UART_RX_BUF: StaticCell<UartBuf> = StaticCell::new();
|
||||
|
||||
#[allow(dead_code)]
|
||||
struct Tx {
|
||||
|
|
@ -20,8 +26,8 @@ struct Rx {
|
|||
}
|
||||
|
||||
pub fn start(r: crate::HeatPumpInterfaceResources, spawner: Spawner) {
|
||||
let rx_buf = UART_RX_BUF.init(UartRxBuf::new());
|
||||
let tx_buf = UART_TX_BUF.init(UartTxBuf::new());
|
||||
let tx_buf = UART_TX_BUF.init(UartBuf::default());
|
||||
let rx_buf = UART_RX_BUF.init(UartBuf::default());
|
||||
|
||||
let mut config = usart::Config::default();
|
||||
config.baudrate = 2400;
|
||||
|
|
@ -32,8 +38,8 @@ pub fn start(r: crate::HeatPumpInterfaceResources, spawner: Spawner) {
|
|||
r.usart,
|
||||
r.rx_pin,
|
||||
r.tx_pin,
|
||||
tx_buf,
|
||||
rx_buf,
|
||||
&mut tx_buf.buffer,
|
||||
&mut rx_buf.buffer,
|
||||
crate::Irqs,
|
||||
config,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,13 +1,19 @@
|
|||
use embassy_executor::Spawner;
|
||||
use embassy_stm32::usart;
|
||||
use micropb::heapless::Vec;
|
||||
use static_cell::StaticCell;
|
||||
|
||||
type UartRxBuf = Vec<u8, 32>;
|
||||
type UartTxBuf = Vec<u8, 32>;
|
||||
struct UartBuf {
|
||||
buffer: [u8; 32],
|
||||
}
|
||||
|
||||
static UART_RX_BUF: StaticCell<UartRxBuf> = StaticCell::new();
|
||||
static UART_TX_BUF: StaticCell<UartTxBuf> = StaticCell::new();
|
||||
impl Default for UartBuf {
|
||||
fn default() -> UartBuf {
|
||||
unsafe { core::mem::zeroed() }
|
||||
}
|
||||
}
|
||||
|
||||
static UART_TX_BUF: StaticCell<UartBuf> = StaticCell::new();
|
||||
static UART_RX_BUF: StaticCell<UartBuf> = StaticCell::new();
|
||||
|
||||
#[allow(dead_code)]
|
||||
struct Tx {
|
||||
|
|
@ -20,8 +26,8 @@ struct Rx {
|
|||
}
|
||||
|
||||
pub fn start(r: crate::ThermostatInterfaceResources, spawner: Spawner) {
|
||||
let rx_buf = UART_RX_BUF.init(UartRxBuf::new());
|
||||
let tx_buf = UART_TX_BUF.init(UartTxBuf::new());
|
||||
let tx_buf = UART_TX_BUF.init(UartBuf::default());
|
||||
let rx_buf = UART_RX_BUF.init(UartBuf::default());
|
||||
|
||||
let mut config = usart::Config::default();
|
||||
config.baudrate = 2400;
|
||||
|
|
@ -32,8 +38,8 @@ pub fn start(r: crate::ThermostatInterfaceResources, spawner: Spawner) {
|
|||
r.usart,
|
||||
r.rx_pin,
|
||||
r.tx_pin,
|
||||
tx_buf,
|
||||
rx_buf,
|
||||
&mut tx_buf.buffer,
|
||||
&mut rx_buf.buffer,
|
||||
crate::Irqs,
|
||||
config,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,16 +1,3 @@
|
|||
[target.'cfg(all(target_arch = "arm", target_os = "none"))']
|
||||
runner = [
|
||||
"probe-rs",
|
||||
"run",
|
||||
"--chip",
|
||||
"STM32G070KB",
|
||||
"--log-format",
|
||||
"{t} {m} {s}",
|
||||
]
|
||||
|
||||
[build]
|
||||
target = "thumbv6m-none-eabi"
|
||||
rustdocflags = ["--document-private-items"]
|
||||
|
||||
[env]
|
||||
DEFMT_LOG = "trace"
|
||||
|
|
|
|||
|
|
@ -4,9 +4,10 @@ version = "0.1.0"
|
|||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
embassy-boot-stm32 = { version = "0.3.0", features = ["defmt"] }
|
||||
embassy-executor = { version = "0.7.0", features = ["arch-cortex-m", "executor-thread", "defmt"] }
|
||||
embassy-stm32 = { version = "0.2.0", features = ["time-driver-tim1", "stm32g070kb", "defmt"] }
|
||||
embassy-boot = { version = "0.4.0" }
|
||||
embassy-boot-stm32 = { version = "0.3.0" }
|
||||
embassy-executor = { version = "0.7.0", features = ["arch-cortex-m", "executor-thread"] }
|
||||
embassy-stm32 = { version = "0.2.0", features = ["time-driver-tim1", "stm32g070kb"] }
|
||||
embassy-sync = "0.7.0"
|
||||
|
||||
cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] }
|
||||
|
|
@ -17,9 +18,6 @@ embedded-storage-async = "0.4.1"
|
|||
|
||||
cfg-if = "1.0.1"
|
||||
|
||||
defmt = { version = "1.0.0" }
|
||||
defmt-rtt = { version = "1.0.0" }
|
||||
|
||||
[lints.clippy]
|
||||
pedantic = { level = "warn", priority = -1 }
|
||||
cargo = { level = "warn", priority = -1 }
|
||||
|
|
|
|||
|
|
@ -27,5 +27,4 @@ fn main() {
|
|||
|
||||
println!("cargo:rustc-link-arg-bins=--nmagic");
|
||||
println!("cargo:rustc-link-arg-bins=-Tlink.x");
|
||||
println!("cargo:rustc-link-arg-bins=-Tdefmt.x");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@
|
|||
use core::cell::RefCell;
|
||||
|
||||
use cortex_m_rt::{entry, exception};
|
||||
use defmt_rtt as _;
|
||||
use embassy_boot_stm32::*;
|
||||
use embassy_stm32::Config;
|
||||
use embassy_stm32::flash::{BANK1_REGION, Flash};
|
||||
|
|
@ -16,9 +15,9 @@ fn main() -> ! {
|
|||
|
||||
// Uncomment this if you are debugging the bootloader with debugger/RTT attached,
|
||||
// as it prevents a hard fault when accessing flash 'too early' after boot.
|
||||
for _i in 0..10_000_000 {
|
||||
cortex_m::asm::nop();
|
||||
}
|
||||
// for _i in 0..50_000_000 {
|
||||
// cortex_m::asm::nop();
|
||||
// }
|
||||
|
||||
let layout = Flash::new_blocking(p.FLASH).into_blocking_regions();
|
||||
let flash = Mutex::new(RefCell::new(layout.bank1_region));
|
||||
|
|
|
|||
1
firmware/run
Symbolic link
1
firmware/run
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
run.sh
|
||||
70
firmware/run.sh
Executable file
70
firmware/run.sh
Executable file
|
|
@ -0,0 +1,70 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
CHIP=STM32G070KB
|
||||
|
||||
function clean {
|
||||
cargo clean $@
|
||||
}
|
||||
|
||||
function build-boot {
|
||||
(cd boot; cargo build --release $@)
|
||||
}
|
||||
|
||||
function build-app {
|
||||
(cd app; cargo build --release $@)
|
||||
}
|
||||
|
||||
function build {
|
||||
build-boot
|
||||
build-app
|
||||
}
|
||||
|
||||
function size-boot {
|
||||
(cd boot; cargo size --release -- -A $@)
|
||||
}
|
||||
|
||||
function size-app {
|
||||
(cd app; cargo size --release -- -A $@)
|
||||
}
|
||||
|
||||
function size {
|
||||
size-boot
|
||||
size-app
|
||||
}
|
||||
|
||||
function erase {
|
||||
probe-rs erase --chip ${CHIP}
|
||||
}
|
||||
|
||||
function flash-boot {
|
||||
(cd boot; cargo flash --release --chip ${CHIP} --reset-halt --log INFO $@)
|
||||
}
|
||||
|
||||
function flash-app {
|
||||
(cd app; cargo flash --release --chip ${CHIP} --reset-halt --log INFO $@)
|
||||
}
|
||||
|
||||
function flash {
|
||||
flash-boot
|
||||
flash-app
|
||||
}
|
||||
|
||||
function run {
|
||||
probe-rs attach --chip ${CHIP} --log-format "{t} {m} {s}" target/thumbv6m-none-eabi/release/app
|
||||
}
|
||||
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
set -o errexit
|
||||
#set -o xtrace
|
||||
|
||||
PROJECT_ROOT=${0%/*}
|
||||
if [[ $0 != $PROJECT_ROOT && $PROJECT_ROOT != "" ]]; then
|
||||
cd "$PROJECT_ROOT"
|
||||
fi
|
||||
readonly PROJECT_ROOT=$(pwd)
|
||||
|
||||
readonly SCRIPT="$PROJECT_ROOT/$(basename "$0")"
|
||||
|
||||
TIMEFORMAT=$'\nTask completed in %3lR'
|
||||
time "${@}"
|
||||
Loading…
Add table
Add a link
Reference in a new issue