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

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

[复制链接]
攻城狮Melo 发布时间:2023-4-16 21:08
stm32F103c8系列的ADC ,本次选用PA2,PA3/ O4 u5 p8 }: e) K

- [2 ]* j( y- _; Q5 c9 j. k: {; f
aedf86ec9dc441b28661ecd0983e4def.png ( m% v( U$ M! D

% B0 X/ U4 c6 M5 @/ E+ k1 J  C% d/ H
e96d7648e01c4c7c84ac044f920ae312.png 5 s2 _' p; x( |+ p% }3 p2 T& C7 l

, K* |8 a& Y. v4 d; s. x' ]Scan Conversion Mode( 扫描模式 ) 使用了多个通道ENABLE就是开启扫描模式,否则DISABLE
4 M  C# K) L7 h/ w$ a  e- E6 V; E% c  t# j
Continuous Conversion Mode(连续转换模式) 连续转换ENABLE,不连续则DISABLE开一次转换一次
( V) ~% P! h5 r; J/ H: _# \: M% Z+ o6 P2 g7 a
Discontinuous Conversion Mode(间断模式) 多个通道则需使能ENABLE  N- r  }+ v0 I; P' A3 d6 M% h5 E
3 V( p$ h/ W% q7 s9 L0 G: y
number of Discontinous Conversions间断模式可以让扫描的2个通道进行分成四2个组,此为配置间断组每个组有几个通道的,这里必须配置为1(否则在获取ad值得时候只能读取到每个间断组最后一个通道)。: G0 W% o$ o+ J. H: t

/ g; {, y6 Y( y7 \' L; ?" p
b231ee6290c94d83962fb2d9fe596004.png 4 W. f: V4 J+ ^) \* J+ Q" }

# n5 J1 f. a* f2 T1 s& pEnable Regular Conversions (启用常规转换模式)  ' w/ g6 {$ @9 g  c  W% X* @% P* L
0 m8 Y( |4 T& W! q) s$ }) n6 N
Number OF Conversion(转换通道数)    用了两个
1 i% i3 z! p0 q8 N* w% i
* `, d: r, P9 ~8 h/ \
Extenal Trigger Conversion Source (外部触发转换源) 选软件触发
0 R% K+ `2 ~( J. b" p8 z9 M" M8 F
  I7 M! a, Y' \/ Y6 k6 k3 i
Rank 配置两个通道为哪个,且设置转换时间 & v' e3 ]) b( O

3 S: y' H# S" C, t! O
用print函数输出串口,则在usart.c中加入以下函数且勾选Use MicroLIB: h; _3 e! I. s4 {  ?; j
  1. /* USER CODE BEGIN 0 */ / l- z$ ]6 ]0 k7 m  ~. b& ^% \& i& ?+ i
  2. #include<stdio.h>7 Z$ g8 l6 @6 {$ U2 q+ [: S
  3. int fputc(int ch, FILE *f)# Q) Q7 u0 @0 `
  4. {( k8 l- m4 R" S% H* K' J: }1 }7 A
  5.   HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
    ( L# J! Y/ g4 r+ [! q
  6.   return ch;
    + d& ~7 C3 C1 M$ J5 C
  7. }# L, o% \, F8 v9 i1 L3 U
  8. 3 ?/ z7 d6 H" a! H$ x/ V6 t' G
  9. /* USER CODE END 0 */
复制代码

( z3 Q2 Y8 L  cADC函数
- ]0 |% {, n1 u. x0 t7 v
  1.   /* USER CODE BEGIN 1 */4 B; I) I; C& H6 E
  2.         uint8_t i;
    5 {5 Q6 A) h4 z# Z- J
  3.         uint16_t adcBuf[2];8 b( C2 n  q  J* ?4 n
  4.   /* USER CODE END 1 */
    # T9 t! U7 ^7 V9 U3 R3 ?0 n
  5. / d  J+ v$ p/ _
  6.   /* USER CODE BEGIN 2 */6 W2 {- k4 H, w5 u, _/ g
  7.         HAL_ADCEx_Calibration_Start(&hadc1);    //AD校准
    ) g3 n/ x/ e+ W: l$ t
  8.   /* USER CODE END 2 */
复制代码

( a; W! z0 f" E9 f* [HAL_ADC_Start(&hadc1);函数必须放入for,若不是则采集第一次的ADC通道,即PA2 7 f0 d4 h' W% p0 u
  1.   while (1)
    ) p# z. k, I) x3 O- I1 H
  2.   {# a; A: s5 `0 a9 ~% V' j4 @) A4 Z. P
  3.     /* USER CODE END WHILE */                . T4 u( v  E' I2 o( m3 g
  4.                 for(i=2;i<4;i++)
    ( \% {: I6 E! ]4 s  \/ ]
  5.                 {/ _+ r! t4 m$ t2 h
  6.                                 HAL_ADC_Start(&hadc1); //此开始函数必须放入for,若不是则采集第一次的ADC通道,即PA2
    * r& R( f1 K8 A, N, m
  7.                                 HAL_ADC_PollForConversion(&hadc1,0xffff);9 D: g* l. O  I8 Q; M
  8.                                 adcBuf[i]=HAL_ADC_GetValue(&hadc1);
    7 z2 [( d$ b! i, X, ~
  9.                                 printf("PA%d:  %.4fV\r\n",i,adcBuf[i]*3.3/4096);- u) j: u$ W, n
  10.                 }/ ]& Q3 z8 ?/ w1 J
  11.                 HAL_ADC_Stop(&hadc1);5 P; T1 h' C( m+ I- h
  12.                 HAL_Delay(1000);: \5 l: W+ C, Z8 U3 T- T
  13.     /* USER CODE BEGIN 3 */8 \0 M+ `2 I- Z. k* [; U
  14.   }
复制代码
: R8 I7 w8 H( }* e9 z  I0 u: u  `
————————————————
) j# `' I& m4 x2 r  P/ F版权声明:@一二三四五6 x# n; [2 `% g% x6 c) t
如有侵权请联系删除$ i6 J! p/ e  V2 F0 ~
赞 收藏 评论0 发布时间:2023-4-16 21:08

举报

0个回答

所属标签

相似技术帖

官网相关资源

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