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

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

[复制链接]
STMCU小助手 发布时间:2021-11-11 22:00
STM32G031-使用STM32CubeIDE实现DMA处理ADC
) p  J: O( e4 s6 n) H, P; R# N一、USART配置5 w& K- Z6 y6 K8 \0 G" g

" {: k- M+ j9 ?' l8 e! V
20210218163058312.png
2 Q! P0 s$ A5 E

! \3 N! p5 a  j2 `# O二、ADC配置; v# O" |; G/ J! \. W" q
. e5 t+ R+ W# }/ p
2021021816321259.png

. r7 u0 W4 d" O& y/ }/ F/ _% q1 R; Z4 E/ P) ^& f
20210218163316679.png
3 x! r: Q7 O2 H+ k/ q. u5 B2 h' G8 o
- U5 x2 K* @! [$ i6 o7 h& H/ o5 u
20210218163337657.png

/ \9 Q: y% T9 f2 T3 ~! c, d$ q0 @. V) I& V* {  t& {9 a
配置完成后,生成代码即可。。。
, r  c) T) k2 b6 Q' T
2 `6 ~6 `& K6 J$ X* t, ?三、用户代码3 z9 k/ {$ i5 K! j+ e4 H
  1. /* USER CODE BEGIN Includes */
    ' s) t; ^) w- o% k3 ^8 w" z. l
  2. + a' R% Y# `( l) G8 h3 H) t* N
  3. #include "stdio.h"! }& \. S# _( [: ?
  4. /* USER CODE END Includes */+ i$ T2 Q( \0 M3 {* ?
  5. 9 t0 O/ g! k+ g& W6 G! f# Q
  6. /* USER CODE BEGIN PD */: |6 m5 R, d& K+ C* t& h; O( m
  7. #ifdef __GNUC__
    # Y- N1 @) `' E+ |. x. g4 t( V
  8. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch); g/ ?7 U2 n9 i  M3 E4 L, H6 z8 _, d
  9. #else
    2 C7 W, Z6 a: _- [& b" P% U' o  \! N8 q
  10. #define PUTCHAR_PROTOTYPE int fputc(int ch,FILE F)
    3 d) r/ p, a! S2 T5 C
  11. #endif  r' Q" e# p3 i! Z* f

  12. 4 L$ Z2 @+ l7 B5 j
  13. PUTCHAR_PROTOTYPE
      ~. \  X1 [1 q* O: u
  14. {
    " S! `- \% }7 @
  15.         LL_USART_TransmitData8(USART2, (uint8_t)ch);. T2 g5 L9 @& O% S3 L* `
  16.         while(!LL_USART_IsActiveFlag_TXE(USART2)){}
      d+ Y$ h( [/ n  y0 f/ f
  17.         return ch;
    , v8 i3 \. w# m8 j! p
  18. }
    6 |! y1 z, v: H9 k  f! V, S
  19. /* USER CODE END PD */
    3 d) [% ^$ u# L9 O

  20. 7 w$ j' F/ i0 f- h; P( Q1 J, q" Z
  21. /* USER CODE BEGIN PV */7 O- W: m2 A* s2 P! |" o. p% d% E
  22. uint16_t ADC_ConvertedValue[150];
    % y: R' P$ {# q/ N
  23. uint8_t i;2 @3 `; h6 T, y2 @& D2 i' o2 W
  24. uint32_t ad0,ad1,ad4;# `" A7 r" S- O9 c+ ]
  25. /* USER CODE END PV */+ P5 U% x' J- b$ P: i+ a" V
  26. 8 ]& Z4 J1 h8 d' N" I% @; n
  27. /* USER CODE BEGIN 0 */7 P, j% ?, z! t" i- i- L- o$ D$ X
  28. void ADC_DMA_Config_Start(void)0 t- S6 Z) U8 d( E6 C; c
  29. {
    ) ^8 A  ^: ^3 L$ A
  30.         LL_mDelay(2); //延时2ms,避免DMA读取数据通道不对3 D5 w  V% R, d, Z5 u) L
  31.         // LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_HIGH);
    - ~( p* d% g0 V7 J9 e7 W4 w" D
  32.         LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, 150);  _7 R- n/ {( O8 B$ F
  33.         LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_1,(uint32_t)ADC_ConvertedValue);* c* _( X. m9 X) o* z
  34.         LL_DMA_SetPeriphAddress(DMA1, LL_DMA_CHANNEL_1,LL_ADC_DMA_GetRegAddr(ADC1,LL_ADC_DMA_REG_REGULAR_DATA));& `* q7 i# ^  X0 L# f5 [" W% G
  35.         LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);" t) A$ D8 W% `' U1 x% U

  36. 5 |1 h- `6 D: v( ?5 O
  37.         LL_ADC_StartCalibration(ADC1);) e4 N3 Z9 E8 q5 g4 R$ u
  38.         while(LL_ADC_IsCalibrationOnGoing(ADC1));, a" J& t! d; d) h$ z! Y7 a7 K
  39.         LL_ADC_Enable(ADC1);
    % y5 W( O8 U/ H7 S$ p. z) \; A) H
  40.         LL_ADC_REG_StartConversion(ADC1);
    0 v3 c$ a* |/ V) L, ~
  41.   P9 t- F2 l" t' B% i  U* b
  42.         LL_ADC_REG_SetDMATransfer(ADC1, LL_ADC_REG_DMA_TRANSFER_UNLIMITED);
    " F/ ?$ S" ~8 W( `3 w; `; r
  43. }' _3 b3 ^5 i* n5 ^
  44. ; N: d' Y* q5 {; E( b- @

  45. / X- U. J# D& _0 ~- z  e! n
  46. /* USER CODE END 0 */- _0 X, v* w/ v- A* P

  47. ) h5 g! B" S# Z" q
  48. /* USER CODE BEGIN 2 */
    # ]: _2 f  h! K% T
  49.   printf("STM32CubeMX Test...\r\n");
    0 S6 w% B- V5 j: }' N
  50.   ADC_DMA_Config_Start();6 Q& ?( J) W; |. r
  51.   /* USER CODE END 2 */
    , }9 i; @1 ]9 `; Z
  52. /* USER CODE BEGIN 3 */
    $ `+ F5 K0 K; C% X/ S! v
  53.     for(i = 0,ad0 = 0,ad1 = 0,ad4 = 0; i < 150;){
    2 v7 Z( f+ o( m' \) }( i+ [
  54.                 ad0 += ADC_ConvertedValue[i++];
    9 S: j5 v* }3 X
  55.                 ad1 += ADC_ConvertedValue[i++];; s+ A7 U7 m$ w; @$ ?( t# e: v
  56.                 ad4 += ADC_ConvertedValue[i++];( f+ t4 s5 E$ F, A, Z5 j
  57.         }& Y, a  u# r% A3 g
  58.         ad0 /= 50;        // 实现均匀滤波2 P5 E! r1 j7 v+ O
  59.         ad1 /= 50;        // 实现均匀滤波
    9 E2 s+ z5 [) ]9 D& `# e0 j9 Y1 w+ O# x
  60.         ad4 /= 50;        // 实现均匀滤波
    , i- n/ Q+ ^- S5 a0 B2 m
  61. //        printf("ADC->CH1 Value:%lf\r\n",(float)ad0*3.3/4095);
    8 N; O, V$ c% g6 n, v; a$ T; H7 s, ?& ]
  62. //        printf("ADC->CH2 Value:%lf\r\n",(float)ad1*3.3/4095);
    6 |# Z+ h) I4 b' H7 y7 b2 ]
  63. //        printf("ADC->CH4 Value:%lf\r\n",(float)ad4*3.3/4095);% e' c' G7 P+ E" M' u2 o
  64.         printf("ADC Value:%lf,%lf,%lf\r\n",(float)ad0*3.3/4095,(float)ad1*3.3/4095,(float)ad4*3.3/4095);4 s; S4 Y& O, O' K+ ^8 D  B
  65.   }; h* |/ E% L5 Q
  66.   /* USER CODE END 3 */' D' s; \+ o7 x; w) e

  67. 5 N) p# F: \+ H
复制代码

' Y+ |" c; E( e1 \/ y4 h
收藏 评论0 发布时间:2021-11-11 22:00

举报

0个回答

所属标签

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