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

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

[复制链接]
STMCU小助手 发布时间:2021-11-11 22:00
STM32G031-使用STM32CubeIDE实现DMA处理ADC
8 K2 S# M3 e8 l; e/ d一、USART配置
( I6 U( y# s" [1 T7 }. x& w
0 t8 x7 U2 E, [) p' _% F# ^& T
20210218163058312.png

  {5 ]+ s# V8 l9 K% K" o
3 h$ x7 e9 G6 P5 _二、ADC配置' Z% ]; c! N& S) x1 C
! g5 U- d& P7 `$ k9 X
2021021816321259.png
5 X/ S6 Q* [0 p6 Q! V
( ?5 S) l) a1 d+ m  Y4 o  t; S
20210218163316679.png
' N( u, c2 q5 c
! b$ j- \& S5 @- _0 H$ ~8 X
20210218163337657.png

+ Q. y; U1 N0 |2 j
1 f8 |: N; D8 D) j+ C配置完成后,生成代码即可。。。) p! H9 k5 x1 c" z7 ?

  N3 k( v3 b4 s三、用户代码$ c8 h* F0 Y! T% N8 B+ ?
  1. /* USER CODE BEGIN Includes */
    & I# u) h$ C4 x* r8 i

  2. : J: z$ G" M% o* B+ H  Z" u" T2 ?
  3. #include "stdio.h"* o& B& h) j3 L/ V1 U
  4. /* USER CODE END Includes */
    ! d7 f/ r9 ~" i) C- b0 a! b

  5. 2 \2 _, G/ B7 A' a# e) ?8 ]; S
  6. /* USER CODE BEGIN PD */
    ( }9 ?. n1 L( K3 [9 M0 r# a
  7. #ifdef __GNUC__
    8 }/ s& T5 D- A) {& q
  8. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
    : u1 g' ]0 V5 ?' ^4 A1 ]% D
  9. #else
    ( \! a% ?( q, L! D2 b+ |1 S5 x! g
  10. #define PUTCHAR_PROTOTYPE int fputc(int ch,FILE F)
    & w+ A$ v6 ~* U! @  ^3 ?
  11. #endif
    , T! a# A% ?- u/ Y" b
  12. . k, p1 ]6 t/ c) U2 c2 Q
  13. PUTCHAR_PROTOTYPE; s( ~6 R8 ^' F8 B7 F  [
  14. {
    2 q# T/ N9 g0 }2 a2 z8 B
  15.         LL_USART_TransmitData8(USART2, (uint8_t)ch);
    , p' y" Y* |+ m- r$ f* D
  16.         while(!LL_USART_IsActiveFlag_TXE(USART2)){}  e: H' C; V% A4 _- Y
  17.         return ch;
    - ~9 D% q2 v  c6 ^% C/ k0 |
  18. }( E4 F5 l3 {1 s- ]9 K: s
  19. /* USER CODE END PD */- x" n& p7 E- Z( L

  20. ' g# h8 T. S6 Q3 v
  21. /* USER CODE BEGIN PV */8 [" I( o! ]6 U! H' U" s
  22. uint16_t ADC_ConvertedValue[150];
    7 g: V. P- I7 ~7 z- D
  23. uint8_t i;. @% s/ F! }; r' T$ i
  24. uint32_t ad0,ad1,ad4;/ I+ ^8 O( X& q* X4 P
  25. /* USER CODE END PV */
    3 @1 v9 T0 P7 }" R( H& K2 D$ I4 v8 @
  26. & S6 H  S: o& I+ _0 @7 A/ j
  27. /* USER CODE BEGIN 0 */) X  E( ^( D: _, p, i' @
  28. void ADC_DMA_Config_Start(void)
    . Y" b% i8 k6 s! o2 y9 z& N
  29. {
    9 b8 u/ i7 q  S4 M0 r
  30.         LL_mDelay(2); //延时2ms,避免DMA读取数据通道不对
    7 A# l/ x( c& i+ t1 D% o8 q
  31.         // LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_HIGH);/ Q+ G0 ^" C* n  s+ M
  32.         LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, 150);6 W, S8 `, ~2 }5 X  n: s
  33.         LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_1,(uint32_t)ADC_ConvertedValue);, ]% V" H5 v  T7 o, o  s
  34.         LL_DMA_SetPeriphAddress(DMA1, LL_DMA_CHANNEL_1,LL_ADC_DMA_GetRegAddr(ADC1,LL_ADC_DMA_REG_REGULAR_DATA));
    : l, \. w! R3 j6 K' d+ p# Y" J
  35.         LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);1 R& K, |5 a) m
  36. 1 |" a6 u- u& v8 U! T9 O; K# {
  37.         LL_ADC_StartCalibration(ADC1);
    # O! ~" |* J5 v1 \
  38.         while(LL_ADC_IsCalibrationOnGoing(ADC1));
    - J; l' Y8 C: e8 ^+ y3 S4 U
  39.         LL_ADC_Enable(ADC1);
    ! r" G, t0 W. U
  40.         LL_ADC_REG_StartConversion(ADC1);; h  R3 O/ k. }/ \
  41. 4 [7 c. Y# G" K5 X
  42.         LL_ADC_REG_SetDMATransfer(ADC1, LL_ADC_REG_DMA_TRANSFER_UNLIMITED);/ T- J! ~) U5 Y5 j: ?1 j3 {
  43. }
    % m$ {7 [5 g. |

  44. 5 ~* U( _3 I$ e8 C( f; u8 }: {& F* W

  45. ; U1 x# I# x% w/ C+ ^
  46. /* USER CODE END 0 */
    6 M/ H9 c5 y, v7 s
  47. - v6 X. n" p6 j
  48. /* USER CODE BEGIN 2 */# P8 R' o9 d8 \4 a: z6 _; P; u
  49.   printf("STM32CubeMX Test...\r\n");5 r4 m4 Z: o& d& ^. V" @& i. H1 L+ j
  50.   ADC_DMA_Config_Start();
    2 p5 M. ^: H% k
  51.   /* USER CODE END 2 */  ^# ~& q& C% R: U. p1 B
  52. /* USER CODE BEGIN 3 */
    ) [1 c& q9 Z- H/ f4 y5 C8 F
  53.     for(i = 0,ad0 = 0,ad1 = 0,ad4 = 0; i < 150;){# S& T- k* u4 Q+ L) I% f9 b8 `
  54.                 ad0 += ADC_ConvertedValue[i++];
    ; `  K9 s* c5 T- E2 U
  55.                 ad1 += ADC_ConvertedValue[i++];
    , c" ~- P2 D, p: G* n+ V' t
  56.                 ad4 += ADC_ConvertedValue[i++];* X4 _/ z6 Q) ~' U) r
  57.         }
    $ t* ~) f. G+ Y! b2 W1 `
  58.         ad0 /= 50;        // 实现均匀滤波
    8 P& G9 u- d' A: u0 y+ q- g
  59.         ad1 /= 50;        // 实现均匀滤波
    ! x+ L- N/ Q) d, n4 l" h: [
  60.         ad4 /= 50;        // 实现均匀滤波8 @- ]% ?% x5 i! b4 d
  61. //        printf("ADC->CH1 Value:%lf\r\n",(float)ad0*3.3/4095);& _3 I8 T# F3 W- j$ E; I* [
  62. //        printf("ADC->CH2 Value:%lf\r\n",(float)ad1*3.3/4095);
    - j3 x) W7 [+ @- d# K: a, |5 z( W) L$ D
  63. //        printf("ADC->CH4 Value:%lf\r\n",(float)ad4*3.3/4095);% ]/ w3 ^# B( P' F
  64.         printf("ADC Value:%lf,%lf,%lf\r\n",(float)ad0*3.3/4095,(float)ad1*3.3/4095,(float)ad4*3.3/4095);; m% D- H/ F* H, n" O
  65.   }/ H: l4 T( Z1 W. a( {* B% |( W
  66.   /* USER CODE END 3 */
    ! [7 [% A7 @7 m, \( Y
  67. # ^% T$ C' I) V. `3 @5 w+ @- l
复制代码
/ H8 g; S$ }4 v, T) ^" T
赞 收藏 评论0 发布时间:2021-11-11 22:00

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版