当前位置:   article > 正文

STM32F407 通过定时器实现外部时钟控制AD采集频率_怎么利用定时器设置采样频率

怎么利用定时器设置采样频率

一、基础知识

stm32f107定时器3使用时钟源使用外部时钟源模式2进行定时_一吱乖怂鼠的博客-CSDN博客_stm32定时器外部时钟模式

 

二、基本思想

使用定时器的外部时钟ETR的方式实现,从ETR输入方波作为外部时钟,输出PWM波触发ADC采集。

定时时间计算与内部时钟时一样计算,只是总时钟频率变化了,在检测验证时要注意计算输出的频率,避免乱设置导致频率太小,示波器检测不到看不到现象。

三、定时器部分配置

(1)注意事项 

1、

注意:STM32F4是需要引脚GPIO复用才能使用的,而stm32f1不需要复用,这里易错。

2、

3、 

 注意因为要用FFT需要在工程中添加:(中间是逗号隔开)STM32F40_41xxx,USE_STDPERIPH_DRIVER,ARM_MATH_CM4,__CC_ARM,ARM_MATH_MATRIX_CHECK,ARM_MATH_ROUNDING

 (2)关于GPIO的输入输出配置

深刻理解GPIO(上拉输入、下拉输入、模拟输入、浮空输入,开漏输出,推挽输出的区别,以STM32为例)_没有余地没有余地的博客-CSDN博客_上拉输入

(3)代码

  1. //
  2. //定时器3外部时钟触发模式配置 ETR
  3. //外部触发输入:PD2
  4. //使用定时器3第一通道PC6输出PWM波
  5. //可以引出PWM看波形,通过PWM触发ADC采集
  6. //注意ADC需要设置触发为ADC_ExternalTrigConv_T3_CC1
  7. //注意这里不需要TIM3中断,不需要时就不用,之前因为TIM3程序卡在中断服务函数中了,所以需要注意
  8. //
  9. void TIM3_PWMInit(u32 arr,u32 psc,u32 pulse)
  10. {
  11. GPIO_InitTypeDef GPIO_InitStructure;
  12. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  13. TIM_OCInitTypeDef TIM_OCInitStructure;
  14. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //TIM3时钟使能
  15. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); //PORT C使能
  16. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE); //PORT D使能
  17. GPIO_PinAFConfig(GPIOC,GPIO_PinSource6,GPIO_AF_TIM3); //将C6复用给TIM3
  18. GPIO_PinAFConfig(GPIOD,GPIO_PinSource2,GPIO_AF_TIM3); //将D2复用给TIM3,此处对应TIM3_ETR
  19. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  20. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //C6是复用模式
  21. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  22. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出
  23. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  24. GPIO_Init(GPIOC,&GPIO_InitStructure);
  25. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  26. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  27. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  28. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  29. GPIO_Init(GPIOD, &GPIO_InitStructure);
  30. //配置ETR外部输入触发模式,外部输入模式2
  31. TIM_ETRClockMode2Config(TIM3,TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInverted,0);
  32. TIM_TimeBaseStructure.TIM_Prescaler=psc; //预分频值
  33. TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数
  34. TIM_TimeBaseStructure.TIM_Period=arr; //重装载值
  35. TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
  36. TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
  37. TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //输出PWM
  38. TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  39. TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性为低
  40. TIM_OCInitStructure.TIM_Pulse=pulse; //设置输出占空比
  41. TIM_OC1Init(TIM3, &TIM_OCInitStructure);
  42. TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能输出比较1通道自动重装载值
  43. TIM_ARRPreloadConfig(TIM3,ENABLE);
  44. TIM_SetCounter(TIM3,0);
  45. TIM_Cmd(TIM3, ENABLE);
  46. }

(4)Keil5中复制出来中文不会乱码的方法

 

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

闽ICP备14008679号