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

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

[复制链接]
STMCU小助手 发布时间:2021-11-11 22:00
STM32G031-使用STM32CubeIDE实现DMA处理ADC
0 i) A" j6 v( B& H- ]) o一、USART配置
& ^! U! ^9 |* W( j) v0 q; [" F* X2 Q# v" o
20210218163058312.png
  V5 t- e) y+ Q  M

6 G2 j& c8 _$ K: _$ C6 K% y$ F二、ADC配置3 K! C3 d- U& F! `: ~9 [

6 |; h1 e3 W8 |
2021021816321259.png

1 V- x: a9 m' l1 k
. S( `, p; z5 X6 @4 k- X
20210218163316679.png
: q; [1 p6 }+ j: ]2 T. v
- j& Z6 J" V  m% n' p
20210218163337657.png
4 {( t8 L; W. R

; I: Z6 J! L  a+ J* t# Z& S配置完成后,生成代码即可。。。
2 M" V/ H1 K5 p4 E+ a% Y
: n" k: N2 X4 @8 X; o# G1 k三、用户代码5 k& V! l- j5 J
  1. /* USER CODE BEGIN Includes */& ^, F" q( C8 `: t# v
  2. 6 q4 n* H) T, M, |' O1 z
  3. #include "stdio.h"
    : ^& l+ z0 r: {- s
  4. /* USER CODE END Includes */
    6 u4 p1 e8 s9 C4 h! c) W

  5. 6 S' w( ^+ m: B( a
  6. /* USER CODE BEGIN PD */
    : g# M! g  v1 y" L/ q$ n
  7. #ifdef __GNUC__
    ( j8 \$ \. I! t" m  }6 T1 B& N) s9 ~
  8. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)% b; g# V; L$ {3 u  E% R) e$ Y" x
  9. #else: V" t, c, ^6 Q4 j% v; n2 b
  10. #define PUTCHAR_PROTOTYPE int fputc(int ch,FILE F)# t7 _; V) ?- T% C5 I6 Z
  11. #endif+ G$ |1 k% V! B0 F
  12. ' E* H5 u; M: J% m8 G
  13. PUTCHAR_PROTOTYPE/ Z* i+ `6 x4 A, ?; X  I5 ^
  14. {
    9 W0 {5 {# H5 {$ f# K' _
  15.         LL_USART_TransmitData8(USART2, (uint8_t)ch);3 g2 L0 X" T. y
  16.         while(!LL_USART_IsActiveFlag_TXE(USART2)){}
    8 Q/ L- Z. B5 ]+ @
  17.         return ch;& r* |" r) I- y1 W" s. p9 w# w
  18. }
    - Y2 a& k. n5 T/ `0 K
  19. /* USER CODE END PD *// b0 K7 c1 T( u" x% P

  20. . l3 c8 J/ Y/ N
  21. /* USER CODE BEGIN PV */
    & P, H5 E9 h9 ?/ S: ^
  22. uint16_t ADC_ConvertedValue[150];) s  Y7 k% g  v3 i  D; {$ ^% `
  23. uint8_t i;
    0 l! H6 E: ~" s2 z9 X+ W: t
  24. uint32_t ad0,ad1,ad4;7 Z( }7 i& n6 W8 c4 X
  25. /* USER CODE END PV */: f9 {$ g# w- F9 d

  26.   q) ~9 X" a" |: e3 j- X$ k
  27. /* USER CODE BEGIN 0 */
    ; e& w/ h$ z8 s; I
  28. void ADC_DMA_Config_Start(void)5 B' s& E* I2 O
  29. {# x, S+ G: y, K, q+ a
  30.         LL_mDelay(2); //延时2ms,避免DMA读取数据通道不对6 J' T6 T( y: \" A9 p% R
  31.         // LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_HIGH);
    3 K6 D6 h. [% @! A3 W" {3 D; T
  32.         LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, 150);( X) i' J. |6 x: P
  33.         LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_1,(uint32_t)ADC_ConvertedValue);, K. R! ]( M: t# M5 V) Y
  34.         LL_DMA_SetPeriphAddress(DMA1, LL_DMA_CHANNEL_1,LL_ADC_DMA_GetRegAddr(ADC1,LL_ADC_DMA_REG_REGULAR_DATA));7 q) J7 {3 Q* i& m2 L9 |
  35.         LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);
    1 i% z4 W3 Y; p7 E) a
  36. / {5 q# J* ^3 b7 m. `; J
  37.         LL_ADC_StartCalibration(ADC1);/ e/ i# a( H. a- j
  38.         while(LL_ADC_IsCalibrationOnGoing(ADC1));
    1 P" Z( J  F' @! R! t
  39.         LL_ADC_Enable(ADC1);" b; Q0 k9 {6 v3 l2 w5 W" c3 ~9 H7 d
  40.         LL_ADC_REG_StartConversion(ADC1);
    ; e; H& K0 P* j4 @
  41. " C, ?5 T$ ]' b9 |: @2 Z+ d1 I. U
  42.         LL_ADC_REG_SetDMATransfer(ADC1, LL_ADC_REG_DMA_TRANSFER_UNLIMITED);
    % O3 }8 U6 }+ K7 f2 A, I4 G$ P
  43. }* X/ `7 a% }* E6 |& R6 n9 ]3 }
  44. / t8 a9 `; q: J& u4 x! U$ R% ~3 _
  45. 5 h; B$ C6 x) b, o: N7 u
  46. /* USER CODE END 0 */
    " {* P- Y% m* y
  47. , K1 z% ^/ C( q" [. t$ A, h
  48. /* USER CODE BEGIN 2 */
    % G  v2 {4 A% B* E( p
  49.   printf("STM32CubeMX Test...\r\n");
    & j, C* W# S9 b
  50.   ADC_DMA_Config_Start();
    8 N( a7 T1 ?% E
  51.   /* USER CODE END 2 */
    2 k& `, C9 l1 c2 q1 x
  52. /* USER CODE BEGIN 3 */& E2 }8 z; H; A: E4 O+ I# P2 P
  53.     for(i = 0,ad0 = 0,ad1 = 0,ad4 = 0; i < 150;){4 G4 x1 b# C: P
  54.                 ad0 += ADC_ConvertedValue[i++];
    : K5 K' {/ _" K1 W
  55.                 ad1 += ADC_ConvertedValue[i++];6 O% z3 t8 I3 ], ~
  56.                 ad4 += ADC_ConvertedValue[i++];4 G$ W/ Z+ }4 w
  57.         }
    ' H" f1 v8 |' V0 E$ g& |
  58.         ad0 /= 50;        // 实现均匀滤波
    ' ~( @: x3 k3 t0 y
  59.         ad1 /= 50;        // 实现均匀滤波
    & d* Y2 d; J1 K7 a& [
  60.         ad4 /= 50;        // 实现均匀滤波
    $ v$ ^4 F  z' X
  61. //        printf("ADC->CH1 Value:%lf\r\n",(float)ad0*3.3/4095);; c) b% S3 G9 {
  62. //        printf("ADC->CH2 Value:%lf\r\n",(float)ad1*3.3/4095);8 M5 Q( L% W" B+ k0 Z; x. U
  63. //        printf("ADC->CH4 Value:%lf\r\n",(float)ad4*3.3/4095);
    1 [# z0 w" j3 f5 k
  64.         printf("ADC Value:%lf,%lf,%lf\r\n",(float)ad0*3.3/4095,(float)ad1*3.3/4095,(float)ad4*3.3/4095);
    1 ^- K- G6 w! A# [* _: D1 c) C
  65.   }" S" p- n6 Z: _. W& m
  66.   /* USER CODE END 3 */
    9 y+ F, D2 I  m' l

  67. ( `1 \( C' [* K# x! ~
复制代码

7 F* S2 x* X- v7 F+ f5 \8 i
收藏 评论0 发布时间:2021-11-11 22:00

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版