请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
STMCU小助手 发布时间:2021-11-11 22:00
STM32G031-使用STM32CubeIDE实现DMA处理ADC9 B7 R$ c9 F4 `% ^1 z" I
一、USART配置
& l* F3 U. ?! f* l3 H4 |# J. }2 Q
20210218163058312.png

6 X' H$ X6 ^. ?0 d5 d
! g3 Q3 G% g% P6 R( J0 @二、ADC配置
. i) Y& X( a& O5 f' A: n
! U6 `9 Y( N' D5 O0 O' T) `
2021021816321259.png
4 U: S( e4 }* J9 ]' F. T
" E7 X; ]/ n) Q  v0 t+ b
20210218163316679.png
  ^' v& z( O  t! _/ @

" e, o8 H$ ]8 B; C7 u: I
20210218163337657.png

7 Z+ f% G0 L. a9 h) H3 m$ o: B  _2 S& q% L6 `/ L4 w6 \9 {- a2 c
配置完成后,生成代码即可。。。
; A% A7 U$ z+ V* Z7 \$ ]) |( t$ A
$ O0 l  ^* h" T$ O$ o三、用户代码
" n7 G# e  g; {# I+ ]
  1. /* USER CODE BEGIN Includes */; O8 a7 W6 l& ?+ h( C8 \

  2. : s; {; k1 q4 o0 |; _
  3. #include "stdio.h"
    ; k/ z4 T7 t6 g" Z% x7 h# |
  4. /* USER CODE END Includes */4 d8 M, R" B# \4 S" S
  5. 1 G" x  x& P5 y* }
  6. /* USER CODE BEGIN PD */- Q; U* z# c4 E5 L; L4 p9 Q
  7. #ifdef __GNUC__
    + x: G$ v; ?. t8 r: A# e4 c" @; q
  8. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)2 `3 a: B1 k. u) n, N! u5 E  B
  9. #else
    ; b; V  V# a/ `# \
  10. #define PUTCHAR_PROTOTYPE int fputc(int ch,FILE F)
    3 b( Q: ^/ q3 a! H, t' N! W8 a
  11. #endif! F3 @; m3 o, ^$ ~) m' U' ]& p
  12. - r7 J4 j& _( h, R6 t% y. P
  13. PUTCHAR_PROTOTYPE
    ( N4 X* w7 C8 o1 N; K) J2 {. i
  14. {/ F; g3 I9 e* r
  15.         LL_USART_TransmitData8(USART2, (uint8_t)ch);* U, U/ a+ e3 b3 `: C2 {
  16.         while(!LL_USART_IsActiveFlag_TXE(USART2)){}" A) w6 E8 v8 b4 L+ E- x$ j
  17.         return ch;
    # N/ x1 e( z( `. B( M! l: z0 B
  18. }3 [- l( ]. j) r7 i  u$ [2 |+ ?
  19. /* USER CODE END PD */
    $ F" h$ a$ N2 W6 ^: _8 e2 {! L. K% H3 ]

  20. 5 k! D' F; q( m7 o# H8 e: R
  21. /* USER CODE BEGIN PV */9 q% ?8 k, f- t
  22. uint16_t ADC_ConvertedValue[150];  Q' D0 m/ i- {/ _: v
  23. uint8_t i;* ~) C9 _/ ]; y1 E4 R& {7 |
  24. uint32_t ad0,ad1,ad4;
    ; g9 S% l# H( r) L* z5 W9 X/ j
  25. /* USER CODE END PV */
    ; N5 |! F- [4 O* C2 o8 ^
  26. ! W5 b9 f: J; k2 J1 J
  27. /* USER CODE BEGIN 0 */
    6 g6 f5 c) ?6 L  \
  28. void ADC_DMA_Config_Start(void)# @/ U) B4 R4 a0 R+ e7 m
  29. {3 O: D; g" L0 r+ T/ a" j# U: Q9 K
  30.         LL_mDelay(2); //延时2ms,避免DMA读取数据通道不对
    0 u4 b  E  u! ^0 C/ w- q& W
  31.         // LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_HIGH);8 {) S# v) h% C: D& g* b
  32.         LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, 150);
    2 @% i% P% J  c0 a
  33.         LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_1,(uint32_t)ADC_ConvertedValue);9 K3 z$ ~7 y$ m/ f% x7 G
  34.         LL_DMA_SetPeriphAddress(DMA1, LL_DMA_CHANNEL_1,LL_ADC_DMA_GetRegAddr(ADC1,LL_ADC_DMA_REG_REGULAR_DATA));
    : w0 H$ c9 e0 [1 F7 H
  35.         LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);  u5 C% H- e) E, B4 @

  36. 8 s* t, @2 Z, y- G/ \( j, L
  37.         LL_ADC_StartCalibration(ADC1);
    4 A9 }( }. Y/ y2 v6 W
  38.         while(LL_ADC_IsCalibrationOnGoing(ADC1));
    3 }1 N! z& ]: {) v# ~8 I
  39.         LL_ADC_Enable(ADC1);. w$ }2 y: X& l7 r0 s( B: k
  40.         LL_ADC_REG_StartConversion(ADC1);7 m$ e, x5 A& U! X
  41. 9 s% L! u) w' a' t5 H1 G8 W. E
  42.         LL_ADC_REG_SetDMATransfer(ADC1, LL_ADC_REG_DMA_TRANSFER_UNLIMITED);
    # Z# q3 C! t- w. ?4 d8 L7 R* N
  43. }2 N; u/ O$ H7 z4 O/ x' m* W+ P' H

  44. + h0 e8 K  F3 X- g
  45. ! W1 N/ ?' I* q2 a9 {
  46. /* USER CODE END 0 */
    , `- h$ j2 b) J8 ^  l
  47. 6 D- N) g+ Y% d
  48. /* USER CODE BEGIN 2 */
    8 m! g- @1 [! X$ A! }5 O. X; o$ U% e
  49.   printf("STM32CubeMX Test...\r\n");
    ( |! F% o. S4 a$ p
  50.   ADC_DMA_Config_Start();& b; Y" Z! a; m2 e# b
  51.   /* USER CODE END 2 */: J- g+ j! n' x1 H3 H
  52. /* USER CODE BEGIN 3 */1 F% f( x3 m( t% P8 P
  53.     for(i = 0,ad0 = 0,ad1 = 0,ad4 = 0; i < 150;){
    % d$ R  T+ C- c2 f
  54.                 ad0 += ADC_ConvertedValue[i++];1 z5 |9 ~0 M" z  _+ B( l$ D/ v
  55.                 ad1 += ADC_ConvertedValue[i++];* Y. m8 t$ a) @7 o5 C! P& c9 ~, p
  56.                 ad4 += ADC_ConvertedValue[i++];
    0 f' f  T8 X: C% @/ }3 P
  57.         }# j2 h; G2 T" y3 x) l
  58.         ad0 /= 50;        // 实现均匀滤波. u4 ~4 [+ W0 d& Q4 D1 U
  59.         ad1 /= 50;        // 实现均匀滤波
    5 N0 x/ f# s) w  q# B7 T8 P* f8 S- I: Q
  60.         ad4 /= 50;        // 实现均匀滤波
    2 H) F9 O& S& C2 [1 A  V
  61. //        printf("ADC->CH1 Value:%lf\r\n",(float)ad0*3.3/4095);
    4 t+ |8 Z, ]+ R) _- v# W6 `
  62. //        printf("ADC->CH2 Value:%lf\r\n",(float)ad1*3.3/4095);
    - Q/ `$ N8 z. y' y' V1 b$ @4 S7 c
  63. //        printf("ADC->CH4 Value:%lf\r\n",(float)ad4*3.3/4095);
      Q5 ~* w$ I6 F* D4 N( a
  64.         printf("ADC Value:%lf,%lf,%lf\r\n",(float)ad0*3.3/4095,(float)ad1*3.3/4095,(float)ad4*3.3/4095);
    / B5 {  o+ p& {, e  D
  65.   }1 ^( j; n* y( m. X3 Y* c" j& D# F
  66.   /* USER CODE END 3 */( O' y' v6 l8 Y5 ~
  67. % A# D  n% G7 ?  U6 F, {* B
复制代码

% h( b7 G2 M8 c
收藏 评论0 发布时间:2021-11-11 22:00

举报

0个回答

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版