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

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

[复制链接]
STMCU小助手 发布时间:2021-11-11 22:00
STM32G031-使用STM32CubeIDE实现DMA处理ADC3 k" y4 |5 e% r3 X! F7 r6 R. a
一、USART配置
! |7 s, }9 z0 V7 ]& e2 a/ V$ |& x; ]8 _# ~! C- ]" V4 _
20210218163058312.png

6 \+ X2 [3 Q% V. R) s
, S9 r& w+ x2 a; _5 V/ E  d8 n5 C6 I二、ADC配置
, B5 i- N9 v& O2 D; P6 c5 \2 W# ]
6 N& `) o( u! p0 D
2021021816321259.png
' a3 `* I3 r* J7 n% ~0 S' y
& D! D' x* K  c- R
20210218163316679.png

) y3 |4 j8 [) [; C. l8 g7 |: v' @/ \( }; t
20210218163337657.png

4 s* n9 F7 }: d2 Z
3 z% i6 q' \; T3 g% C配置完成后,生成代码即可。。。& e2 x( H) b3 e8 s, x. c, E+ L5 C

# I( j, l0 V  @/ c/ `% \& \三、用户代码* o4 S6 R- f% f8 t+ E9 R
  1. /* USER CODE BEGIN Includes */9 h5 F: Z7 S: j5 ^# {
  2. ! V4 C! |6 `! \
  3. #include "stdio.h"
    ' F3 I9 [  R5 r) \. z
  4. /* USER CODE END Includes */
      l; o$ @/ B* G9 m

  5. & T* G+ H: U9 p8 d& Q; {; \  ~- d
  6. /* USER CODE BEGIN PD */
    8 l5 f! I! `5 y- A  O
  7. #ifdef __GNUC__* ]9 R( W6 D" B6 a' i0 n# m
  8. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
    $ n; H: m7 u1 Q8 E- x
  9. #else. ^) d+ ~8 ~. s- ~
  10. #define PUTCHAR_PROTOTYPE int fputc(int ch,FILE F)
    ( b- Y$ b+ n; z8 Z* {. ^
  11. #endif- y# ^7 }- O5 U8 n& ?3 M  k! g
  12. * |( J- W7 O3 _1 l9 s
  13. PUTCHAR_PROTOTYPE" P/ W1 {, S  c( l1 s
  14. {& J) c7 V. V6 q! i
  15.         LL_USART_TransmitData8(USART2, (uint8_t)ch);
    " b4 B8 H. d/ B( S! s
  16.         while(!LL_USART_IsActiveFlag_TXE(USART2)){}% w7 Z& W  s: M) S
  17.         return ch;
    % z% u! c: {* W# Z' v
  18. }* t1 O# z: Q) o6 s$ k
  19. /* USER CODE END PD */
    * u. ^$ G4 x  K+ J  [
  20. 2 T% u, U/ h, R4 t
  21. /* USER CODE BEGIN PV */. o; v! O" `! r. Y! h- o/ t
  22. uint16_t ADC_ConvertedValue[150];" Z6 C( M) Z3 e6 O9 l
  23. uint8_t i;
    7 I" E+ {6 a' ^# A6 R
  24. uint32_t ad0,ad1,ad4;: P& z1 G) K2 P# Q" J
  25. /* USER CODE END PV */
    ; e; [; K, m( D3 l; I

  26. 8 @( ~0 P4 ~  ^# Z
  27. /* USER CODE BEGIN 0 */
    5 D$ g; \/ r/ q  a8 r
  28. void ADC_DMA_Config_Start(void): C/ M: `9 J% |8 q2 f* S
  29. {0 }3 ^  M7 C' F( A' J
  30.         LL_mDelay(2); //延时2ms,避免DMA读取数据通道不对
    / p% g2 G6 h+ C. h+ }
  31.         // LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_HIGH);8 y, L- I7 |, W+ X
  32.         LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, 150);
    . b. y; s2 u. U" w! q9 ~3 C, |: U
  33.         LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_1,(uint32_t)ADC_ConvertedValue);
    ( x  O8 j* Z" ?- a& ~
  34.         LL_DMA_SetPeriphAddress(DMA1, LL_DMA_CHANNEL_1,LL_ADC_DMA_GetRegAddr(ADC1,LL_ADC_DMA_REG_REGULAR_DATA));: c( x+ q/ i7 |* o
  35.         LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);8 i( Y6 E: }! d. d
  36. + i$ x$ w# D" I: ^" O
  37.         LL_ADC_StartCalibration(ADC1);7 a3 C! e/ p, ]3 b, m2 E- @( b
  38.         while(LL_ADC_IsCalibrationOnGoing(ADC1));& Y  @% y, z0 C7 _4 q6 Z
  39.         LL_ADC_Enable(ADC1);
    + H, y& [/ d9 u; D" p1 q7 x) |# N
  40.         LL_ADC_REG_StartConversion(ADC1);* A7 z% |4 Q" D) |
  41. # X$ j- l/ C; x5 D( L9 B: o
  42.         LL_ADC_REG_SetDMATransfer(ADC1, LL_ADC_REG_DMA_TRANSFER_UNLIMITED);# Y/ @0 [' N8 D- V0 d
  43. }  U9 R3 _, u* w7 X( |- h: K& ?5 P
  44. 5 l8 R8 m. f$ F
  45. ! u. Q; r" t8 @+ v2 M5 r* X) _
  46. /* USER CODE END 0 */* {, z" P; X4 q* F' Q
  47. 0 \% i8 ^+ i! i- I. t& B) Z
  48. /* USER CODE BEGIN 2 */5 n* n5 y: ^# ~6 W. R
  49.   printf("STM32CubeMX Test...\r\n");# n( ?! z4 g7 k4 _
  50.   ADC_DMA_Config_Start();
    , q! R, B9 r6 f4 o3 {- O
  51.   /* USER CODE END 2 */* U" z! o: e( @( m& l8 [
  52. /* USER CODE BEGIN 3 */" Q: {5 j4 m5 E$ _$ T0 o
  53.     for(i = 0,ad0 = 0,ad1 = 0,ad4 = 0; i < 150;){) A6 h& v5 Q$ P6 n9 w% E
  54.                 ad0 += ADC_ConvertedValue[i++];
    9 u3 L/ K0 {* F; S8 A; k
  55.                 ad1 += ADC_ConvertedValue[i++];! u; X: m2 j- X) E- V1 F' k' Y, l
  56.                 ad4 += ADC_ConvertedValue[i++];& Q# ^# `# Q5 L; Q+ Y. a
  57.         }1 K& x% t0 t8 V$ x# K! E3 f* w# A5 ^
  58.         ad0 /= 50;        // 实现均匀滤波
    , e: y, c9 N2 r8 P! w7 F  ]
  59.         ad1 /= 50;        // 实现均匀滤波2 G9 g, ~+ C7 u( Z, c
  60.         ad4 /= 50;        // 实现均匀滤波$ ]- b1 V3 b( W
  61. //        printf("ADC->CH1 Value:%lf\r\n",(float)ad0*3.3/4095);
    + y- F! D* b# c# m- y5 }
  62. //        printf("ADC->CH2 Value:%lf\r\n",(float)ad1*3.3/4095);
    & C# _* P* Q& j
  63. //        printf("ADC->CH4 Value:%lf\r\n",(float)ad4*3.3/4095);
      s3 X; J8 |" |3 s( z
  64.         printf("ADC Value:%lf,%lf,%lf\r\n",(float)ad0*3.3/4095,(float)ad1*3.3/4095,(float)ad4*3.3/4095);
    5 }4 }7 N" G8 D! W8 G
  65.   }
    ' S. D; P9 r6 q2 z0 B. X
  66.   /* USER CODE END 3 */
    3 j2 H8 ~# L  k/ K$ P/ L0 f5 Q
  67. + ?& R2 F2 z, F1 L- O1 e
复制代码
+ i1 W! l! P) k5 d
收藏 评论0 发布时间:2021-11-11 22:00

举报

0个回答

所属标签

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