学习笔记——STM32定时器程序应用(二)

本文介绍了如何在STM32中使用定时器进行PWM输入捕获,详细讲解了配置GPIO、初始化定时器、设置中断优先级以及编写中断服务函数的过程,强调了捕获周期选择的重要性,并提供了相关代码示例。
摘要由CSDN通过智能技术生成

PWM输入捕获代码讲解
大家好,我终于出现了,由于要开始准备考研的复习,再加上32的学习已经学到了摄像头,就鸽了几天。

好,话不多说,我们直接进入正题。

这个实验其实就是用于测量PWM信号,同一个定时器不能同时使用输入捕获和输出比较,因此这个实验中我们使用通用定时器来产生信号,高级定时器来捕获信号。

与之前的实验一样,在例程中的User文件夹下添加bsp_AdvanceTim.c和bsp_AdvanceTim.h文件。 这里注意一点,要把advance和general文件夹。这是因为使用不同的定时器时,对应的GPIO是不一样的。

我们先对PIO进行初始化:

static void ADVANCE_TIM_GPIO_Config(void) 
{
   
  GPIO_InitTypeDef GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(ADVANCE_TIM_CH1_GPIO_CLK, ENABLE);
  GPIO_InitStructure.GPIO_Pin =  ADVANCE_TIM_CH1_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  
  GPIO_Init(ADVANCE_TIM_CH1_PORT, &GPIO_InitStructure);
}

这里注意一点,要把GPIO设置为IN_FLOATING浮空输入,用来捕获方波。

再移植例程中的.h文件:

#ifndef __BSP_ADVANCETIME_H
#define __BSP_ADVANCETIME_H

#include "stm32f10x.h"

#define            ADVANCE_TIM                   TIM1
#define            ADVANCE_TIM_APBxClock_FUN     RCC_APB2PeriphClockCmd
#define            ADVANCE_TIM_CLK               RCC_APB2Periph_TIM1

//输入捕获能捕获到的最小频率为72M/{(ARR+1)*(PSC+1)}
#define            ADVANCE_TIM_PERIOD            (1000-1)
#define            ADVANCE_TIM_PSC               (72-1)

//中断相关宏定义
#define            ADVANCE_TIM_IRQ               TIM1_CC_IRQn
#define            ADVANCE_TIM_IRQHandler        TIM1_CC_IRQHandler

//TIM1输入捕获通道一
#define            ADVANCE_TIM_CH1_GPIO_CLK      RCC_APB2Periph_GPIOA
#define            ADVANCE_TIM_CH1_PORT          GPIOA
#define            ADVANCE_TIM_CH1_PIN           GPIO_Pin_8

#define            ADVANCE_TIM_IC1PWM_CHANNEL    TIM_Channel_1

void ADVANCE_TIM_Init(void)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值