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

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

[复制链接]
STMCU小助手 发布时间:2021-11-11 22:00
STM32G031-使用STM32CubeIDE实现DMA处理ADC. z0 U! N& o/ N  X6 C
一、USART配置
5 f; J2 z# E' r0 w6 ]. h
: k  W0 F( t: O% `8 c6 t3 K. a
20210218163058312.png

* P% i: z+ E; X& W3 k+ p3 x3 G1 u" Z/ x' i7 B9 f8 I. m
二、ADC配置
. E, X: g  i+ k0 T: l7 l  b" {8 G0 i3 N' Z5 ~0 d, T
2021021816321259.png
3 ]% V/ e1 A5 ^. g

. l/ ^; D$ X5 H" F0 Q( b
20210218163316679.png
6 [( v4 G$ D. d
! O5 \* v& r, R4 ^" D0 L4 e
20210218163337657.png

/ o/ _( h; o" L+ y' ]" e; v; B: H
6 U1 a- F( c9 ~) {! a5 \配置完成后,生成代码即可。。。
4 W( b$ x/ u4 R1 l! V
$ X  h6 k/ L1 R0 d" N, C; A三、用户代码, F% F) C2 @- ^7 O# K! I& W
  1. /* USER CODE BEGIN Includes */
    2 o3 A3 }  `# v8 a' b) i
  2. 6 s" d2 P: z; w
  3. #include "stdio.h"4 D2 B, L# M: U
  4. /* USER CODE END Includes */
    + |# z4 @. z; ~
  5. ; u) S( R0 t& K; B. D5 e9 L
  6. /* USER CODE BEGIN PD */
    2 Y( `$ A- q* ]8 E% K3 m" d7 C
  7. #ifdef __GNUC__
    7 D. f* I: q' W* s3 t8 r3 v
  8. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)4 F: v% F3 o. N0 x
  9. #else
    ) C; _/ l  ~1 W- d, t* i- C
  10. #define PUTCHAR_PROTOTYPE int fputc(int ch,FILE F)$ o: B0 o3 W$ ]  |- ?2 w
  11. #endif/ a: x4 B: l1 w5 k& O  h8 D

  12.   h# m2 A( {6 M! b2 F5 `
  13. PUTCHAR_PROTOTYPE8 j1 C0 J1 f( d5 H, Z! F
  14. {4 m& I) j6 F8 q6 r3 E
  15.         LL_USART_TransmitData8(USART2, (uint8_t)ch);2 m$ i" i' O$ t, P, g; o' q
  16.         while(!LL_USART_IsActiveFlag_TXE(USART2)){}! z2 g# y# Y+ d/ X* R8 |6 u) ~
  17.         return ch;
    * E& n3 |* r: O
  18. }4 l/ J5 x, x$ b8 L
  19. /* USER CODE END PD */! x5 Q3 y7 ^6 }

  20. $ V" ^" H! p: N* j: ^  h
  21. /* USER CODE BEGIN PV */; @7 ]# O! {8 p: ?* U; @
  22. uint16_t ADC_ConvertedValue[150];
    ; |$ j6 r  h0 q4 m
  23. uint8_t i;4 }  D4 D' g! e/ _' H
  24. uint32_t ad0,ad1,ad4;! a. _5 O- y& e3 m
  25. /* USER CODE END PV */
    ( l$ f) R% N, F+ p( U1 E0 R; G
  26. , ]# ^7 o! F3 a, m; Q5 c( n
  27. /* USER CODE BEGIN 0 */
    ( ]/ u$ d0 z! G; E: E/ o( d7 E
  28. void ADC_DMA_Config_Start(void)7 u5 E( I7 b; o* }, c; ]5 ^
  29. {! I$ v/ @+ Y& n3 f! n: B& n6 r% e7 P9 x
  30.         LL_mDelay(2); //延时2ms,避免DMA读取数据通道不对
    3 M# r, ^0 O6 \5 Y# x
  31.         // LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_HIGH);
    - ^% Y* F# t* E7 E! W4 Y- V4 i% w9 @
  32.         LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, 150);% Z8 I% ]. B0 Y5 ]  F
  33.         LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_1,(uint32_t)ADC_ConvertedValue);
    3 m: ]% t) J  B) M
  34.         LL_DMA_SetPeriphAddress(DMA1, LL_DMA_CHANNEL_1,LL_ADC_DMA_GetRegAddr(ADC1,LL_ADC_DMA_REG_REGULAR_DATA));
    ( U9 q% h# G" s  O$ A0 h& Z& V/ P/ [
  35.         LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);
    6 R" d2 Q- H% S- |6 W2 f" O/ v

  36. ! A1 C$ V' u+ I0 `) \
  37.         LL_ADC_StartCalibration(ADC1);
    ! Q/ a% M4 y" }) W7 h8 A
  38.         while(LL_ADC_IsCalibrationOnGoing(ADC1));% R: O- C/ j( l. M; I2 o7 M
  39.         LL_ADC_Enable(ADC1);
    9 T7 Y5 ^' V! H$ ~7 v9 o
  40.         LL_ADC_REG_StartConversion(ADC1);9 }9 J: D$ t. v! e2 @3 j

  41. 8 E5 t( C6 @1 h$ A  o9 k/ g
  42.         LL_ADC_REG_SetDMATransfer(ADC1, LL_ADC_REG_DMA_TRANSFER_UNLIMITED);
      }5 [; Z  _' {- ]3 }* U
  43. }, N0 C9 J+ R/ h
  44.   |9 M+ T3 T/ O  ^7 d  K

  45. ; d/ }9 J4 v- {, [3 G3 @8 _
  46. /* USER CODE END 0 */
    $ o8 h2 s( q3 K0 o+ b' D
  47. 6 n  ?* ^( }1 P; J4 y2 n* Q
  48. /* USER CODE BEGIN 2 */
    ! I! m8 i4 k8 k0 D' N! i
  49.   printf("STM32CubeMX Test...\r\n");
    9 @+ H& E: T' P9 v+ E
  50.   ADC_DMA_Config_Start();8 e& Y0 u" q! ]4 |1 g: _
  51.   /* USER CODE END 2 */
    5 N1 ?6 Y2 Y5 z" s0 D
  52. /* USER CODE BEGIN 3 */( Q" m  p. l' e2 _
  53.     for(i = 0,ad0 = 0,ad1 = 0,ad4 = 0; i < 150;){! _+ G5 R: G( S; b- \% J2 T
  54.                 ad0 += ADC_ConvertedValue[i++];
    / E4 _. B; f# X3 |* C5 x/ L
  55.                 ad1 += ADC_ConvertedValue[i++];! S( u  m( ?) ]; V
  56.                 ad4 += ADC_ConvertedValue[i++];; n9 _/ C6 U5 n
  57.         }- ^) K  J) A! ?  B  j
  58.         ad0 /= 50;        // 实现均匀滤波
    ! o) K+ B2 F! q) `1 P8 x
  59.         ad1 /= 50;        // 实现均匀滤波
    + r) i3 m; \. X8 a
  60.         ad4 /= 50;        // 实现均匀滤波
    ) x8 m$ \$ g2 c9 q- y# o: o$ _
  61. //        printf("ADC->CH1 Value:%lf\r\n",(float)ad0*3.3/4095);
    , R0 Y9 |$ E, _$ Z! B" T
  62. //        printf("ADC->CH2 Value:%lf\r\n",(float)ad1*3.3/4095);! A: z7 O- D9 N: D4 I. D& T- K6 D
  63. //        printf("ADC->CH4 Value:%lf\r\n",(float)ad4*3.3/4095);
    # W4 o9 N; g8 ^  `
  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 G8 H" o" ?8 v
  65.   }
    ! |$ a+ w& t3 e( }  v: l) `* |
  66.   /* USER CODE END 3 */) l% Q$ g& x( p4 E* l
  67. : P0 H! L' c# i1 J, M
复制代码
4 _7 O* q" n2 O$ w- X
收藏 评论0 发布时间:2021-11-11 22:00

举报

0个回答

所属标签

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