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

【经验分享】STM32G031-使用STM32CubeIDE实现DMA处理ADC

[复制链接]
STMCU小助手 发布时间:2021-11-11 22:00
STM32G031-使用STM32CubeIDE实现DMA处理ADC
2 l& u( t* Y+ y2 v一、USART配置
/ M' r# ^, S/ k7 ]% O
4 v0 p& I. S- f, N+ z
20210218163058312.png

( V% t+ Q5 y# b( a% S8 n- i& Z) w4 \* o, I/ I3 W
二、ADC配置  ]+ A: W6 Q) J  {. T) |( D
3 Q5 p4 W9 \2 o0 M$ B- H
2021021816321259.png

' A- p8 F! g+ k2 h. f) r$ |) R
5 T8 D! u( u3 }8 ?6 e
20210218163316679.png
! j7 k: Z* C- f% h: P' J4 C
' _! B0 e" T+ f. I
20210218163337657.png

( w: }9 `8 A; Z& U+ D/ s2 c
$ Q( x$ i7 P8 z& b  v" p3 J4 S: {配置完成后,生成代码即可。。。8 [6 ]1 Y( i' V
. ^0 ~% z) e3 q
三、用户代码6 ~$ W4 ]- g2 _' c! g  A
  1. /* USER CODE BEGIN Includes */
    % ^4 Q1 M. D: i; W/ L
  2. ) f& x) b3 ]0 F  C0 R- |
  3. #include "stdio.h"
    , B" C$ c: g: j- M5 G( z  p2 p
  4. /* USER CODE END Includes */* f& V! A% m( Q8 ^! |/ @

  5. % z+ ^/ s9 C. f, J
  6. /* USER CODE BEGIN PD */
    6 j" Y9 e& I2 {
  7. #ifdef __GNUC__
    - }8 w* ?, `) Q
  8. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)$ P4 w, ]" o( p, k5 e- q6 v
  9. #else' [& p! ], ?+ v/ `* K2 c# k2 {2 J
  10. #define PUTCHAR_PROTOTYPE int fputc(int ch,FILE F)
    ) f: G" o$ P% Z% e/ G) }
  11. #endif/ B# E0 }3 {$ w/ w/ f: g8 p" Y

  12. 9 O$ x. [' W/ v! I8 M  ]0 p( x
  13. PUTCHAR_PROTOTYPE; O! N' ^! |5 c; o5 \; P
  14. {! d9 z$ F2 ]$ Q5 L: @" Q
  15.         LL_USART_TransmitData8(USART2, (uint8_t)ch);0 J6 z& H+ G0 U. X4 D$ w
  16.         while(!LL_USART_IsActiveFlag_TXE(USART2)){}" B# L, ~  X$ m
  17.         return ch;+ c$ V& a) Y" i. z; N7 T9 ?
  18. }" l! t. w) ?. Y. [7 K4 S
  19. /* USER CODE END PD */2 l% d) o+ `9 u$ n6 `; A, {& b

  20. ; }1 I  o- X7 N7 B4 [2 W
  21. /* USER CODE BEGIN PV */" B, f0 \2 }: @( M$ A
  22. uint16_t ADC_ConvertedValue[150];* L! w& v; N, X: H. W2 _, ?: T) \
  23. uint8_t i;/ Q& M$ I0 n, }' V  w1 V
  24. uint32_t ad0,ad1,ad4;: |- Q4 L# ~3 V( B
  25. /* USER CODE END PV */
    ( S3 W: G: Z# ]

  26.   I! Q3 c) q) S7 P
  27. /* USER CODE BEGIN 0 */: C" a* t; E) @8 i9 ]
  28. void ADC_DMA_Config_Start(void)
      u  A: F6 q( R. P) h7 M+ Q0 g
  29. {+ \3 p! g" E0 B# ~8 j' n
  30.         LL_mDelay(2); //延时2ms,避免DMA读取数据通道不对
    ( d, m4 e; G% [+ j
  31.         // LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_HIGH);( J) \/ J$ ~3 M- l( b% N# A; c
  32.         LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, 150);3 i4 o# [  h3 `) ?7 M( }' I; e% _
  33.         LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_1,(uint32_t)ADC_ConvertedValue);
    - J: t$ F7 }, e2 o; `$ q" v, q
  34.         LL_DMA_SetPeriphAddress(DMA1, LL_DMA_CHANNEL_1,LL_ADC_DMA_GetRegAddr(ADC1,LL_ADC_DMA_REG_REGULAR_DATA));
    : J! V) n: x* x1 e2 G. z( m2 f3 M
  35.         LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);
    8 U- r' A0 f. C7 r% N2 J
  36. . r5 Q! ^+ N7 J
  37.         LL_ADC_StartCalibration(ADC1);$ I/ J0 H2 q/ k) M# Y
  38.         while(LL_ADC_IsCalibrationOnGoing(ADC1));) V8 C, m5 V5 z3 C1 C' l& S2 U
  39.         LL_ADC_Enable(ADC1);6 {" p; A3 F; k
  40.         LL_ADC_REG_StartConversion(ADC1);
    1 m, o8 ?7 g  R! v% ?# B& Q- _

  41. 1 P1 n  k1 ]" s6 @$ G) n# K" s$ L
  42.         LL_ADC_REG_SetDMATransfer(ADC1, LL_ADC_REG_DMA_TRANSFER_UNLIMITED);3 n3 ~+ k- s$ v* k
  43. }
    9 I, p! v  m5 f* d6 U
  44. / _4 x, V* x& S4 L& h( h- a$ y
  45. + v! [6 [) o' N
  46. /* USER CODE END 0 */
    * e4 }/ l& M8 R9 h% c8 A* u

  47. 2 }" V8 c" G% C- H4 z) _5 j
  48. /* USER CODE BEGIN 2 */
    / U. Q  F# k/ C7 s0 r
  49.   printf("STM32CubeMX Test...\r\n");  s8 x: l7 Y5 ?/ S4 d$ ?+ k5 c
  50.   ADC_DMA_Config_Start();
    2 J$ E( n6 S6 a) M8 M. o, g
  51.   /* USER CODE END 2 */
    5 U' V/ B0 H2 v
  52. /* USER CODE BEGIN 3 */
    & B' o7 N6 v8 `2 k
  53.     for(i = 0,ad0 = 0,ad1 = 0,ad4 = 0; i < 150;){' H) H; ~! H4 F8 Q  P! F: E7 X" z8 B
  54.                 ad0 += ADC_ConvertedValue[i++];
    ) J+ W, O; n0 `0 a3 b9 j& @$ c
  55.                 ad1 += ADC_ConvertedValue[i++];2 ^( ?+ i" O# V! z" g. L! b
  56.                 ad4 += ADC_ConvertedValue[i++];6 T% G1 S4 j3 Z" f% w7 o: a4 c
  57.         }
    6 `' k: x" M& y7 _
  58.         ad0 /= 50;        // 实现均匀滤波/ T- c  B2 X' \1 g* n" L0 X0 I& ~
  59.         ad1 /= 50;        // 实现均匀滤波' _  e, Y8 m) ^# R1 x2 T6 A+ ~
  60.         ad4 /= 50;        // 实现均匀滤波
    ' {) N7 O/ n: o
  61. //        printf("ADC->CH1 Value:%lf\r\n",(float)ad0*3.3/4095);& z2 ?9 W& N. Y# j/ o% d9 d
  62. //        printf("ADC->CH2 Value:%lf\r\n",(float)ad1*3.3/4095);
    2 J6 \9 ^4 B  p; N- a& x* N! a" C
  63. //        printf("ADC->CH4 Value:%lf\r\n",(float)ad4*3.3/4095);0 c8 F& q( i2 r" V; X5 n
  64.         printf("ADC Value:%lf,%lf,%lf\r\n",(float)ad0*3.3/4095,(float)ad1*3.3/4095,(float)ad4*3.3/4095);" i9 E% o0 j" z$ y$ e* a
  65.   }
    5 r/ \% H% x% ~7 P6 k' h7 j
  66.   /* USER CODE END 3 */4 J1 G+ e+ {( f8 b; E1 k; m

  67. - x) Y$ n* ]3 t
复制代码
8 s. S& W4 v, Y) Z  M0 u; l7 E0 O
收藏 评论0 发布时间:2021-11-11 22:00

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版