赞
踩
stm32f107定时器3使用时钟源使用外部时钟源模式2进行定时_一吱乖怂鼠的博客-CSDN博客_stm32定时器外部时钟模式
二、基本思想
使用定时器的外部时钟ETR的方式实现,从ETR输入方波作为外部时钟,输出PWM波触发ADC采集。
定时时间计算与内部时钟时一样计算,只是总时钟频率变化了,在检测验证时要注意计算输出的频率,避免乱设置导致频率太小,示波器检测不到看不到现象。
注意:STM32F4是需要引脚GPIO复用才能使用的,而stm32f1不需要复用,这里易错。
注意因为要用FFT需要在工程中添加:(中间是逗号隔开)STM32F40_41xxx,USE_STDPERIPH_DRIVER,ARM_MATH_CM4,__CC_ARM,ARM_MATH_MATRIX_CHECK,ARM_MATH_ROUNDING
深刻理解GPIO(上拉输入、下拉输入、模拟输入、浮空输入,开漏输出,推挽输出的区别,以STM32为例)_没有余地没有余地的博客-CSDN博客_上拉输入
- //
- //定时器3外部时钟触发模式配置 ETR
- //外部触发输入:PD2
- //使用定时器3第一通道PC6输出PWM波
- //可以引出PWM看波形,通过PWM触发ADC采集
- //注意ADC需要设置触发为ADC_ExternalTrigConv_T3_CC1
- //注意这里不需要TIM3中断,不需要时就不用,之前因为TIM3程序卡在中断服务函数中了,所以需要注意
- //
- void TIM3_PWMInit(u32 arr,u32 psc,u32 pulse)
- {
-
- GPIO_InitTypeDef GPIO_InitStructure;
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- TIM_OCInitTypeDef TIM_OCInitStructure;
-
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //TIM3时钟使能
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); //PORT C使能
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE); //PORT D使能
-
- GPIO_PinAFConfig(GPIOC,GPIO_PinSource6,GPIO_AF_TIM3); //将C6复用给TIM3
- GPIO_PinAFConfig(GPIOD,GPIO_PinSource2,GPIO_AF_TIM3); //将D2复用给TIM3,此处对应TIM3_ETR
-
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //C6是复用模式
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- GPIO_Init(GPIOC,&GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
- GPIO_Init(GPIOD, &GPIO_InitStructure);
- //配置ETR外部输入触发模式,外部输入模式2
- TIM_ETRClockMode2Config(TIM3,TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInverted,0);
-
- TIM_TimeBaseStructure.TIM_Prescaler=psc; //预分频值
- TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数
- TIM_TimeBaseStructure.TIM_Period=arr; //重装载值
- TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
- TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
-
-
- TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //输出PWM
- TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性为低
- TIM_OCInitStructure.TIM_Pulse=pulse; //设置输出占空比
- TIM_OC1Init(TIM3, &TIM_OCInitStructure);
- TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能输出比较1通道自动重装载值
- TIM_ARRPreloadConfig(TIM3,ENABLE);
-
- TIM_SetCounter(TIM3,0);
- TIM_Cmd(TIM3, ENABLE);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。