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

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

[复制链接]
攻城狮Melo 发布时间:2023-4-16 21:08
stm32F103c8系列的ADC ,本次选用PA2,PA3) D) T2 w; [3 ?5 F7 p4 ]( k

- Y& T9 K. d4 @2 F! i4 ?
aedf86ec9dc441b28661ecd0983e4def.png
( {4 u9 B& z# ?! o6 l% K) \+ v( G& X) Y! a/ A
e96d7648e01c4c7c84ac044f920ae312.png
! |0 y( d: J4 {- U  w/ z" k* Z) L( @0 Y) Y# `
Scan Conversion Mode( 扫描模式 ) 使用了多个通道ENABLE就是开启扫描模式,否则DISABLE: p3 a) [' a- H' j- x/ d- m
2 h# _2 Z0 R7 Q0 V' O' }/ y8 ^0 c
Continuous Conversion Mode(连续转换模式) 连续转换ENABLE,不连续则DISABLE开一次转换一次
4 |6 ?( C7 s# t0 J$ E
2 D0 B$ C' `9 X; M+ f
Discontinuous Conversion Mode(间断模式) 多个通道则需使能ENABLE
* K7 f% n: s2 L4 x# v) B7 O
8 m" p5 P1 J: D- X3 b/ _5 A
number of Discontinous Conversions间断模式可以让扫描的2个通道进行分成四2个组,此为配置间断组每个组有几个通道的,这里必须配置为1(否则在获取ad值得时候只能读取到每个间断组最后一个通道)。: u6 C! K  r4 G6 K" a. J+ w. t/ V

" v( x/ z% G- T. Z
b231ee6290c94d83962fb2d9fe596004.png
2 I' M9 r) r5 C$ F0 ^( N* w

$ h! x! v) j, w# B, n2 uEnable Regular Conversions (启用常规转换模式)  
, w& Z* N8 A2 c6 o! h5 O; R5 S5 B: l/ d! K0 w- |) W  g
Number OF Conversion(转换通道数)    用了两个
6 F) W+ ]7 N& e* r- X, J  _( b$ k9 N: D, S% J" ~% ~
Extenal Trigger Conversion Source (外部触发转换源) 选软件触发 " K4 Z* u# D# V# J4 [: h
* `7 r0 e4 r  q1 U  s0 \4 N7 [
Rank 配置两个通道为哪个,且设置转换时间
/ C7 v# F5 h/ l4 N. ]8 v9 m- r8 \! `) E: S
用print函数输出串口,则在usart.c中加入以下函数且勾选Use MicroLIB
* u% e- E4 b% w7 a3 P+ L% S
  1. /* USER CODE BEGIN 0 */ 6 b' f) w  b! k; \: q9 H
  2. #include<stdio.h>2 a+ j, s& p; l5 ?& t, i
  3. int fputc(int ch, FILE *f)% Y& w0 d3 ?+ }& C& l* m
  4. {  q4 a# t8 z' n! z% d/ ~
  5.   HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
    3 c1 _( Q5 L% |
  6.   return ch;0 p0 A3 A! n5 u/ }3 N6 z& }, W
  7. }+ ]0 V0 P$ Z( e( Q* s5 e8 b

  8. 5 u# B% t6 \1 {
  9. /* USER CODE END 0 */
复制代码
! ?7 G- t# s) C- y( ^" m; h
ADC函数
3 ]" }" f7 a5 l% s; ?' Y& h
  1.   /* USER CODE BEGIN 1 */
    " W2 H3 p) E4 b6 Q
  2.         uint8_t i;9 `5 Y8 w0 O" w0 z. ?4 V* s
  3.         uint16_t adcBuf[2];5 r5 P$ Z4 G/ i) ]$ X' X) N; ^
  4.   /* USER CODE END 1 */
    # b; Y0 t2 Z- N3 f% G- ]8 y* ~3 P  P7 B
  5. " y9 p- I0 e7 u* d
  6.   /* USER CODE BEGIN 2 */! K- \$ \- d( b9 y& [) ~: j4 i
  7.         HAL_ADCEx_Calibration_Start(&hadc1);    //AD校准
    ; {+ I# P3 a  o! ^- [8 n- l) l
  8.   /* USER CODE END 2 */
复制代码

$ z# V5 C. M; D) `# m$ k2 DHAL_ADC_Start(&hadc1);函数必须放入for,若不是则采集第一次的ADC通道,即PA2
; ^  n% H9 h  m/ |/ Y2 M: c, B
  1.   while (1); Y' W$ s+ Y3 d: ~# l
  2.   {
    ; Y+ R- A; x' w
  3.     /* USER CODE END WHILE */                $ y% {% }3 O6 y; U* |
  4.                 for(i=2;i<4;i++)
    - v$ K) Z0 B% ?0 G$ F( \2 N) f
  5.                 {
    0 Z6 n# Q8 o5 }' x% E/ a
  6.                                 HAL_ADC_Start(&hadc1); //此开始函数必须放入for,若不是则采集第一次的ADC通道,即PA28 |& x( \0 U* W& w
  7.                                 HAL_ADC_PollForConversion(&hadc1,0xffff);
      j+ y5 h2 ^# i7 W8 B7 I5 `
  8.                                 adcBuf[i]=HAL_ADC_GetValue(&hadc1);
    % b! i: B( i1 \, E
  9.                                 printf("PA%d:  %.4fV\r\n",i,adcBuf[i]*3.3/4096);
    : M( k1 {) M6 M1 U& [7 ?7 g
  10.                 }1 d. K+ }7 t6 Q" q8 M7 }
  11.                 HAL_ADC_Stop(&hadc1);5 N' C8 D  f- ~
  12.                 HAL_Delay(1000);$ L# d  r- Q3 w$ m
  13.     /* USER CODE BEGIN 3 */, Z# o4 t8 b. l7 v9 t
  14.   }
复制代码
# e, h+ _* e- X8 ?  Q
————————————————
* }: s* W5 [1 y& B版权声明:@一二三四五' W7 ?: a  p$ l4 \/ N% H
如有侵权请联系删除/ U5 p0 }5 _: d$ f
收藏 评论0 发布时间:2023-4-16 21:08

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版