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

基于STM32 HAL ADC多通道经验分享

[复制链接]
攻城狮Melo 发布时间:2023-4-16 21:08
stm32F103c8系列的ADC ,本次选用PA2,PA3: d! n( i7 _* M( c0 u% e
+ A- y5 A  L. D( t0 S3 Q
aedf86ec9dc441b28661ecd0983e4def.png
5 n( l: l0 ?" d, k( K6 c7 e3 B
8 K1 `. f" x( R/ f/ x
e96d7648e01c4c7c84ac044f920ae312.png % V/ Z0 g8 O1 C6 k" i' F7 K
' a4 a/ r. i) n2 W5 p3 Y- ~* R
Scan Conversion Mode( 扫描模式 ) 使用了多个通道ENABLE就是开启扫描模式,否则DISABLE; O. e( x8 A/ R/ B
; f) i9 X$ O% q2 n
Continuous Conversion Mode(连续转换模式) 连续转换ENABLE,不连续则DISABLE开一次转换一次0 _) U* X# p2 N* D

2 Z% b3 P* ]2 J5 C
Discontinuous Conversion Mode(间断模式) 多个通道则需使能ENABLE
9 g1 a/ g: B, W$ w) e4 k0 X0 p4 G6 N
number of Discontinous Conversions间断模式可以让扫描的2个通道进行分成四2个组,此为配置间断组每个组有几个通道的,这里必须配置为1(否则在获取ad值得时候只能读取到每个间断组最后一个通道)。
4 i/ `7 h4 A6 L# O
1 X/ u% _+ T0 F5 f% Q2 l3 n7 [( U
b231ee6290c94d83962fb2d9fe596004.png   d! ?- ?8 c7 R' Q) Z
5 q( x3 z7 ]1 M% G
Enable Regular Conversions (启用常规转换模式)  3 \( n9 ], _" [

# C7 V& A# ^# C) l+ B
Number OF Conversion(转换通道数)    用了两个
2 e& |! e4 M* m
& m0 \$ J" K2 T
Extenal Trigger Conversion Source (外部触发转换源) 选软件触发 . y2 h1 K* {: k; S! ]" ~3 W

, ~' e6 l! p/ w, }2 j* r3 L; h* K
Rank 配置两个通道为哪个,且设置转换时间
( Y% o, x& I3 \' y2 M! A& Z- w  {2 J% ?- m% i
用print函数输出串口,则在usart.c中加入以下函数且勾选Use MicroLIB$ ]; G2 X" Q- c& j/ C1 m7 C
  1. /* USER CODE BEGIN 0 */
    / W( c3 M" Y3 Z# r& P
  2. #include<stdio.h>" A" `, V9 [, x* l
  3. int fputc(int ch, FILE *f)5 h8 c/ I# J& ~6 T
  4. {
    0 A. @( E9 @0 ~# q2 L* @
  5.   HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);$ N- w) P: u. h
  6.   return ch;
    ( V/ g6 A# J, m0 M. X
  7. }- [- f2 g3 r8 z; ~# \

  8. ( l* q/ ~( V4 o
  9. /* USER CODE END 0 */
复制代码
: X) A4 N/ K& a6 m; |. x, w, P
ADC函数) {6 M  A( c* F4 S' n. o
  1.   /* USER CODE BEGIN 1 */
    1 L0 ~3 A1 \& d7 F- s$ M
  2.         uint8_t i;
    # P5 k5 {, \+ ^7 A$ O. O3 F
  3.         uint16_t adcBuf[2];3 u/ c2 P" L$ S, [* k* M8 L2 c1 r
  4.   /* USER CODE END 1 */6 s* M0 I  d5 v8 e' ~9 \

  5. 7 ]/ \; _5 m; f: A" m4 Q) d
  6.   /* USER CODE BEGIN 2 */
    * e" X. c$ L6 u+ v* }; c2 Z9 K
  7.         HAL_ADCEx_Calibration_Start(&hadc1);    //AD校准
    8 V$ H9 u. `5 k% K9 r
  8.   /* USER CODE END 2 */
复制代码
+ j1 G: ?$ w9 ?+ F
HAL_ADC_Start(&hadc1);函数必须放入for,若不是则采集第一次的ADC通道,即PA2 $ {' d1 A, n3 R4 q& z5 ?+ h+ e1 f/ y
  1.   while (1)
    6 d% N0 s) w. v$ g3 y9 o9 ~
  2.   {
    - F5 s' Q3 k$ e) [' [/ w" Y
  3.     /* USER CODE END WHILE */                % q! ?4 R5 E9 g
  4.                 for(i=2;i<4;i++)# n* k* `% Y0 t# S, g; ~5 M
  5.                 {+ I' R; H4 M. t9 ^* i% ?% L7 Q
  6.                                 HAL_ADC_Start(&hadc1); //此开始函数必须放入for,若不是则采集第一次的ADC通道,即PA2; g: S& T  R$ h% R1 ~- Y
  7.                                 HAL_ADC_PollForConversion(&hadc1,0xffff);
    3 g$ K/ V! M5 H  l! L4 N
  8.                                 adcBuf[i]=HAL_ADC_GetValue(&hadc1);; V: S4 Q& J, Z, n6 h
  9.                                 printf("PA%d:  %.4fV\r\n",i,adcBuf[i]*3.3/4096);
    & G  [9 a7 K1 b/ K
  10.                 }" m" I7 P/ m. L8 r
  11.                 HAL_ADC_Stop(&hadc1);* T. o) v# k4 H
  12.                 HAL_Delay(1000);. v- s$ {* L* P% H
  13.     /* USER CODE BEGIN 3 */" l& T9 k* ^1 Q2 z' S5 E' k$ a
  14.   }
复制代码
4 y% Q9 v0 ^( h
————————————————# _% U# d! d% ^7 Z
版权声明:@一二三四五
  D2 j' A; E% \) M如有侵权请联系删除
/ o$ [: K' ?/ n& s
赞 收藏 评论0 发布时间:2023-4-16 21:08

举报

0个回答

所属标签

相似技术帖

官网相关资源

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