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

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

[复制链接]
攻城狮Melo 发布时间:2023-4-16 21:08
stm32F103c8系列的ADC ,本次选用PA2,PA38 g  c' [: [2 n4 {1 H( X. d) O

- H  M0 f# ?+ B- I" S1 w6 Q
aedf86ec9dc441b28661ecd0983e4def.png 3 P( }5 `/ ~8 x8 c3 U, O

! h% S. s& y1 D0 z, N* Y# S
e96d7648e01c4c7c84ac044f920ae312.png # h& x' D  z# b5 L6 x; ?6 u1 [* @

8 j% `' v: y+ P7 B! w, z  DScan Conversion Mode( 扫描模式 ) 使用了多个通道ENABLE就是开启扫描模式,否则DISABLE* I3 z( U, R2 W: a* s

, i) S+ K* G! ~Continuous Conversion Mode(连续转换模式) 连续转换ENABLE,不连续则DISABLE开一次转换一次$ h) Y* [4 O, p; @

5 h, }% z$ h8 i' C9 j
Discontinuous Conversion Mode(间断模式) 多个通道则需使能ENABLE2 ~8 r) z5 P/ W& a
; A" S! R2 `/ B& m6 z
number of Discontinous Conversions间断模式可以让扫描的2个通道进行分成四2个组,此为配置间断组每个组有几个通道的,这里必须配置为1(否则在获取ad值得时候只能读取到每个间断组最后一个通道)。9 y" @# g2 F( t5 o' B0 u
0 D2 E+ Y" Q! w. j; O
b231ee6290c94d83962fb2d9fe596004.png / i' y* e( t0 c) Q) P$ q9 z" D/ g

4 i5 K, L& Z4 i( @" GEnable Regular Conversions (启用常规转换模式)  9 h" o3 l2 n% \: G
- t8 e3 S# H3 u
Number OF Conversion(转换通道数)    用了两个
, X! c1 R2 H+ w/ i% b5 \/ J5 {  Z6 K: d6 i0 k" t9 e
Extenal Trigger Conversion Source (外部触发转换源) 选软件触发
: E# }6 W% S) W5 z: n5 m3 V9 a3 T  @& A: r
Rank 配置两个通道为哪个,且设置转换时间 ; ~- P% P" M, A6 K  {% M' Z* N, Q" w
1 p) `# ?; o' m' W
用print函数输出串口,则在usart.c中加入以下函数且勾选Use MicroLIB4 X0 z0 @* w0 r) q! I4 F7 {  a, H
  1. /* USER CODE BEGIN 0 */ / j0 e) E& \: R9 E2 f( v
  2. #include<stdio.h>
    ' f5 ~1 ?" z- o  K4 t1 j8 F+ o; d- e
  3. int fputc(int ch, FILE *f). Y! E. A2 a) J
  4. {
    ! j+ h6 @% O9 w& p
  5.   HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);; h3 ]% w$ {' b! f/ ~
  6.   return ch;8 a! `' i% I( u: K* j5 Z2 K
  7. }) L% S$ t0 T5 g  B& i3 E

  8. ) E2 |/ L8 _4 z2 F7 A. s
  9. /* USER CODE END 0 */
复制代码

$ x$ J% n! e" v7 pADC函数
; p# {0 N. g; B6 S
  1.   /* USER CODE BEGIN 1 */
    " W  e$ m0 C0 ~' y7 w: f0 Q: D" ~5 [
  2.         uint8_t i;
    - s# G1 \0 R( W1 s- c8 L6 M! X: X) k9 A7 n
  3.         uint16_t adcBuf[2];
    7 B  d6 e- C& \! S
  4.   /* USER CODE END 1 */
    9 m) q) c7 }, P
  5. 7 P. r1 \# A( r% O6 Y" u' [
  6.   /* USER CODE BEGIN 2 */9 {9 L& E- ?4 L7 y; ^3 i
  7.         HAL_ADCEx_Calibration_Start(&hadc1);    //AD校准; z; k* G9 S; H/ {
  8.   /* USER CODE END 2 */
复制代码

6 E. ?4 C; L3 t  j) vHAL_ADC_Start(&hadc1);函数必须放入for,若不是则采集第一次的ADC通道,即PA2 : w; w& x# H1 J3 L' d# ~+ X
  1.   while (1); t6 D( ?4 P7 t0 B1 t! t" z
  2.   {
    6 P: M7 _, a" }- W$ v9 a2 \, t
  3.     /* USER CODE END WHILE */                6 h$ b" Z4 X9 e
  4.                 for(i=2;i<4;i++)0 x  R+ _7 M% e" Q% N9 l
  5.                 {
    2 ?8 x. b9 t1 l& t  N9 p
  6.                                 HAL_ADC_Start(&hadc1); //此开始函数必须放入for,若不是则采集第一次的ADC通道,即PA25 ~# E- P! e1 n* C. \
  7.                                 HAL_ADC_PollForConversion(&hadc1,0xffff);
    ) R" @! J. Y; d2 X
  8.                                 adcBuf[i]=HAL_ADC_GetValue(&hadc1);5 z% K$ E0 [" x
  9.                                 printf("PA%d:  %.4fV\r\n",i,adcBuf[i]*3.3/4096);/ k# I( V4 m) g. @
  10.                 }
    " F0 `9 V9 v1 l/ _- M' c" n9 e
  11.                 HAL_ADC_Stop(&hadc1);6 c: E$ U' y! Q& M; H
  12.                 HAL_Delay(1000);8 L- u* p* i. C' ]/ N2 O' P9 U
  13.     /* USER CODE BEGIN 3 */
    . S! x+ o( A- J, J0 @8 k
  14.   }
复制代码

9 C0 \% F+ k: z+ F" d————————————————
1 M% \" y2 ]& ^# W" K1 y' e版权声明:@一二三四五; p' k0 B* _# m' G8 i
如有侵权请联系删除
" _0 ^* F& v, S* d
收藏 评论0 发布时间:2023-4-16 21:08

举报

0个回答

所属标签

相似技术帖

官网相关资源

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