STM32F373 SDADC DMA Timer

定时器13触发

 开DMA

触发频率为1KHz

 

 定义数组,

#define length  1000
int16_t adc1buff[length*2];  // SDADC1 存2000个数
uint16_t Cur_Buffer[length];  // 电流  通道1
uint16_t Vol_Buffer[length];  // 电压  通道2

 while中可由按键去触发,等转换完成后则打印出来。

while(1)
{	
    if(Key_Data==2)//只采集SDADC
	{
			HAL_SDADC_InjectedStart_DMA(&hsdadc1,(uint32_t*)adc1buff,length*2);  //开启SDADC
			HAL_TIM_PWM_Start(&htim13,TIM_CHANNEL_1);
			HAL_GPIO_WritePin(GPIOB, Led2_Pin, GPIO_PIN_RESET);
	}
    if(conversion_flag==1)  //转换完成(SDADC转换完成为准),发送到电脑
	{
			conversion_flag=0;
			uint16_t i;
			for(i=0;i<length;i++)
			{
				Cur_Buffer[i]=adc1buff[i*2]+32767;
				Vol_Buffer[i]=adc1buff[i*2+1]+32767;
			}
			printf("Curr:\r\n");
			for(i=0;i<length;i++)
			{
				printf("%d\r\n",Cur_Buffer[i]);
			}
			printf("Vol:\r\n");
			for(i=0;i<length;i++)
			{
				printf("%d\r\n",Vol_Buffer[i]);
			}
	}
}

 在中断回调函数中将SDADC采集与定时器13关闭,然后给出转换完成标志

触发频率为1KHz,1ms转换一次,一次采集两个数据,6通道与8通道。采集到2000个数据则是转换了1000次,时间为1S。

void HAL_SDADC_InjectedConvCpltCallback(SDADC_HandleTypeDef* hsdadc)  //SDADC回调函数
{
	if( hsdadc->Instance == SDADC1 ) 
	{
		HAL_SDADC_InjectedStop_DMA(&hsdadc1);
		HAL_TIM_PWM_Stop(&htim13,TIM_CHANNEL_1);
		HAL_GPIO_WritePin(GPIOB, Led2_Pin, GPIO_PIN_SET);
		conversion_flag=1;
	}
	if( hsdadc->Instance == SDADC2 ) 
	{
		
	}
	if( hsdadc->Instance == SDADC3 ) 
	{
		
	}
}

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值