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

【STM32H735G-DK测评】ADC3+TIMER1+DMA 采样模拟信号

[复制链接]
EPTmachine 发布时间:2026-9-12 07:14

使用STM32H735DK的12bit精度的ADC3进行模拟信号采样,配置ADC3在12bit精度下,由TIM1的Trigger Output Event进行触发采样,由DMA将采样结果搬运到内存。在之前的lwip示例程序的基础上添加ADC3采样。

1、配置ADC3

H7xx系类的数据手册DataSheet中,12bit-ADC的最大参考时钟频率,以及不同进度下的最大采样率。

12bit_ADC_characteristics.png

参考手册中,可以找到计算不同SMP配置下的转换时间计算,用来确定该配置下可以达到的最高采样速率。

ADC_SMPS.png

时钟配置中,设置PLL2P的分频和倍频系数,设置ADC外设的时钟源。

ADC3_fADC_ker_clk.png

设置ADC3的配置参数,设置DMA连续采样请求,DMA搬运数据采用缓存区循环模式,避免因为超出缓存区造成内存数据改写导致程序崩溃。触发源选择Timer1 Trigger Output Event。

ADC3_Config_Paras.png

2、配置TIM1

ADC3的采样由Timer1 Trigger Output Event驱动,Timer1的触发频率也就是ADC3的采样速率SMP。设置Timer1以10kHz进行触发,实现ADC3以10kHz的采样率采集模拟信号。

通过查找手册可以确定TIM1挂在在APB2总线上,以及如何计算TIM1在采用内部时钟时的时钟频率。

TIM1_clock.png

设置TIM1采用内部时钟,Channel1设置为输出比较模式,并设置相应的参数,实现10kHz的输出触发频率。

TIM1_paras.png

3、MPU配置

CortexM7页面中使能,配置内部RAMD1的MPU设置,避免DMA访问地址空间时出错。

RAMD1_MPU_Settings.png

4、代码添加

定义用于接收DMA数据的缓存区

#define ADC_CONVERTED_DATA_BUFFER_SIZE   ((uint32_t)  5120)   /* Size of array aADCxConvertedData[] */
ALIGN_32BYTES(static uint16_t   aADCxConvertedData[ADC_CONVERTED_DATA_BUFFER_SIZE]);

main函数中,在完成外设初始化后,启动ADC DMA采样以及TIM1。

HAL_ADCEx_Calibration_Start(&hadc3, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED);
  if (HAL_ADC_Start_DMA(&hadc3,(uint32_t *)aADCxConvertedData,ADC_CONVERTED_DATA_BUFFER_SIZE) != HAL_OK)
  {
    Error_Handler();
  }

  HAL_TIM_Base_Start(&htim1);

烧录程序到开发板,在现场表达式中对aADCxConvertedData进行监控。在输入信号为1kHZ的方波信号式,可以看到在10kHZ采样率下,每个波形由10个采样点构成。

ADC_Sample_Result.pngalt text

收藏 评论0 发布时间:2026-9-12 07:14

举报

0个回答

所属标签

相似技术帖

官网相关资源

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