【嵌入式蓝桥杯】PWM输入捕获的

本文介绍了如何在STM32中配置PWM输入捕获,使用固件库v3.5的TIM_PWM_Input示例,详细讲解了PA1和PA2作为TIM2的CH2、CH3和CH4的设置过程,以及输入捕获的周期和占空比计算方法。通过修改中断处理函数和增加通道配置,实现了双通道输入捕获功能。
摘要由CSDN通过智能技术生成

首先我们确认好的输出PWM引脚是
在这里插入图片描述

PA1 TIM2 CH2 作为输出1
PA2 TIM2 CH3 作为输出2
PA2 TIM2 CH4 作为输出2
我们要用的固件库是路径是
\STM32固件库v3.5\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\TIM\PWM_Input\main.c
然后我们找到这一串代码
【很好找的 因为名字上写了pwm input】

输入捕获的一些知识储备
首先两个输入捕获会用的寄存器配置

		TIM_GetCapture1(TIM2);
		得到高电平 也就是上升沿触发的次数
	    TIM_GetCapture2(TIM2);
	    得到低电平 也就是下升沿触发的次数

然后 周期就是主频频率除以上升沿触发的次数(中间注意类型转换)

   采集频率  =    (float)(72000/TIM_GetCapture1(TIM2)));

占空比就是 高电平 除以低电平的次数 (中间注意类型转换)
Channerl_2," Channerl(2):%.3fKHZ ",(float)(72000/DutyCycle_2)

 占空比=	(float)(TIM_GetCapture1(TIM2);*100/TIM_GetCapture2(TIM2);));
 /* TIM3 configuration: PWM Input mode ------------------------
     The external signal is connected to TIM3 CH2 pin (PA.01), 
     The Rising edge is used as active edge,
     The TIM3 CCR2 is used to compute the frequency value 
     The TIM3 CCR1 is used to compute the duty cycle value
  ------------------------------------------------------------ */

  TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  TIM_ICInitStructure.TIM_ICFilter = 0x0;

  TIM_PWMIConfig(TIM3, &TIM_ICInitStructure);

  /* Select the TIM3 Input Trigger: TI2FP2 */
  TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2);

  /* Select the slave Mode: Reset Mode */
  TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);

  /* Enable the Master/Slave Mode */
  TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable);

  /* TIM enable counter */
  TIM_Cmd(TIM3, ENABLE);

  /* Enable the CC2 Interrupt Request */
  TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE);
	

最后把结构体加上去就好了

	TIM_ICInitTypeDef  TIM_ICInitStructure;

接下来把时钟 和GPIO配置加上去 都不用改的直接复制粘贴加上去就好了

  /* TIM3 channel 2 pin (PA.07) configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOA, &GPIO_InitStructure);
  /* TIM3 clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE)
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-ATAO----

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值