working at the baud rate 600

This commit is contained in:
Priec
2025-11-19 21:12:41 +01:00
parent ef56483016
commit 24d1da44aa
3 changed files with 23 additions and 15 deletions

View File

@@ -1064,17 +1064,17 @@ dependencies = [
[[package]] [[package]]
name = "stm32-fmc" name = "stm32-fmc"
version = "0.4.0" version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72692594faa67f052e5e06dd34460951c21e83bc55de4feb8d2666e2f15480a2" checksum = "c7f0639399e2307c2446c54d91d4f1596343a1e1d5cab605b9cce11d0ab3858c"
dependencies = [ dependencies = [
"embedded-hal 1.0.0", "embedded-hal 0.2.7",
] ]
[[package]] [[package]]
name = "stm32-metapac" name = "stm32-metapac"
version = "18.0.0" version = "18.0.0"
source = "git+https://github.com/embassy-rs/stm32-data-generated?tag=stm32-data-22374e3344a2c9150b9b3d4da45c03f398fdc54e#31546499ddabe97044beae13ca8b535575b52a56" source = "git+https://github.com/embassy-rs/stm32-data-generated?tag=stm32-data-b9f6b0c542d85ee695d71c35ced195e0cef51ac0#9b8fb67703361e2237b6c1ec4f1ee5949223d412"
dependencies = [ dependencies = [
"cortex-m", "cortex-m",
"cortex-m-rt", "cortex-m-rt",

View File

@@ -100,20 +100,14 @@ async fn main(spawner: Spawner) {
counter += 1; counter += 1;
let msg = if counter % 2 == 0 { let msg = if counter % 2 == 0 {
b"AAAAA\n" b"AAAAA\r\n"
} else { } else {
b"Hello\n" b"Hello\r\n"
}; };
PIPE_SW_TX.write(msg).await; PIPE_SW_TX.write(msg).await;
info!("Sent: {:a}", msg); info!("Sent: {:a}", msg);
Timer::after(Duration::from_millis(100)).await; Timer::after(Duration::from_secs(3)).await;
// Also read any incoming data from internal UART RX pipe
let n2 = PIPE_INT_RX.read(&mut buf).await;
if n2 > 0 {
info!("HW INT UART RX pipe: {:a}", &buf[..n2]);
}
yield_now().await; yield_now().await;
} }
@@ -156,6 +150,7 @@ pub async fn tx_cpu_task(
) { ) {
use dma_gpio::software_uart::uart_emulation::encode_uart_byte_cfg; use dma_gpio::software_uart::uart_emulation::encode_uart_byte_cfg;
use embassy_futures::yield_now; use embassy_futures::yield_now;
use dma_gpio::config::{TX_PIN_BIT, UART_CFG};
// Access TIM6 registers directly via PAC // Access TIM6 registers directly via PAC
let tim6_regs = embassy_stm32::pac::TIM6; let tim6_regs = embassy_stm32::pac::TIM6;
@@ -171,11 +166,24 @@ pub async fn tx_cpu_task(
for &byte in &rx_buf[..n] { for &byte in &rx_buf[..n] {
let used = encode_uart_byte_cfg(TX_PIN_BIT, byte, &UART_CFG, &mut frame_buf); let used = encode_uart_byte_cfg(TX_PIN_BIT, byte, &UART_CFG, &mut frame_buf);
// === SYNC LOGIC ===
// Reset timer counter to 0 using Event Generation Register (UG bit)
// This ensures we start counting exactly from now.
tim6_regs.egr().write(|w| w.set_ug(true));
// The UG event sets the UIF flag immediately. We must clear it.
tim6_regs.sr().write(|w| w.set_uif(false));
// Now we loop through the encoded frame.
// Since we just reset the timer and cleared UIF, the first wait
// will block for exactly 1 bit-period.
// This effectively adds 1 bit of idle time before the Start Bit,
// which guarantees the line is stable High before dropping Low.
for word in &frame_buf[..used] { for word in &frame_buf[..used] {
while !tim6_regs.sr().read().uif() { while !tim6_regs.sr().read().uif() {
yield_now().await; yield_now().await;
} }
tim6_regs.sr().modify(|w| w.set_uif(false)); tim6_regs.sr().write(|w| w.set_uif(false));
unsafe { core::ptr::write_volatile(bsrr_ptr, *word) }; unsafe { core::ptr::write_volatile(bsrr_ptr, *word) };
} }
} }

View File

@@ -3,7 +3,7 @@ use crate::software_uart::uart_emulation::{Parity, StopBits, UartConfig};
use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex; use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex;
use embassy_sync::pipe::Pipe; use embassy_sync::pipe::Pipe;
pub const BAUD: u32 = 115_200; pub const BAUD: u32 = 600;
// pub const TX_PIN_BIT: u8 = 2; // PA2 // pub const TX_PIN_BIT: u8 = 2; // PA2
// pub const RX_PIN_BIT: u8 = 3; // PA3 // pub const RX_PIN_BIT: u8 = 3; // PA3
pub const TX_PIN_BIT: u8 = 0; // PB2 pub const TX_PIN_BIT: u8 = 0; // PB2