你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】使用 rust 开发 stm32:stm32f3discovery-adc-rtic

[复制链接]
STMCU小助手 发布时间:2021-12-5 10:52
本例程参考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
  1. #![no_main]) ?" C* h( S! j: n6 J+ Q; z& r
  2. #![no_std]" \+ B3 f8 P9 o0 k7 G! R- u2 j

  3. & b, A2 D: X; O: p6 \5 d1 V0 c/ t" d
  4. use cortex_m::asm::delay;' V5 t9 x; t* j1 a
  5. use cortex_m_semihosting::hprintln;8 a! C# t, A  Z; b
  6. use panic_semihosting as _;
    ; W0 N2 l9 i# n: C, d+ n
  7. use rtic::app;
    5 H0 K3 K! c' t6 a: U7 j4 G0 ^9 \
  8. use stm32f3xx_hal::{4 o9 [  C  l' W
  9.     adc::{self, Adc},1 ?$ f2 f: P; H' C( Z, z3 @) g
  10.     gpio::{gpioa::PA0, Analog},
    ' `/ T* }* \: h, D! Q  I7 ]5 p5 |
  11.     pac::{self, ADC1},
    ' L: l; n% L( ^9 f
  12.     prelude::*,
    " l2 H1 n" B( n. j7 g9 ?' e. [
  13.     rcc::RccExt,$ R" l0 B5 _( C) P3 {
  14. };
    2 n+ K3 k" b% s. i5 L

  15. ' L% K, k/ T% W6 O( A
  16. #[app(device = stm32f3xx_hal::pac, peripherals = true)]; G; H5 V+ [. M3 c% J8 |( O
  17. const APP: () = {% Z& b- X( T/ y' t8 T2 v2 M. \
  18.     struct Resources {
    ( u5 e9 @# V: R8 D# A
  19.         adc1: Adc<ADC1>,
    8 L8 N; c  ]) M7 q5 o" N2 f. t: s5 r
  20.         adc1_in1_pin: PA0<Analog>,9 F; ^9 o! e& y' R- {; K5 Y" T( {
  21.     }! Z2 M) F$ |+ e! ~  r

  22. 9 `) {6 ^( d1 V/ Q- p
  23.     #[init]- M9 I- U( I: A4 n4 Z8 C$ j
  24.     fn init(cx: init::Context) -> init::LateResources {
    $ q0 |$ f* D! q' R- Q! W2 W
  25.         let mut dp: pac::Peripherals = cx.device;5 l, B8 m% G& R0 a; ^' D  c" n
  26.         let mut rcc = dp.RCC.constrain();
    ( f$ G' T: m1 x

  27. 3 |2 O. L% z& \& Y/ p+ J
  28.         let mut flash = dp.FLASH.constrain();  c4 p. y* G: _( E, [, Z* H
  29.         let clocks = rcc.cfgr.freeze(&mut flash.acr);8 T/ p' K! I" {4 {
  30. 5 I0 K5 b0 X% o  o
  31.         let adc1 = adc::Adc::adc1(! H0 }  o/ f+ s! }3 k9 e
  32.             dp.ADC1,
    . b% b5 B6 z% o$ A; v5 w6 X
  33.             &mut dp.ADC1_2,
    # d. b/ T# m4 Z* a% a$ t1 g
  34.             &mut rcc.ahb,: L: ?! N" ^6 [
  35.             adc::CkMode::default(),
    + }$ C/ j" `3 K! G7 X
  36.             clocks,
      a! W" }8 a  E: ^# _* M$ X2 X
  37.         );0 S+ B" F& R: j2 C% V5 H
  38. 4 S! A2 T  c* D' Z3 |% l6 N# ~' M
  39.         let mut gpioa = dp.GPIOA.split(&mut rcc.ahb);  R4 f; D2 f9 q* A- Z; U4 [
  40.         let adc1_in1_pin = gpioa.pa0.into_analog(&mut gpioa.moder, &mut gpioa.pupdr);! j8 _( S. U4 a# }7 B

  41. 2 z7 Q( N  E8 y8 g
  42.         init::LateResources { adc1, adc1_in1_pin }, M$ s5 L7 y$ W- \& N
  43.     }' i/ {9 c! T7 @( G% c7 Q/ {
  44. , ]2 J+ F; Y' O. `+ L" h
  45.     #[idle(resources=[adc1,adc1_in1_pin])]
    2 J6 m/ s3 Q  B% w0 ]+ o4 {
  46.     fn idle(cx: idle::Context) -> ! {
    3 v8 k5 {0 J, I
  47.         loop {) W& m+ q; G. c" F
  48.             let adc1_in1_data: u16 = cx
    ( K/ n3 R! X# Z! P: C
  49.                 .resources
    4 |' y$ a# ]/ b! R( l
  50.                 .adc1% U. l' X" G* ]# g" }7 f+ G
  51.                 .read(cx.resources.adc1_in1_pin)
    + Y( t9 I4 b+ L. h8 k1 _8 U- e
  52.                 .expect("Error reading adc1.");
    8 \( D+ X% f$ T. N. J& K1 e
  53.             hprintln!("PA0 reads {}", adc1_in1_data).unwrap();
    5 q3 c3 {% E/ |$ f4 X
  54.             delay(2_000_000);1 h* n% V6 m( @" A9 z, q4 N. a
  55.         }. `4 R" D; P; m, U% X
  56.     }' [( E( v. b3 T- o" ?: g' o0 s9 N
  57. };
复制代码
: O' G0 m+ u) ~; D! w$ |3 V
赞 收藏 评论0 发布时间:2021-12-5 10:52

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版