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

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

[复制链接]
攻城狮Melo 发布时间:2023-4-16 21:08
stm32F103c8系列的ADC ,本次选用PA2,PA3
' x; f$ j7 C+ |6 t1 I* J( C3 R3 o  w( a* Y
aedf86ec9dc441b28661ecd0983e4def.png
$ [  @0 t7 v. d/ u* ?! c# n! g
  h, G* A2 _% n6 Q
e96d7648e01c4c7c84ac044f920ae312.png
2 v' T  H# \8 k
& o4 B$ O2 X: K5 a' D  MScan Conversion Mode( 扫描模式 ) 使用了多个通道ENABLE就是开启扫描模式,否则DISABLE
( c4 H5 b3 ?! C2 [% I( u1 l: E, s
6 p4 _! \) r$ z3 I& Q, sContinuous Conversion Mode(连续转换模式) 连续转换ENABLE,不连续则DISABLE开一次转换一次
% F  J& K* {$ s' t( i1 {$ b- Y& C# E8 H9 |  ^; j8 @3 c/ o
Discontinuous Conversion Mode(间断模式) 多个通道则需使能ENABLE
; T+ S$ Z! l2 ~0 v' @6 L! s7 f- }1 Q( n! q6 v
number of Discontinous Conversions间断模式可以让扫描的2个通道进行分成四2个组,此为配置间断组每个组有几个通道的,这里必须配置为1(否则在获取ad值得时候只能读取到每个间断组最后一个通道)。
6 c1 b: z+ X, o2 }+ F/ M+ e
$ S0 j7 q5 w  {- @9 I' p
b231ee6290c94d83962fb2d9fe596004.png 3 l  `4 O+ _5 u: n
* t) a' Z! ]7 a9 ^1 L: c
Enable Regular Conversions (启用常规转换模式)  ) L. g# M3 ^# ?9 @! X

& O2 n5 Z% a& }5 d6 }
Number OF Conversion(转换通道数)    用了两个2 l3 p/ T7 u5 A+ Y1 h0 T6 ]! {2 O

3 R6 ^# k" @6 I* n2 ]7 u
Extenal Trigger Conversion Source (外部触发转换源) 选软件触发
1 l* H6 c6 t/ ]  d  M5 W6 R1 G) s  C/ `+ z9 N' s6 G
Rank 配置两个通道为哪个,且设置转换时间
9 D: B: B" L# A* }: z1 u# b( i. J) b
用print函数输出串口,则在usart.c中加入以下函数且勾选Use MicroLIB# ]$ Z- G! ]1 M# l/ r  c2 H
  1. /* USER CODE BEGIN 0 */   v- x6 O& C1 o+ i! y
  2. #include<stdio.h>8 {1 G4 D& K4 K9 j
  3. int fputc(int ch, FILE *f)
    % T& Y+ D6 F5 C  |$ D' Z' H% h
  4. {6 k8 f  f7 h  [& k/ M# M
  5.   HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
    $ n6 T9 A* D1 H! \# j
  6.   return ch;
    % z) O6 \1 Q- X! G
  7. }3 V% c* f( R  W* h" ?

  8. * v3 O" C2 v& N( F9 `0 I% o7 c
  9. /* USER CODE END 0 */
复制代码
+ U* b. q- \, `3 D  x
ADC函数: {5 K: N5 L/ K+ [+ c8 l6 u9 f
  1.   /* USER CODE BEGIN 1 */
    ) h. d+ ]; ~4 |' @2 A% a; a
  2.         uint8_t i;
    7 I4 |/ I* a, s# X
  3.         uint16_t adcBuf[2];. l' ?- v" x* B1 Z2 J
  4.   /* USER CODE END 1 */
    ) O; m! a/ Q  a  c
  5. 1 I/ d% J2 v9 C. s4 h
  6.   /* USER CODE BEGIN 2 */
    # N- d. k6 l4 o5 ^
  7.         HAL_ADCEx_Calibration_Start(&hadc1);    //AD校准8 R* r7 U) y8 j' n! [
  8.   /* USER CODE END 2 */
复制代码
1 J8 i0 T, y+ w# r2 j
HAL_ADC_Start(&hadc1);函数必须放入for,若不是则采集第一次的ADC通道,即PA2 + F" x& u" x  K8 k" k
  1.   while (1)& Q9 {# L% ~1 S( D
  2.   {6 d+ S" m# L* P3 t1 C
  3.     /* USER CODE END WHILE */                1 ~) T+ E) N/ S& \5 m
  4.                 for(i=2;i<4;i++)
    & r4 L. Z# @, g: X' Y7 R* ^
  5.                 {
    5 K2 h+ N9 p0 {1 L
  6.                                 HAL_ADC_Start(&hadc1); //此开始函数必须放入for,若不是则采集第一次的ADC通道,即PA20 w- q% ?7 `, d# C; i+ v
  7.                                 HAL_ADC_PollForConversion(&hadc1,0xffff);
    : i) ~5 V. k/ `
  8.                                 adcBuf[i]=HAL_ADC_GetValue(&hadc1);' z, F) Z6 _7 K
  9.                                 printf("PA%d:  %.4fV\r\n",i,adcBuf[i]*3.3/4096);+ a8 Z- C% v, `5 ?" r! N! Y( b
  10.                 }: H  c* y8 i( J, Z4 E- y9 E) Z, v6 U8 x
  11.                 HAL_ADC_Stop(&hadc1);" r, Y, L+ c  p) A* `- y3 g& m
  12.                 HAL_Delay(1000);
    $ Q6 z! T0 A  ]: M
  13.     /* USER CODE BEGIN 3 */$ @$ i' s* E$ T# \& x+ M9 T
  14.   }
复制代码

+ n. e" z( ?- i* c' w0 X$ R% o! e————————————————
% N% _. O0 y# a7 h" E7 k* p( T5 h6 J2 N版权声明:@一二三四五
. f$ X% y6 X% P1 O& P如有侵权请联系删除
: m2 A( S* Q+ Q% @" `& U
赞 收藏 评论0 发布时间:2023-4-16 21:08

举报

0个回答

所属标签

相似技术帖

官网相关资源

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