本例程参考stm32fxxx-hal crate(如stm32f1xx-hal)官方例程,并在官方例程的基础上增加了一些注释,修正了一些错误。可以借鉴不同型号的 stm32 例程,毕竟固件库的核是一样的。$ F% `9 V; a9 v9 o% Y O0 o) q
% W/ \" v4 [5 j5 n
Press the user button on stm32f3discovery board, and you will see the voltage changing.3 \% B$ q4 C# \3 \
/ I- ~; U" Q1 g" G
- #![no_main]) ?" C* h( S! j: n6 J+ Q; z& r
- #![no_std]" \+ B3 f8 P9 o0 k7 G! R- u2 j
& b, A2 D: X; O: p6 \5 d1 V0 c/ t" d- use cortex_m::asm::delay;' V5 t9 x; t* j1 a
- use cortex_m_semihosting::hprintln;8 a! C# t, A Z; b
- use panic_semihosting as _;
; W0 N2 l9 i# n: C, d+ n - use rtic::app;
5 H0 K3 K! c' t6 a: U7 j4 G0 ^9 \ - use stm32f3xx_hal::{4 o9 [ C l' W
- adc::{self, Adc},1 ?$ f2 f: P; H' C( Z, z3 @) g
- gpio::{gpioa::PA0, Analog},
' `/ T* }* \: h, D! Q I7 ]5 p5 | - pac::{self, ADC1},
' L: l; n% L( ^9 f - prelude::*,
" l2 H1 n" B( n. j7 g9 ?' e. [ - rcc::RccExt,$ R" l0 B5 _( C) P3 {
- };
2 n+ K3 k" b% s. i5 L
' L% K, k/ T% W6 O( A- #[app(device = stm32f3xx_hal::pac, peripherals = true)]; G; H5 V+ [. M3 c% J8 |( O
- const APP: () = {% Z& b- X( T/ y' t8 T2 v2 M. \
- struct Resources {
( u5 e9 @# V: R8 D# A - adc1: Adc<ADC1>,
8 L8 N; c ]) M7 q5 o" N2 f. t: s5 r - adc1_in1_pin: PA0<Analog>,9 F; ^9 o! e& y' R- {; K5 Y" T( {
- }! Z2 M) F$ |+ e! ~ r
9 `) {6 ^( d1 V/ Q- p- #[init]- M9 I- U( I: A4 n4 Z8 C$ j
- fn init(cx: init::Context) -> init::LateResources {
$ q0 |$ f* D! q' R- Q! W2 W - let mut dp: pac::Peripherals = cx.device;5 l, B8 m% G& R0 a; ^' D c" n
- let mut rcc = dp.RCC.constrain();
( f$ G' T: m1 x
3 |2 O. L% z& \& Y/ p+ J- let mut flash = dp.FLASH.constrain(); c4 p. y* G: _( E, [, Z* H
- let clocks = rcc.cfgr.freeze(&mut flash.acr);8 T/ p' K! I" {4 {
- 5 I0 K5 b0 X% o o
- let adc1 = adc::Adc::adc1(! H0 } o/ f+ s! }3 k9 e
- dp.ADC1,
. b% b5 B6 z% o$ A; v5 w6 X - &mut dp.ADC1_2,
# d. b/ T# m4 Z* a% a$ t1 g - &mut rcc.ahb,: L: ?! N" ^6 [
- adc::CkMode::default(),
+ }$ C/ j" `3 K! G7 X - clocks,
a! W" }8 a E: ^# _* M$ X2 X - );0 S+ B" F& R: j2 C% V5 H
- 4 S! A2 T c* D' Z3 |% l6 N# ~' M
- let mut gpioa = dp.GPIOA.split(&mut rcc.ahb); R4 f; D2 f9 q* A- Z; U4 [
- let adc1_in1_pin = gpioa.pa0.into_analog(&mut gpioa.moder, &mut gpioa.pupdr);! j8 _( S. U4 a# }7 B
2 z7 Q( N E8 y8 g- init::LateResources { adc1, adc1_in1_pin }, M$ s5 L7 y$ W- \& N
- }' i/ {9 c! T7 @( G% c7 Q/ {
- , ]2 J+ F; Y' O. `+ L" h
- #[idle(resources=[adc1,adc1_in1_pin])]
2 J6 m/ s3 Q B% w0 ]+ o4 { - fn idle(cx: idle::Context) -> ! {
3 v8 k5 {0 J, I - loop {) W& m+ q; G. c" F
- let adc1_in1_data: u16 = cx
( K/ n3 R! X# Z! P: C - .resources
4 |' y$ a# ]/ b! R( l - .adc1% U. l' X" G* ]# g" }7 f+ G
- .read(cx.resources.adc1_in1_pin)
+ Y( t9 I4 b+ L. h8 k1 _8 U- e - .expect("Error reading adc1.");
8 \( D+ X% f$ T. N. J& K1 e - hprintln!("PA0 reads {}", adc1_in1_data).unwrap();
5 q3 c3 {% E/ |$ f4 X - delay(2_000_000);1 h* n% V6 m( @" A9 z, q4 N. a
- }. `4 R" D; P; m, U% X
- }' [( E( v. b3 T- o" ?: g' o0 s9 N
- };
复制代码 : O' G0 m+ u) ~; D! w$ |3 V
|