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

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

[复制链接]
STMCU小助手 发布时间:2023-3-13 21:32
使用CubeMX工具,对DMA进行配置。2 }0 U- ^1 o9 j. ~% o8 I8 o
4 Z3 W/ \: ~9 H3 @
dma相关的配置比较简单,主要是adc配置相关的修改:
4 e: J2 C# D( o数据要设置成DMA循环模式ADC_CONVERSIONDATA_DMA_CIRCULAR;
4 x# y% q, i% `2 q溢出操作要设置为覆盖ADC_OVR_DATA_OVERWRITTEN;
' D" f) ?5 f2 k* o; o& ]
主函数逻辑代码如下:
$ F8 i0 x$ N8 N+ b2 c! L
  1. #include "sys.h"
    . h% G! N6 Z0 K* U
  2. #include "delay.h"
    / l; Z3 i! S' F: m+ d) ^3 d4 P* i5 S
  3. #include "usart.h"
    ) E5 F! P5 a  ^( X3 @/ |
  4. #include "adc.h"9 w% D, v$ S$ k* @" J
  5. #include "dma.h"/ v6 P7 G3 o! X, [# w0 ?
  6. ; F1 d; o+ X! L) g8 `) I5 k* a
  7. u16 buffer[128];. Q# C& _1 z# j
  8. int main(void): \, u0 I; V% x/ O
  9. {" z* I5 U' p- k' ?% b, u( ^( W
  10.     u16 adcx;
    ( d2 m4 O1 M2 M* L
  11.     //Cache_Enable();                 //打开L1-Cache7 y% X  W0 {, ~
  12.     HAL_Init();                           //初始化HAL库
    $ m4 L. T( M  a$ I. j9 a: h# }8 Y
  13.     Stm32_Clock_Init(200, 2, 2, 2); //设置时钟,400Mhz% {3 R, e, D- m
  14.     delay_init(400);                        //延时初始化
    + Q+ [$ x6 t/ ~
  15.     uart_init(115200);                  //串口初始化3 t! {7 b0 j# O/ e: I( |7 j
  16.     printf("hello\r\n");0 [+ `4 G; n, P, n* S
  17.     MX_DMA_Init();
    1 x4 ^2 F) t: M6 A  d
  18.     MX_ADC1_Init();4 \. Z* M4 U( p6 P; [
  19.     HAL_ADC_Start_DMA(&hadc1, (uint32_t *)buffer, 16);
    8 p) X4 l0 q' j+ ?2 f
  20.     while (1)& r  I" K1 g. t* G6 \& S7 o$ A4 e
  21.     {2 y, f0 p6 Q2 G* Y& m6 p
  22.         printf("\r\nvalue:");! \, c) z3 d1 e9 d- [
  23.         for (int i = 0; i < 32; i++)
    & @% t# U  d7 c! ?2 g6 y
  24.         {
    / e; O2 }2 f5 V* k2 k( B3 z
  25.             if (i % 8 == 0)   printf("\r\n");/ }4 A2 C: m+ E
  26.             printf("%d\t", buffer[i]);              //返回最近一次ADC1规则组的转换结果
    ' ?* D: X5 u% p1 R0 y- E/ O, P
  27.         }
    5 O" }3 P4 N+ w% U5 ?
  28.         delay_ms(500);
    + t9 X' L% x( R
  29.     }
    & r" W+ h* o- s3 T
  30. }( M0 }2 h9 P6 X8 G3 [2 r
  31. 3 T; s) }7 ]5 b5 r& I  `; s
  32. void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc), H/ t7 j* O' K; E' E# {
  33. {9 W& x7 w9 f6 F# O$ \4 i5 a* L
  34.     printf("DMA transfer complete\r\n");
    8 y  y' `' \! E$ w- v% k$ E5 {3 B
  35. }$ R, U( q2 u# |3 ~
  36. void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef *hadc)& O) g, Z& y& [4 N
  37. {9 C- X6 }; Q4 V- ~. H+ Z
  38.     printf("DMA Half transfer complete\r\n");
    $ Y  }, ]3 L4 O7 I" s
  39. }4 Z! }3 h$ A9 C8 Q: T3 \

  40. 7 F; l0 B. r* U( \
  41. void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc)
    ! X' J" X: X# \* `6 p" t/ R$ \0 |" K
  42. {
    2 s2 W$ c0 ?3 X+ _% V
  43.     printf("DMA transfer error\r\n");
    ) h' N. }; O( P: J4 c6 b
  44. }9 L6 O$ o- m$ m

  45. 4 I# A, m% x+ I7 S) g3 X3 U  X! a: \* K

  46. # J( @4 N* `- \! @3 L7 Z8 ?

  47. ' c; C. S' B) A  T
  48. void Error_Handler(void)3 o% O: e) O" @
  49. {+ E3 C( M  b! x& Q  `
  50.     /* USER CODE BEGIN Error_Handler_Debug */
    8 ~) D7 P4 L4 E6 k" b* c
  51.     /* User can add his own implementation to report the HAL error return state */
    * c( `( o; n+ ~8 U* _

  52. , ^6 T5 e5 G  x) y
  53.     /* USER CODE END Error_Handler_Debug */
    ! j8 c, a. X6 l8 P. a5 t
  54. }
    & i6 @- B5 y& F: x
  55. # C2 Q- |8 g! H2 l
复制代码

' Z+ g3 Q$ C. m; v单次转换完成的效果:& G2 P+ w( Q- {$ u" b: E, D

, r1 t5 C$ R8 |9 s* Z
20200426112035953.png
9 i! g  Y' M% K) z1 \) v
* O/ A$ j. U3 ^. J————————————————
+ ?7 Y, }8 U1 A9 k: P版权声明:小盼你最萌哒  _! |( `  o1 S/ ]8 c
, @( I: ~' R; u6 S, m

7 a' H: a  o' g. x1 A/ z
赞 收藏 评论0 发布时间:2023-3-13 21:32

举报

0个回答

所属标签

相似技术帖

官网相关资源

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