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

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

[复制链接]
攻城狮Melo 发布时间:2023-4-16 21:08
stm32F103c8系列的ADC ,本次选用PA2,PA3" I# E( k8 J! V1 N: U! r! b/ x+ @
4 Z* M- _4 _. [, p
aedf86ec9dc441b28661ecd0983e4def.png , N% ^6 H' V# h/ g1 F* ^! G- d
! D( G2 \! n3 {( M
e96d7648e01c4c7c84ac044f920ae312.png
6 M1 V9 J4 C5 k
  W7 k' A( r+ ^8 mScan Conversion Mode( 扫描模式 ) 使用了多个通道ENABLE就是开启扫描模式,否则DISABLE/ C% c( l  a. J
' i1 F; \8 q" u7 a0 O1 `1 A
Continuous Conversion Mode(连续转换模式) 连续转换ENABLE,不连续则DISABLE开一次转换一次
5 _( Q& f  W' [. B  `- {2 E/ m% b2 a2 R0 P+ m) x0 j, p
Discontinuous Conversion Mode(间断模式) 多个通道则需使能ENABLE
3 t4 O" a3 X  }  u: ~8 I
( U: q& U6 l/ j( r1 b7 M2 ^* V
number of Discontinous Conversions间断模式可以让扫描的2个通道进行分成四2个组,此为配置间断组每个组有几个通道的,这里必须配置为1(否则在获取ad值得时候只能读取到每个间断组最后一个通道)。
' {' L' h' `- h0 ~' ]2 @/ X8 s. U2 |6 e7 j: H4 k
b231ee6290c94d83962fb2d9fe596004.png
5 w! h8 {' k) n! r4 Q: \3 u, {+ j
& N' V; k% J/ _
Enable Regular Conversions (启用常规转换模式)  
0 |8 X7 w( s  u( i0 U0 e4 f5 D& L; q7 ]1 Y* S; |
Number OF Conversion(转换通道数)    用了两个
: R. e5 N/ n3 S/ z8 n0 A7 P; J4 {' i( L
Extenal Trigger Conversion Source (外部触发转换源) 选软件触发
7 F, n, Z( e0 m* L8 K" q; N) B9 x" B" C
Rank 配置两个通道为哪个,且设置转换时间 9 x4 r0 N: ?1 Z5 J6 S3 S! c6 w

/ {2 w# |; P# B- _
用print函数输出串口,则在usart.c中加入以下函数且勾选Use MicroLIB- x3 [5 ^3 t" v9 [6 o' b
  1. /* USER CODE BEGIN 0 */ 8 H2 m5 T+ @/ m
  2. #include<stdio.h>
    , O' b* E+ i8 I$ c! H) u
  3. int fputc(int ch, FILE *f)" v, F- v# w  H4 z
  4. {+ e( b( |" b* @( {
  5.   HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
    9 }- ]* W# @+ W" M+ c2 k
  6.   return ch;3 p0 }. ~& o3 b  j  {  {/ x
  7. }
    : S! @: w' w3 S( M
  8. & `& m8 v% Y8 {% J. T# _
  9. /* USER CODE END 0 */
复制代码
& C7 e, P& Q  @- Z
ADC函数
8 a, s. U' a* k% B% ?1 Y1 Z, r
  1.   /* USER CODE BEGIN 1 */
    . T7 R0 Q+ P/ G: p; A
  2.         uint8_t i;* f4 V6 [* ?0 X9 J1 k0 g9 e* P
  3.         uint16_t adcBuf[2];
    4 @( W+ _0 {" C, d0 H+ U
  4.   /* USER CODE END 1 */0 T# Y) [( }: I' R

  5. 0 d# x) _& ^1 b1 P
  6.   /* USER CODE BEGIN 2 */
    , M5 c( _3 F. I1 u0 E0 J  a( @% \
  7.         HAL_ADCEx_Calibration_Start(&hadc1);    //AD校准3 U3 n; H/ T2 ]0 r
  8.   /* USER CODE END 2 */
复制代码
$ R( T6 N, F7 \! L$ \5 M' ~
HAL_ADC_Start(&hadc1);函数必须放入for,若不是则采集第一次的ADC通道,即PA2 2 Z% o1 J4 U$ O$ @9 z* r
  1.   while (1)$ a7 f9 E& J! q' C4 q# a' J
  2.   {
    / C7 G3 R( S+ o; v$ t! Q# o2 ^
  3.     /* USER CODE END WHILE */                , m, i: p* Z7 v, A4 U) K+ ^
  4.                 for(i=2;i<4;i++). X/ o* H  P8 H# _5 L
  5.                 {/ A/ c; B0 |  ]
  6.                                 HAL_ADC_Start(&hadc1); //此开始函数必须放入for,若不是则采集第一次的ADC通道,即PA2
    # \) H" q& L" i  c* ^' j; H
  7.                                 HAL_ADC_PollForConversion(&hadc1,0xffff);
    8 I) ]/ d) \, V8 a
  8.                                 adcBuf[i]=HAL_ADC_GetValue(&hadc1);6 @6 o* c1 j* X/ `
  9.                                 printf("PA%d:  %.4fV\r\n",i,adcBuf[i]*3.3/4096);
    / ]  ?& z8 O5 ^) ]" b% N& ~" T
  10.                 }
    1 `- W* ?% k+ t& S. r1 ?
  11.                 HAL_ADC_Stop(&hadc1);  H* a$ \& j& ~9 t( M3 O& E! \( J
  12.                 HAL_Delay(1000);7 k! k. ?3 K5 `' }8 l
  13.     /* USER CODE BEGIN 3 */6 g4 h) K8 u( c+ F% q
  14.   }
复制代码
% h. t( s7 ]- K3 T
————————————————; H! {: {; a+ w
版权声明:@一二三四五4 H  u5 \' T. K! u9 |( I
如有侵权请联系删除
) _$ r* _' D3 p1 a% n" j0 l
收藏 评论0 发布时间:2023-4-16 21:08

举报

0个回答

所属标签

相似技术帖

官网相关资源

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