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

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

[复制链接]
STMCU小助手 发布时间:2021-11-11 22:00
STM32G031-使用STM32CubeIDE实现DMA处理ADC# q  u" q% h& b6 X1 [
一、USART配置# M0 P" C! d: d0 T( G

8 c5 ?. y3 i- s7 ?1 t/ V  v
20210218163058312.png
- s- Q, L  ^4 y
3 E9 Y% S( C* Z  S. y9 L0 p3 i
二、ADC配置$ s; R+ w8 B: m: n4 }1 ^
2 y6 z$ P, t" d. ~
2021021816321259.png

) L! F' f6 z4 C% L; C) I
* M6 I% O5 I( ]% w0 i% w2 C$ v
20210218163316679.png
/ N: T0 n( M. W) a6 @
8 ^" s, U" c8 j% e
20210218163337657.png
5 f  Q5 e6 G! _7 Z9 G/ I1 p- S/ T
. t# ~, g  q8 N" Q
配置完成后,生成代码即可。。。
" e$ Y. M: j7 D6 j. D" g; |% D6 _; |! }# U# t, X( _
三、用户代码% Z0 f8 `. J* c0 Y& I$ s# I
  1. /* USER CODE BEGIN Includes */
    ' I# |! @7 P# d- I/ e7 g

  2. % l% {( a/ U4 w2 t/ ~  `, I8 W# v
  3. #include "stdio.h"! F2 r+ ^5 F7 ]" k2 _6 a. m0 J5 j0 e
  4. /* USER CODE END Includes */
    & |7 h4 r( s) Z8 V2 A+ Y' C
  5. & m4 J; Q  [, J$ x, z8 Y
  6. /* USER CODE BEGIN PD */
    $ l- [% {4 C4 M  \
  7. #ifdef __GNUC__% M1 f" Z9 U8 z' R6 f" Z7 [
  8. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)' W* G! ~, @+ f. I* s
  9. #else
    + L5 |0 i, S) f
  10. #define PUTCHAR_PROTOTYPE int fputc(int ch,FILE F)& w* J+ d) n! [% r0 D: D
  11. #endif
    & k3 D% l( P6 V) N# p8 \( h; s
  12. * a0 S2 L$ r0 E5 {% Q) }( s$ _" P- b' r
  13. PUTCHAR_PROTOTYPE- q8 i  r& u8 N* i: M" D! _
  14. {
    9 @  t, }. C. k" ~2 [5 B7 [9 Q5 L& L
  15.         LL_USART_TransmitData8(USART2, (uint8_t)ch);
    * t5 h# i# w- k; Y: `
  16.         while(!LL_USART_IsActiveFlag_TXE(USART2)){}, t7 ~6 ^$ B% A
  17.         return ch;2 w  w; ?9 \; G5 x
  18. }+ G7 b7 E9 X( A# R2 {9 U( d
  19. /* USER CODE END PD */* M7 ]( K7 e" ^$ J9 Z" ]
  20. 1 S, r) L( |: M" B# h7 u
  21. /* USER CODE BEGIN PV */: F3 u! D- J+ P1 L: b, ^
  22. uint16_t ADC_ConvertedValue[150];! h  n9 ]' S! h! w: w# G
  23. uint8_t i;
    9 Z8 b$ r" O+ h: N
  24. uint32_t ad0,ad1,ad4;" a7 p' n- m+ v5 T" [' {
  25. /* USER CODE END PV */
    ' f# o& ~, D& c1 W
  26. 1 T% _. }: [# p3 ^9 @( v: {/ z) C
  27. /* USER CODE BEGIN 0 */
    . z" A/ `( l. w; F2 z- {" p
  28. void ADC_DMA_Config_Start(void)
    ( m8 ?4 r8 i" z$ a- `' C+ v
  29. {
      f+ o$ y$ }' \6 O/ P+ _& w
  30.         LL_mDelay(2); //延时2ms,避免DMA读取数据通道不对
    5 H) U, P, Z1 I7 J, C% v
  31.         // LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_HIGH);! ~5 r- V2 Q' Q, r+ f
  32.         LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, 150);
    8 W1 l" Y8 y' Z5 _2 @6 t$ |* @
  33.         LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_1,(uint32_t)ADC_ConvertedValue);
    $ N- Z' |+ @% z' a" w! z
  34.         LL_DMA_SetPeriphAddress(DMA1, LL_DMA_CHANNEL_1,LL_ADC_DMA_GetRegAddr(ADC1,LL_ADC_DMA_REG_REGULAR_DATA));
    * p) I1 E$ s: g1 X7 i
  35.         LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);* ^! z0 i4 N% X4 f

  36. 3 v% L. |* Y; s! i
  37.         LL_ADC_StartCalibration(ADC1);
    : |+ i2 k, r) Z, [/ C
  38.         while(LL_ADC_IsCalibrationOnGoing(ADC1));5 a3 F5 n. h$ |9 U& m
  39.         LL_ADC_Enable(ADC1);
      V; G% C  k" p# w+ {# d# p+ G# X5 i2 a
  40.         LL_ADC_REG_StartConversion(ADC1);
    5 I; T; k5 J, \: h

  41. / A6 H* j4 V( E( ~+ W: y& E2 v
  42.         LL_ADC_REG_SetDMATransfer(ADC1, LL_ADC_REG_DMA_TRANSFER_UNLIMITED);: j% t- [  S# i: a, q  F
  43. }. o7 g" F  s! \" p) b# ~2 _& s! j

  44. ' `/ Z& M* }1 y$ |- [1 S+ Y
  45. 0 O5 p7 n$ k" N
  46. /* USER CODE END 0 */- a! \% ]& N2 V) }) v- A1 H
  47. 9 J* r' `+ }9 u: I* s4 E. E  k
  48. /* USER CODE BEGIN 2 */: n- Y, z8 f% x8 y
  49.   printf("STM32CubeMX Test...\r\n");
    ( G6 k& o* b- W, K* O
  50.   ADC_DMA_Config_Start();
    - D) h4 @  B" B5 a$ ?" N
  51.   /* USER CODE END 2 */2 d  z% a* D2 n2 O* P1 I
  52. /* USER CODE BEGIN 3 */1 b5 |/ X2 k3 t( \7 {
  53.     for(i = 0,ad0 = 0,ad1 = 0,ad4 = 0; i < 150;){
    2 F/ D0 J6 v! G
  54.                 ad0 += ADC_ConvertedValue[i++];
    2 F: W: \+ `) A
  55.                 ad1 += ADC_ConvertedValue[i++];
      p6 h) T7 U/ g# z& I+ ^
  56.                 ad4 += ADC_ConvertedValue[i++];
    2 C7 |1 u: `2 H
  57.         }8 e6 Y. f: n$ A' Z( s
  58.         ad0 /= 50;        // 实现均匀滤波
    " m. V% J( j) R- G5 p, L2 s4 y
  59.         ad1 /= 50;        // 实现均匀滤波: \: a  n5 j* }1 e0 @& r
  60.         ad4 /= 50;        // 实现均匀滤波
    3 q$ T, B- G  |' K" D
  61. //        printf("ADC->CH1 Value:%lf\r\n",(float)ad0*3.3/4095);
    $ _1 C: J, @- T  T. }( F
  62. //        printf("ADC->CH2 Value:%lf\r\n",(float)ad1*3.3/4095);+ b8 `- G% ~0 f) v! _1 F0 r
  63. //        printf("ADC->CH4 Value:%lf\r\n",(float)ad4*3.3/4095);
      }& Z$ ]9 f3 D$ A- n: e
  64.         printf("ADC Value:%lf,%lf,%lf\r\n",(float)ad0*3.3/4095,(float)ad1*3.3/4095,(float)ad4*3.3/4095);
    - z/ G4 t# Z6 H8 F! n/ Q! k7 ], L
  65.   }) i' F# _9 k. h( b/ T' Z7 x
  66.   /* USER CODE END 3 */5 g5 q6 a: F0 \4 e

  67. 3 n3 @1 n% @: f2 l: V! g; ?/ F
复制代码

( Q$ I' H) U) j0 `" Y! c; }
收藏 评论0 发布时间:2021-11-11 22:00

举报

0个回答

所属标签

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