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

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

[复制链接]
STMCU小助手 发布时间:2021-11-11 22:00
STM32G031-使用STM32CubeIDE实现DMA处理ADC
3 C- |2 k9 D( B1 s$ e一、USART配置5 M2 I1 N# H1 Q2 |$ Y

" `. z  v; N  l0 A. G
20210218163058312.png
- q0 f' t! L* n  n

7 l: J4 C4 S" K" b+ \( B二、ADC配置
* Z$ K  w& Z. A) f: D1 D; O3 l% \- z& ?
2021021816321259.png
  f+ [3 |& ?" ?4 Y7 \* E+ p
+ {+ Z: ?2 x0 J
20210218163316679.png

. d5 K+ B( u* Y/ W# C7 c# z% @: X6 \% o6 x5 {
20210218163337657.png

6 c# {% C+ Z8 o* _+ K7 o
1 U# l# K1 Q  a( B! @配置完成后,生成代码即可。。。
/ v' y0 }7 E0 u# I) c: d7 v* ?$ ]! V3 Q# T
三、用户代码
4 N5 {5 n8 l* R4 [, g. t$ v% g+ \
  1. /* USER CODE BEGIN Includes */
    % B3 l9 R* P6 u( Q& G

  2. 5 F8 ~" E" `! R4 \3 `4 ?1 U
  3. #include "stdio.h"
    7 D# m  f- N7 E( u
  4. /* USER CODE END Includes */! V6 t6 u7 T1 U5 @- |0 K6 v

  5. 3 X+ y$ J' u/ F0 y( H, R( p3 U- Q
  6. /* USER CODE BEGIN PD */! C$ m* y1 h8 j( y
  7. #ifdef __GNUC__8 j$ j9 g0 G5 {. }( J" P
  8. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch). Q" z& ]: S: t9 ^5 G3 D# o
  9. #else' c0 X4 H( M  a' p  V3 q. i% V
  10. #define PUTCHAR_PROTOTYPE int fputc(int ch,FILE F)
    * D' s8 F& @3 R3 u4 O* K
  11. #endif8 B; O/ V0 z" i

  12. 2 u& \# ~( ~3 Z5 _) k5 w3 v
  13. PUTCHAR_PROTOTYPE, f+ b- N; A6 s4 r' c; F
  14. {
    / o6 W6 W8 f+ Q' V
  15.         LL_USART_TransmitData8(USART2, (uint8_t)ch);5 D# y$ Q" i/ A
  16.         while(!LL_USART_IsActiveFlag_TXE(USART2)){}! l: v9 f, \7 V* J! W! C1 z
  17.         return ch;
    ) {! [( a& X* r/ S4 E4 m  k2 J
  18. }, G8 _  j% b' ^; H
  19. /* USER CODE END PD */
    5 V! ?: v% |1 i( P: I# o* S" f7 {& R

  20. / ~1 {+ L, f, C4 x
  21. /* USER CODE BEGIN PV */2 G( o1 {' o" Q: J
  22. uint16_t ADC_ConvertedValue[150];
      [; P2 T+ k& y+ {! b  T
  23. uint8_t i;( B8 q+ L8 o, ~3 H3 M- M" a2 o
  24. uint32_t ad0,ad1,ad4;0 m# {& T' ^0 N3 i8 q
  25. /* USER CODE END PV */
    7 k& W, c( h' q' c3 j: u

  26. 1 F+ X$ s; {# t! U$ L2 Y' r
  27. /* USER CODE BEGIN 0 */
    ! j; [. ]2 H4 a
  28. void ADC_DMA_Config_Start(void)0 T6 U* g/ c# a  O, \
  29. {
    : c& z7 E8 E0 T  G0 z/ K% U5 S9 ?
  30.         LL_mDelay(2); //延时2ms,避免DMA读取数据通道不对4 S* w6 S! Q- ]4 l  q& v6 l$ t
  31.         // LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_HIGH);
    ( l4 L; X. V) U
  32.         LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, 150);$ j4 ~1 y+ O3 n+ w& P
  33.         LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_1,(uint32_t)ADC_ConvertedValue);% r* g4 X  J* |2 g$ f( g4 T8 _
  34.         LL_DMA_SetPeriphAddress(DMA1, LL_DMA_CHANNEL_1,LL_ADC_DMA_GetRegAddr(ADC1,LL_ADC_DMA_REG_REGULAR_DATA));
    ' k" T  P, |/ n# S: d: w4 Q
  35.         LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);/ ?; ]& C$ G9 |9 f! L2 I
  36. 0 s% O5 l* K0 P- E
  37.         LL_ADC_StartCalibration(ADC1);
    ; I/ I9 t2 {4 h3 T, @2 u
  38.         while(LL_ADC_IsCalibrationOnGoing(ADC1));
    8 ^6 x' S5 O8 f: [% L
  39.         LL_ADC_Enable(ADC1);
    6 F: w/ k' v3 B2 h
  40.         LL_ADC_REG_StartConversion(ADC1);
    ( W9 n- t4 _& b2 ^* R4 c+ m: ^
  41. 2 E! w2 W3 h- }$ p; g. }4 t0 t  s
  42.         LL_ADC_REG_SetDMATransfer(ADC1, LL_ADC_REG_DMA_TRANSFER_UNLIMITED);+ o+ C) D7 k8 n5 {
  43. }
    $ Z' n5 V# l* |9 j
  44. & d* S6 S+ E$ Z/ t6 s& y
  45. 7 a% a2 q7 ^! B  K3 M, }9 E+ A! Y
  46. /* USER CODE END 0 */2 ?& c! ]- m9 z1 Z7 _, I0 @+ b: e+ J+ c4 Y

  47. 4 I  [% p# m; |/ M9 f
  48. /* USER CODE BEGIN 2 */3 y+ M1 i. C% H" ?* q3 {" \# _& d
  49.   printf("STM32CubeMX Test...\r\n");
    " R8 N4 j% X0 z# }7 [9 C
  50.   ADC_DMA_Config_Start();
    8 G# }! d  x2 s. x& O. ~0 w
  51.   /* USER CODE END 2 */4 q+ b4 ?9 r: S0 c' q( r
  52. /* USER CODE BEGIN 3 */9 m5 O9 W: m' D8 }8 M2 b
  53.     for(i = 0,ad0 = 0,ad1 = 0,ad4 = 0; i < 150;){
    ! ?: B" c" Q; U+ D5 y; F+ ^6 E
  54.                 ad0 += ADC_ConvertedValue[i++];
    , J4 w4 }( A- s- c' A2 Z
  55.                 ad1 += ADC_ConvertedValue[i++];( w* l2 R) e* o  C: ~% Q
  56.                 ad4 += ADC_ConvertedValue[i++];
    5 ]& |9 i, }( Q+ f# t
  57.         }; |! \8 M* ~* i8 E2 W- e; e; L1 E
  58.         ad0 /= 50;        // 实现均匀滤波
    : A7 o; h6 H# n3 x' D
  59.         ad1 /= 50;        // 实现均匀滤波
    8 R' \; L- P( X
  60.         ad4 /= 50;        // 实现均匀滤波9 v, S1 B* m8 R# g
  61. //        printf("ADC->CH1 Value:%lf\r\n",(float)ad0*3.3/4095);
    3 P# v: Y: }7 Y7 \6 E, X( i+ r  ^
  62. //        printf("ADC->CH2 Value:%lf\r\n",(float)ad1*3.3/4095);' Q  \: @0 T  V
  63. //        printf("ADC->CH4 Value:%lf\r\n",(float)ad4*3.3/4095);  x1 h0 L- d: m7 u- g" l
  64.         printf("ADC Value:%lf,%lf,%lf\r\n",(float)ad0*3.3/4095,(float)ad1*3.3/4095,(float)ad4*3.3/4095);( V- o: H8 v. r0 a% O2 u
  65.   }
    9 {2 V0 y3 ?& w9 X
  66.   /* USER CODE END 3 */# j) @# Q9 E% R6 }4 ~* v$ S+ m2 M

  67. 6 s) \' b4 F' V' c  e! K+ b1 d
复制代码
# P" i" j/ C/ r& G+ q
赞 收藏 评论0 发布时间:2021-11-11 22:00

举报

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