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

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

[复制链接]
STMCU小助手 发布时间:2023-3-13 21:32
使用CubeMX工具,对DMA进行配置。6 m. Y7 A- g: o, n* C
+ v8 h8 W7 N/ y, O
dma相关的配置比较简单,主要是adc配置相关的修改:: b- n5 Y7 C; H" a1 U
数据要设置成DMA循环模式ADC_CONVERSIONDATA_DMA_CIRCULAR;! @) O/ L2 F, S* r  l! O9 i/ Q
溢出操作要设置为覆盖ADC_OVR_DATA_OVERWRITTEN;

1 G5 T! v! _% i% M, q, D9 ]主函数逻辑代码如下:
3 {( O1 N2 L- w- j/ s$ ~$ f
  1. #include "sys.h"
    ! l) E* X7 ^/ t7 l
  2. #include "delay.h"7 H$ y0 [) d8 Z0 j) e* U% _! M
  3. #include "usart.h"
    ; d& F4 K) p  f8 Y6 R: p
  4. #include "adc.h"- {) j% ^3 M( f0 E3 y# b
  5. #include "dma.h"
    8 d2 J$ S7 ?( \1 M) Y
  6. : N! z  P1 u7 |- ^; \
  7. u16 buffer[128];
    1 Z% s4 Z- r: e. |1 a, |% t, c
  8. int main(void): r& @$ D, C3 D8 d& D0 J) K
  9. {" [4 K! Y. j7 Y
  10.     u16 adcx;7 s) y, v& g' d  d% o
  11.     //Cache_Enable();                 //打开L1-Cache
    ' t. g6 M5 l/ [# q3 P! d0 M
  12.     HAL_Init();                           //初始化HAL库
    6 Q8 a3 S0 X6 {* r* e
  13.     Stm32_Clock_Init(200, 2, 2, 2); //设置时钟,400Mhz1 E/ E0 t. l# w5 ]; D- M9 v
  14.     delay_init(400);                        //延时初始化
    2 x2 o4 V/ {2 ~. S5 V( m
  15.     uart_init(115200);                  //串口初始化4 g" h! D6 V8 U: |* x
  16.     printf("hello\r\n");) ]  U/ R) N  f/ E/ J/ g
  17.     MX_DMA_Init();# H" M: B, b9 e( m7 J2 U
  18.     MX_ADC1_Init();
    0 j/ F0 I9 M4 P- U
  19.     HAL_ADC_Start_DMA(&hadc1, (uint32_t *)buffer, 16);4 ?( D3 v2 s2 R
  20.     while (1)$ [% {; f7 @& H
  21.     {, N3 k4 L5 X: }4 B' U" H; R
  22.         printf("\r\nvalue:");
    , O, [3 M0 Q4 `+ e8 ?- W9 F3 `
  23.         for (int i = 0; i < 32; i++)
      _) w* v9 _1 x$ s* w, Z
  24.         {1 ^. e- a- K5 @; [3 T5 w$ W/ S
  25.             if (i % 8 == 0)   printf("\r\n");" `7 {, l3 s. T. F- K* q
  26.             printf("%d\t", buffer[i]);              //返回最近一次ADC1规则组的转换结果
    " o0 e! J" a& j# E& ?) Z6 j" R
  27.         }
    0 }8 M" J$ B, f, }+ H+ c; f
  28.         delay_ms(500);
    6 R$ }4 |8 W! ~0 w, E
  29.     }
    . K' k7 w/ R& ^# m7 F
  30. }
    ; t( s8 }" a% D4 y

  31. 6 c2 Z* O7 B+ z5 T) q' X. Z
  32. void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
    ; P) J: P1 v6 k% S
  33. {' s- S6 m) M* ^8 r
  34.     printf("DMA transfer complete\r\n");
    1 T2 j7 u$ G9 W
  35. }
    7 x7 V$ S) |6 i9 b  Z  l
  36. void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef *hadc)0 ]# C9 G' g# \- s/ `( L% [' {
  37. {
    6 B# k6 Y: k' D5 Z
  38.     printf("DMA Half transfer complete\r\n");
    / Z6 w  `; }6 f( q# I
  39. }1 h, A5 l3 M+ b: z+ `' d, Y
  40. ( ^( Y; U* q. ]3 v' f1 V
  41. void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc)
    % s; P* d; `, x: V2 m6 J% n2 E
  42. {
    7 s% h9 H+ O4 M' \9 I! G
  43.     printf("DMA transfer error\r\n");& y+ R8 ^$ ?# t/ `3 K# @9 W9 I  D
  44. }% A3 q9 G( x& ^- W' ]) J
  45. $ Z8 P  e  o! ?3 h5 [& Y
  46. 9 K6 }" A( G2 S  F- G& ]0 c

  47. 9 t0 d5 Z, y9 A2 E7 K
  48. void Error_Handler(void)0 Y( A. _' y. K% v( Y; v9 a
  49. {
      n, c0 o8 Q2 N* R( H+ w8 {2 L7 g
  50.     /* USER CODE BEGIN Error_Handler_Debug */- R: \1 \: R1 B4 @( R$ u; J
  51.     /* User can add his own implementation to report the HAL error return state */
      E: q! G4 @3 y6 s2 `+ J

  52. 1 P# v! L5 c* s- t" \- C0 |
  53.     /* USER CODE END Error_Handler_Debug */
    8 M2 s" {5 ]4 y, D- ?
  54. }
    ! g" k, P1 {3 g, w  U6 x
  55. 4 ~  A) i3 d: l, U
复制代码

/ _6 E9 F5 i, @. Z3 C- B* x" x5 t* q( L单次转换完成的效果:3 e7 r% z9 B! s: U  V, i- k

( Z, e6 ~7 p% r+ w; G
20200426112035953.png & S& Y3 w9 T$ _" y6 {

2 w$ T+ K+ d2 C- R: E+ {————————————————4 p/ {) ^3 ~; I
版权声明:小盼你最萌哒- L% N- |. l7 n2 W3 s" X: w
- q4 m% T- ]6 X4 {

. f& o* _/ H% x1 N# X$ ^
收藏 评论0 发布时间:2023-3-13 21:32

举报

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