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

基于STM32H7实现8通道数据采集

[复制链接]
STMCU小助手 发布时间:2023-3-13 21:32
使用CubeMX工具,对DMA进行配置。
/ K" Q3 Z, `7 y, q: i5 @& m% X6 F3 F+ y9 i: ?( n1 c1 c2 V
dma相关的配置比较简单,主要是adc配置相关的修改:
: k& q0 G1 Z( S, a数据要设置成DMA循环模式ADC_CONVERSIONDATA_DMA_CIRCULAR;
2 ~: `+ Y* _. ]7 f& V溢出操作要设置为覆盖ADC_OVR_DATA_OVERWRITTEN;
, W6 W% O: G8 O; u$ }, \
主函数逻辑代码如下:
4 ?+ C& x# s2 o& m0 i3 O+ k' o' M
  1. #include "sys.h"6 f4 t# x; t% A7 `$ A0 H. v
  2. #include "delay.h"
    3 b( n  c; z& w7 d4 p$ b
  3. #include "usart.h"
    , ^8 I" k9 s& r
  4. #include "adc.h". j  q. r( `/ I& _# U
  5. #include "dma.h": T" C( X5 f5 O8 O; C( L* `+ o: b4 P1 w
  6. * @8 {/ S7 q2 _& |% X& j
  7. u16 buffer[128];
    " `/ |6 l! C6 j4 s: g+ k
  8. int main(void)
    . @; p5 \2 A+ l% }4 k+ X6 F
  9. {
    ! f1 M5 g) P* B" S( y! w8 G
  10.     u16 adcx;
    # e' L1 o8 P) q' b- i$ n
  11.     //Cache_Enable();                 //打开L1-Cache4 M" N/ }- r1 |/ d0 o
  12.     HAL_Init();                           //初始化HAL库
    : r: w7 ~' F) y2 T- l
  13.     Stm32_Clock_Init(200, 2, 2, 2); //设置时钟,400Mhz
    6 m& s* J# M( r* B) R6 o$ a
  14.     delay_init(400);                        //延时初始化4 M7 T8 T/ p3 A* j
  15.     uart_init(115200);                  //串口初始化0 B7 ], Z2 s" N: q8 P5 Y& Y+ p8 }
  16.     printf("hello\r\n");
    7 h6 b- b" @% V' y/ x1 j) b* g
  17.     MX_DMA_Init();
      b+ |7 M, T% G, U7 f
  18.     MX_ADC1_Init();
    " Q+ J- H: c/ A  Y
  19.     HAL_ADC_Start_DMA(&hadc1, (uint32_t *)buffer, 16);
    ( l. x# Q" L( J. n
  20.     while (1)
      B& z7 g3 r/ |4 s4 j
  21.     {3 d& g" P7 c* B9 g$ S
  22.         printf("\r\nvalue:");
    ( C$ `; k0 r3 E' w
  23.         for (int i = 0; i < 32; i++)
    1 p( ^% q4 `" x3 g3 d
  24.         {/ s; D8 m; v* s' g
  25.             if (i % 8 == 0)   printf("\r\n");5 ]0 t: m% N+ D6 F+ l* q
  26.             printf("%d\t", buffer[i]);              //返回最近一次ADC1规则组的转换结果
    ( u6 c+ n# J3 |/ N/ z5 N
  27.         }0 v- Y2 J! q  a7 `/ i
  28.         delay_ms(500);
    0 P* c; }3 I/ A. e6 P2 G% n
  29.     }
    ( }. l2 D8 T7 ?" a" Y
  30. }
    # v3 |$ g( G) @# K$ s
  31. + U2 P" @2 d1 i1 L8 b$ V
  32. void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)3 z1 F9 d) i; z9 q. C
  33. {+ q! U* d& t. c
  34.     printf("DMA transfer complete\r\n");* a9 E# J. z4 D1 @- k7 N9 a( q; F
  35. }, f$ w3 {2 J5 K0 s, e  ~7 F* k: i
  36. void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef *hadc)5 ^# ~+ x% Y% v% {& u+ M5 H" C
  37. {
    1 v1 }! Y' K0 D# d3 \) ?+ D
  38.     printf("DMA Half transfer complete\r\n");
    0 V& [2 g; z6 ]/ b. ~2 ?  O
  39. }
    - B8 Q! k/ L9 m6 R
  40. ) ~2 |3 O4 V, D! l# N% u* e
  41. void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc), i* `' F) _' n5 e0 S
  42. {
    + P/ s% I' u6 U3 ~. c' r: v+ E8 `
  43.     printf("DMA transfer error\r\n");: L8 j; ~6 }& x6 G7 J0 w1 M
  44. }
      a3 b  ]1 ^6 G! n
  45. 3 R3 [8 c$ B/ v3 |  S
  46. ( \+ G" X5 g; B6 n9 u0 Y$ t) ?/ r

  47. ' @1 }% c9 O7 x6 X, l9 p8 c
  48. void Error_Handler(void)' q0 t! ~1 [4 `3 T
  49. {. k+ ]& Q! ^; K1 C; }* W
  50.     /* USER CODE BEGIN Error_Handler_Debug */- T/ K  y: ]* g
  51.     /* User can add his own implementation to report the HAL error return state */& I: p+ l4 t3 f2 t: s# o

  52. 1 g4 N3 _; u" n
  53.     /* USER CODE END Error_Handler_Debug */# ~1 f9 o2 u3 N& D
  54. }
    $ B- k' n( |& U; `" j" f

  55. - Q) J% }$ d% ]7 S0 P: _
复制代码
. G9 {6 C' P% b) a% H
单次转换完成的效果:
0 S, U2 d6 m/ e" b. \8 l6 P6 p' H( _: ?1 O% L7 t
20200426112035953.png
/ ?, W) y$ ~4 S3 ^6 S6 N2 O! u6 k- F* v7 I# O
————————————————8 u* y/ r1 Q6 o  ?9 K5 Z+ N
版权声明:小盼你最萌哒
& X& O' X7 w7 v
1 S/ W6 @9 M$ o  f

5 O4 C5 U* d1 i
收藏 评论0 发布时间:2023-3-13 21:32

举报

0个回答

所属标签

相似分享

官网相关资源

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