定时器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 )
{
}
}