赞
踩
定时器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 )
- {
-
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。