【STM32】定时器1触发ADC多(规则)通道采样+DMA(CUBEMX配置)

在用单片机做电源控制时不得不提ADC采集,离散系统是有固定的执行周期的,所以我们采样也是要固定时间去采样。然后就是我希望pwm波(定时器1产出)的频率与采样频率一致。
我下面演示的是G431CBU6,当然其他芯片也大差不差了。
说一下大致流程,TIM1触发ADC采样,然后DMA把数据搬出来,在ADC中断里处理DMA搬出来的数据。

ADC配置

在这里插入图片描述
首先口都是这个signal的。
在这里插入图片描述
在这里插入图片描述
这里记得用循环。不然你第一次数据才出来DMA搬完你还要再次使能DMA,太麻烦了。
在这里插入图片描述
Scan Conversion Mode:就是多通道模式。这里你要先完成下面的选择转换口数量才能enable。
一定不要使能连续转换。我们的目的就是定时器触发,确定采样周期,你用连续的话就是定时器触发一次然后他就搁那一直转了。
DMA肯定是要连续请求的。
在这里插入图片描述
这个转换通道数目设定了你上面的scan(扫描模式)就是enable了。
触发的话我这里选了捕获,上升沿触发。也就是tim1的通道1它输出PWM波,它就会在pwm波的每个上升沿触发ADC转换。
在这里插入图片描述
就像上面这样,我们是上升沿触发,也就是前面的地方触发,每个周期触发一次。
然后就是下面的通道选择了,它是默认都是channl1的,我经常忘了选,导致我其他通道采不出来,检查半天才发现,其他通道没配。
在这里插入图片描述
这里说一下其他的触发。像上面的定时器1的三个捕获就是分别对应tim1的三个通道。
tim3 trigger out event是下面的选择。
在这里插入图片描述
update就是定时器计数满后溢出产生触发信号。

定时器配置

在这里插入图片描述
这里选输出也行,不过记得是PWM,如果用输出比较也行,但不好配置(为了方便直接PWM).
在这里插入图片描述
其他就是常规配置。那个触发选择就是上面说的,你看需要选择。
在这里插入图片描述
如果要用那个触发,这里就要选这两个触发源了。

启动!!!

初始化

unsigned short AD_Value[3];				//存储ad原始数据
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)AD_Value, 3);
TIM1->CCR1=1000;										//50%
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);				//用来触发adc采样 

__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,600);调占空比用这个也行。本质都是操作寄存器。
中断函数

void  HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
	
	if(hadc->Instance==ADC1)
	{		
		
	}
}

欢迎加入扣扣交流群,群号:807477521

  • 12
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值