STM32F303VC开发板使用Embassy框架读取ADC时程序挂起的问题求助
STM32F303VC开发板使用Embassy框架读取ADC时程序挂起的问题求助
我之前用STM32F3xx HAL库写了一个读取光敏传感器的嵌入式Rust项目,运行完全正常——能在终端里看到ADC读取的数值。代码是这样的:
#![no_main] #![no_std] extern crate panic_halt; use cortex_m::asm; use cortex_m_rt::entry; use rtt_target::rtt_init_defmt; use stm32f3xx_hal::{ adc::{Adc, CommonAdc, config::Config}, pac, prelude::*, }; #[entry] fn main() -> ! { rtt_init_defmt!(); defmt::info!("Starting light sensor application"); let dp = pac::Peripherals::take().unwrap(); let mut flash = dp.FLASH.constrain(); let mut rcc = dp.RCC.constrain(); let clocks = rcc.cfgr.use_hse(8.MHz()).freeze(&mut flash.acr); let mut gpioa = dp.GPIOA.split(&mut rcc.ahb); let mut light_pin = gpioa.pa0.into_analog(&mut gpioa.moder, &mut gpioa.pupdr); let mut adc = Adc::new( dp.ADC1, Config::default(), &clocks, &CommonAdc::new(dp.ADC1_2, &clocks, &mut rcc.ahb), ); loop { let data: u16 = adc.read(&mut light_pin).unwrap(); defmt::info!("{}", data); // Wait 100ms for next conversion asm::delay(800_000); } }
这个版本没问题,终端里能实时看到传感器的数值变化。但我想换成Embassy框架重写,结果怎么都跑不起来——程序卡在创建ADC之后的步骤,终端只打印出Creating adc...就没下文了。
我写的Embassy版本代码如下:
#![no_main] #![no_std] extern crate panic_halt; use embassy_executor::Spawner; use embassy_stm32::Config; use embassy_stm32::rcc::{Hse, Sysclk}; use embassy_stm32::time::Hertz; use embassy_stm32::{ adc::{self, Adc, AdcChannel}, bind_interrupts, peripherals, }; use embassy_time::Timer; use rtt_target::rtt_init_defmt; bind_interrupts!(struct Irqs { ADC1_2 => adc::InterruptHandler<peripherals::ADC1>; }); #[embassy_executor::main] async fn main(_spawner: Spawner) { rtt_init_defmt!(); defmt::info!("Starting light sensor application"); let mut rcc_config = embassy_stm32::rcc::Config::default(); rcc_config.hsi = false; rcc_config.hse = Some(Hse { freq: Hertz::mhz(8), mode: embassy_stm32::rcc::HseMode::Oscillator, }); rcc_config.sys = Sysclk::HSE; let mut config = Config::default(); config.rcc = rcc_config; let p = embassy_stm32::init(config); defmt::info!("Creating adc..."); let mut adc = Adc::new(p.ADC1, Irqs); defmt::info!("Creating pin..."); let mut adc_pin0 = p.PA0.degrade_adc(); loop { let val = adc.read(&mut adc_pin0).await; defmt::info!("{}", val); Timer::after_millis(500).await; } }
对应的Cargo.toml配置:
[package] name = "blinky" version = "0.1.0" edition = "2024" [dependencies] embassy-executor = { version = "0.7.0", features = [ "arch-cortex-m", "executor-thread", ] } embassy-time = { version = "0.4.0", features = [ "defmt", "defmt-timestamp-uptime", "tick-hz-32_768", ] } embassy-stm32 = { version = "0.2.0", features = [ "defmt", "exti", "time", "time-driver-any", "stm32f303vc", "unstable-pac", ] } cortex-m = { version = "0.7.7", features = ["critical-section-single-core"] } cortex-m-rt = "0.7.3" panic-halt = "0.2.0" defmt = { version = "0.3" } rtt-target = { version = "0.6", features = ["defmt"] } [profile.dev] debug = true [profile.release] debug = true
我是嵌入式Rust的新手,也不太清楚该怎么调试这个问题。有没有大佬能帮我看看哪里错了或者漏了什么配置?我想让Embassy版本也能正常读取传感器数值并输出到终端里。
内容来源于stack exchange
相关产品推荐
相关产品推荐

