打印

TIM定时触发ADC,多通道采样,DMA传输

[复制链接]
619|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小蘭|  楼主 | 2018-7-6 09:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我使用的是STM32L431,在做TIM定时触发ADC多通道采样,DMA传输采样数据,完成后产生中断。1、首先我配置了TIM6,配置如图1所示,TIM的输入时钟是80MHz, 由配置的分频系数和计数值,可得时钟产生事件的频率是6400Hz,(即128*50,50是电网频率,128是每周波128个采样点)。
2、配置了ADC的七个通道,触发方式等,配置如图二所示。
3、配置了DMA,如图三所示。
4、中断的配置,只使能了DMA中断和TIM的中断。
5、我在main.c中调用函数      HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_buff, 128*7);       (存在变量定义uint16_t adc_buff[128*7] = {0};)
6、我在TIM的中断程序中加入了 串口输出反转,如图4。 用示波器检测GPIO口电平反转的频率是大于是 3200Hz,由于是反转,所以乘2,即6400Hz,说明我的TIM定时 正确。
7、在DMA的中断 程序中,重新定义了 DMA的传输完成回调函数,该函数在DMA完成时会被调用。我也加入了电平反转控制GPIO口。使用示波器测量频率并乘2,频率为2380Hz,该频率不是我的预算值。
8、我的计算:使用DMA的传输完成回调函数 控制电平反转,频率应该时50Hz. 因为TIM每次更新事件触发ADC一次采样七个通道,频率是6400Hz。因为我HAL_ADC_Start_DMA()参数是128*7个数据,因此6400/128=50.即 DMA的中断频率应该是50HZ.
请教各位我的问题应该在哪里。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

451

主题

463

帖子

1

粉丝