当前位置:   article > 正文

STM32F373 SDADC DMA Timer

stm32f373

定时器13触发

 开DMA

触发频率为1KHz

 

 定义数组,

  1. #define length 1000
  2. int16_t adc1buff[length*2]; // SDADC12000个数
  3. uint16_t Cur_Buffer[length]; // 电流 通道1
  4. uint16_t Vol_Buffer[length]; // 电压 通道2

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

  1. while(1)
  2. {
  3. if(Key_Data==2)//只采集SDADC
  4. {
  5. HAL_SDADC_InjectedStart_DMA(&hsdadc1,(uint32_t*)adc1buff,length*2); //开启SDADC
  6. HAL_TIM_PWM_Start(&htim13,TIM_CHANNEL_1);
  7. HAL_GPIO_WritePin(GPIOB, Led2_Pin, GPIO_PIN_RESET);
  8. }
  9. if(conversion_flag==1) //转换完成(SDADC转换完成为准),发送到电脑
  10. {
  11. conversion_flag=0;
  12. uint16_t i;
  13. for(i=0;i<length;i++)
  14. {
  15. Cur_Buffer[i]=adc1buff[i*2]+32767;
  16. Vol_Buffer[i]=adc1buff[i*2+1]+32767;
  17. }
  18. printf("Curr:\r\n");
  19. for(i=0;i<length;i++)
  20. {
  21. printf("%d\r\n",Cur_Buffer[i]);
  22. }
  23. printf("Vol:\r\n");
  24. for(i=0;i<length;i++)
  25. {
  26. printf("%d\r\n",Vol_Buffer[i]);
  27. }
  28. }
  29. }

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

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

  1. void HAL_SDADC_InjectedConvCpltCallback(SDADC_HandleTypeDef* hsdadc) //SDADC回调函数
  2. {
  3. if( hsdadc->Instance == SDADC1 )
  4. {
  5. HAL_SDADC_InjectedStop_DMA(&hsdadc1);
  6. HAL_TIM_PWM_Stop(&htim13,TIM_CHANNEL_1);
  7. HAL_GPIO_WritePin(GPIOB, Led2_Pin, GPIO_PIN_SET);
  8. conversion_flag=1;
  9. }
  10. if( hsdadc->Instance == SDADC2 )
  11. {
  12. }
  13. if( hsdadc->Instance == SDADC3 )
  14. {
  15. }
  16. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/1021943
推荐阅读
相关标签
  

闽ICP备14008679号