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

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

[复制链接]
STMCU小助手 发布时间:2021-11-11 22:00
STM32G031-使用STM32CubeIDE实现DMA处理ADC( ^) K; O/ A, O: u' D+ Q. n
一、USART配置. U. K2 C0 Y/ s9 {
# k: {4 b0 M2 L1 j* n
20210218163058312.png
" x( g7 S( a7 d% l! G

. B0 |  D4 K6 F! r. ]4 J8 _二、ADC配置1 z% e- O+ e1 a, a

: f" g; j  R6 i) w9 a, G3 K
2021021816321259.png

9 I4 C9 H. d0 p9 |; K
' q8 ~! s* b/ O8 U+ X
20210218163316679.png

* ]$ @* H% d7 p# h! r
4 ?! y# O$ e' c. B3 P0 H$ q
20210218163337657.png
2 R0 u" }& m8 f' T( j9 C

. a* X, U; O* t: ^' z+ l0 U配置完成后,生成代码即可。。。
( d) L* J3 Y. M5 m7 v/ y9 y: `6 C2 A$ L1 {* z: u
三、用户代码! D* K7 J/ o& |) `
  1. /* USER CODE BEGIN Includes */' P! q+ V6 M( a% w( M$ Y
  2. ) I( ^  H. w" Y2 H
  3. #include "stdio.h"
    1 X) f% G2 M6 ^- d. K
  4. /* USER CODE END Includes */+ K  F6 v6 g7 m+ z2 a) c! M
  5. 5 q* S# m; e5 [" K
  6. /* USER CODE BEGIN PD */
    + W; A$ q4 C" }( n
  7. #ifdef __GNUC__7 Z0 l! T4 p( k# T4 _/ k- D" E
  8. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
      F5 ^, Y& F- h
  9. #else% m, }* i: `1 @8 L7 v# r+ h2 Q* K
  10. #define PUTCHAR_PROTOTYPE int fputc(int ch,FILE F), h0 G, M* N$ D! X) l) ~7 B" S
  11. #endif
    $ d+ ]1 O" i0 U6 n

  12. 2 c% @0 l# S: {/ }5 A
  13. PUTCHAR_PROTOTYPE- b/ W* N. N9 o! N) G
  14. {' M  Y) v: O; N3 {5 F  U
  15.         LL_USART_TransmitData8(USART2, (uint8_t)ch);
    1 S+ r' K2 l8 v. _* k6 |
  16.         while(!LL_USART_IsActiveFlag_TXE(USART2)){}5 N- b9 c+ ?5 n* L. T
  17.         return ch;
    : v+ T6 J! _4 [
  18. }
    5 g! M* N4 k7 U# A5 G
  19. /* USER CODE END PD */% r8 B( H# f3 c2 A# U
  20. * s; N6 N. Y9 W
  21. /* USER CODE BEGIN PV */" @0 M( E! O/ ~; m4 Q
  22. uint16_t ADC_ConvertedValue[150];* @/ ^- U/ l' H" V$ Q! O6 m8 c6 c; a
  23. uint8_t i;
    4 m! q: ~! P6 k2 {: O) c
  24. uint32_t ad0,ad1,ad4;# o3 y% A( Y# u# p3 p% U
  25. /* USER CODE END PV */
    ' \3 X! D/ _: O4 W
  26. ) {0 P0 D# |1 [/ \7 c3 r/ c$ S
  27. /* USER CODE BEGIN 0 */
    1 O, U* D$ }1 T" _6 P9 M, V* x; @$ J
  28. void ADC_DMA_Config_Start(void)
    4 A2 W/ i$ l) z7 K' G" d
  29. {, B$ x! L& @  L' v9 a) Q
  30.         LL_mDelay(2); //延时2ms,避免DMA读取数据通道不对# Q3 Y9 Z9 f9 @' r+ j; C
  31.         // LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_HIGH);
    / z8 Q" n$ a7 ?+ g5 R$ B3 D& m
  32.         LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, 150);1 E3 y5 [! ?! I" b
  33.         LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_1,(uint32_t)ADC_ConvertedValue);# o% P* g7 \" V' C! A3 q! H
  34.         LL_DMA_SetPeriphAddress(DMA1, LL_DMA_CHANNEL_1,LL_ADC_DMA_GetRegAddr(ADC1,LL_ADC_DMA_REG_REGULAR_DATA));
    8 t! N4 C1 L) w1 _7 A2 `/ p! m
  35.         LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);; b" _. ^( g0 S' _1 t
  36. 8 t+ }2 _+ I) n0 `
  37.         LL_ADC_StartCalibration(ADC1);0 @7 {7 e  [/ J5 z) O* S% t9 ^
  38.         while(LL_ADC_IsCalibrationOnGoing(ADC1));# h- x) n( L" {: B" {% U
  39.         LL_ADC_Enable(ADC1);" L0 p# D4 x7 G) `. G; L
  40.         LL_ADC_REG_StartConversion(ADC1);/ i( D3 x4 O! T- W) y

  41. 9 S5 B" K. x' @- p
  42.         LL_ADC_REG_SetDMATransfer(ADC1, LL_ADC_REG_DMA_TRANSFER_UNLIMITED);
      D/ }. E' R5 I- I- B
  43. }) F3 `. f6 E# V2 E: {
  44. 9 v# o& j3 G& B, s& C
  45. % @6 W0 p# B1 }2 c) o, Y: l3 j  Y9 C1 C
  46. /* USER CODE END 0 */
    ; J: t2 c" o9 O" k( X( j4 p/ I
  47. # b* }8 w! H4 _* v
  48. /* USER CODE BEGIN 2 */
    3 A5 m# [- o' G& b% x, i
  49.   printf("STM32CubeMX Test...\r\n");" j9 T9 X- j$ u- B; t% k" U
  50.   ADC_DMA_Config_Start();" `" w7 v: ^+ R/ g: l
  51.   /* USER CODE END 2 */* H& C8 f2 Q* t( N9 u) X9 d2 A
  52. /* USER CODE BEGIN 3 */
    3 G/ C% X1 z: l/ p& X0 o. Z8 z& b/ }
  53.     for(i = 0,ad0 = 0,ad1 = 0,ad4 = 0; i < 150;){
    + Q3 y. n+ v+ ?% c6 t# p7 F
  54.                 ad0 += ADC_ConvertedValue[i++];! t1 J9 ~: w5 {/ q
  55.                 ad1 += ADC_ConvertedValue[i++];- y7 W4 [  F% B
  56.                 ad4 += ADC_ConvertedValue[i++];# ^$ L0 C% T% N" {$ {
  57.         }) z8 o$ ?) R! U4 }' e  m
  58.         ad0 /= 50;        // 实现均匀滤波& {4 C0 m; @0 k- O5 r0 T( \3 w
  59.         ad1 /= 50;        // 实现均匀滤波  Z! X$ ]( W3 [) p
  60.         ad4 /= 50;        // 实现均匀滤波, k/ V& g! @( S' l' C! B3 `* Y& s
  61. //        printf("ADC->CH1 Value:%lf\r\n",(float)ad0*3.3/4095);
    4 z: i3 `5 s8 t9 [- A# J: q0 e
  62. //        printf("ADC->CH2 Value:%lf\r\n",(float)ad1*3.3/4095);
    ; s( k' i7 G3 q. F
  63. //        printf("ADC->CH4 Value:%lf\r\n",(float)ad4*3.3/4095);
    8 M: k- S! b8 k9 X* S) w1 P
  64.         printf("ADC Value:%lf,%lf,%lf\r\n",(float)ad0*3.3/4095,(float)ad1*3.3/4095,(float)ad4*3.3/4095);
    # t1 v4 }. f1 ]
  65.   }3 E2 ^& M& h1 b0 x4 L$ }& V- u' p
  66.   /* USER CODE END 3 */* Y8 v6 v4 ^8 e$ i

  67. 1 Q) H5 h/ f' U$ d1 t
复制代码
/ s! E4 f. w% S7 V; r! z; G9 T5 ]0 B
收藏 评论0 发布时间:2021-11-11 22:00

举报

0个回答

所属标签

相似分享

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